《数据结构与算法》课后习题答案

合集下载

罗文劼《数据结构与算法》第4版-第1章课后习题参考答案

罗文劼《数据结构与算法》第4版-第1章课后习题参考答案

第1章绪论

1.选择题

(1)C (2)B (3)C (4)D (5)B

2.判断题

(1)√(2)Ⅹ(3)Ⅹ(4)Ⅹ(5)√

3.简答题

(1)根据数据元素之间的不同逻辑关系,通常将其划分为哪几类结构?

【解答】常见的四种逻辑结构有:

①集合结构:数据元素间的关系是“属于同一个集合”。

②线性结构:数据元素之间存在着一对一的关系。

③树型结构:数据元素之间存在着一对多的关系。

④图型结构:数据元素之间存在着多对多的关系。

(2)请描述线性结构中数据元素与数据元素之间的关系特点?

【解答】线性结构的特点是数据元素之间是一种线性关系,数据元素“一个接一个的排列”。在线性结构中,有且仅有一个元素被称为“第一个”,除第一个元素之外其他元素均有唯一一个“前驱”;有且仅有一个元素被称为“最后一个”,除最后一个元素之外其他元素均有唯一一个“后继”。

(3)请描述树形结构中数据元素与数据元素之间的关系特点?

【解答】树形存储结构,就是数据元素与元素之间存在着一对多关系的数据结构。在树形存储结构中,树的根节点没有前驱结点,其余的每个节点有且只有一个前驱结点,除叶子结点没有后续节点外,其他节点的后续节点可以有一个或者多个。

(4)常用的存储结构有哪几种,各自的特点是什么?

【解答】常见的四种存储结构有:

①顺序存储:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。

②链接存储:对逻辑上相邻的元素不要求不要求物理位置相邻的存储单元,元素间的逻辑关系通过附设的指针域来表示。

数据结构与算法分析习题与参考答案

数据结构与算法分析习题与参考答案

大学

《数据结构与算法分析》课程

习题及参考答案

模拟试卷一

一、单选题(每题 2 分,共20分)

1.以下数据结构中哪一个是线性结构?( )

A. 有向图

B. 队列

C. 线索二叉树

D. B树

2.在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,

则执行如下( )语句序列。

A. p=q; p->next=q;

B. p->next=q; q->next=p;

C. p->next=q->next; p=q;

D. q->next=p->next; p->next=q;

3.以下哪一个不是队列的基本运算?()

A. 在队列第i个元素之后插入一个元素

B. 从队头删除一个元素

C. 判断一个队列是否为空

D.读取队头元素的值

4.字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( )

个不同的字符串?

A.14

B.5

C.6

D.8

5.由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为( )。

以下6-8题基于图1。

6.该二叉树结点的前序遍历的序列为( )。

A.E、G、F、A、C、D、B

B.E、A、G、C、F、B、D

C.E、A、C、B、D、G、F

D.E、G、A、C、D、F、B

7.该二叉树结点的中序遍历的序列为( )。

A. A、B、C、D、E、G、F

B. E、A、G、C、F、B、D

C. E、A、C、B、D、G、F

E.B、D、C、A、F、G、E

8.该二叉树的按层遍历的序列为( )。

A.E、G、F、A、C、D、B B. E、A、C、B、D、G、F

C. E、A、G、C、F、B、D

数据结构与算法习题册参考答案

数据结构与算法习题册参考答案

A 对特定问题求解步骤的一种描述,是指令的有限序列。 B 计算机程序
三. 简答题
1. 分析以下各程序段,并用大 O 记号表示其执行时间。 (1) i=1;k=0; While(i<n-1) { k=k+10*i; i++; } (2) i=1;k=0; do { k=k+10*i; i++; }while(i<=n)
5
课后作业部分
第三章 栈和队列
2. 在操作序列 push(1). push(2). pop. push(5). push(7). pop. push(6)之后, 栈顶元素和 栈底元素分别是什么?(push(k)表示 k 入栈,pop 表示栈顶元素出栈。 )
栈顶元素为 6,栈底元素为 1。
3. 在操作序列 EnQueue(1).
⑴ 应选用顺序存储结构。很少进行插入和删除操作,所以空间变化不大,且需要快速存取,所 以应选用顺序存储结构。 ⑵ 应选用链式存储结构。链表容易实现表容量的扩充,适合表的长度动态发生变化。 ⑶ 应选用链式存储结构。因为一个城市的设计和规划涉及活动很多,需要经常修改、扩充和删 除各种信息,才能适应不断发展的需要。而顺序表的插入、删除的效率低,故不合适。
算法设计要求中的健壮性指的是 算法在发生非法操作时可以作出处理的特性。
二. 选择题
1. 顺序存储结构中数据元素之间的逻辑关系是由 D 表示的。 C 存储位置 D 指针 A 线性结构 B 非线性结构 C 表示的, 链接存储结构中的

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解

1. 习题一:数组求和

题目描述:给定一个整数数组,编写一个函数来计算它的所有元素之和。

解题思路:遍历数组,将每个元素累加到一个变量中,最后返回累加和。

代码实现:

```python

def sum_array(arr):

result = 0

for num in arr:

result += num

return result

```

2. 习题二:链表反转

题目描述:给定一个单链表,反转它的节点顺序。

解题思路:采用三指针法,依次将当前节点的下一个节点指向上一个节点,然后更新三个指针的位置,直到链表反转完毕。

代码实现:

```python

class ListNode:

def __init__(self, val=0, next=None):

self.val = val

self.next = next

def reverse_list(head):

prev = None

curr = head

while curr:

next_node = curr.next

curr.next = prev

prev = curr

curr = next_node

return prev

```

3. 习题三:二叉树的层序遍历

题目描述:给定一个二叉树,返回其节点值的层序遍历结果。

解题思路:采用队列来实现层序遍历,先将根节点入队,然后循环出队并访问出队节点的值,同时将出队节点的左右子节点入队。

代码实现:

```python

class TreeNode:

def __init__(self, val=0, left=None, right=None): self.val = val

数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案

【篇一:《数据结构与算法》课后习题答案】

>2.3.2 判断题

2.顺序存储的线性表可以按序号随机存取。(√)

4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。(√)

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(√)

8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。(√)

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(√)

2.3.3 算法设计题

1.设线性表存放在向量a[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。

【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。

int insert (datatype a[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/

else {i=*elenum;

《数据结构与算法》课后习题答案

《数据结构与算法》课后习题答案
{A[i+1]=A[i];
i--;
}
A[i+1]=x;/*找到的位置就是插入位的下一位*/
(*elenum)++;
return 1;/*插入成功*/
}
}
时间复杂度为O(n)。
2.已知一顺序表A,其元素值非递减有序排列,编写一个算法删除顺序表中多余的值相同的元素。
【提示】对顺序表A,从第一个元素开始,查找其后与之值相同的所有元素,将它们删除;再对第二个元素做同样处理,依此类推。
【提示】直接用题目中所给定的数据结构(顺序存储的思想就是用物理上的相邻表示逻辑上的相邻,不一定将向量与表示线性表长度的变量封装成一个结构体),因为就是顺序存储,分配的存储空间就是固定大小的,所以首先确定就是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x,最后修改表示表长的变量。
}
void process(char R[n])
{low=0;
high=n-1;
while(low<high)/*将字母放在前面*/
{while(low<high&&fch(R[low]))low++;
while(low<high&&!fch(R[high]))high--;

数据结构与算法课程第4章的习题答案

数据结构与算法课程第4章的习题答案
else if(i<=400000)
bonus=bonus2+(i-200000)*0.05;
else if(i<=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
程序流程图:
程序代码:
#include<stdio.h>
void main() {
long i,j,k;
k=10;
for (i=2;i<=1000;i++){
if (i==k) k*=10;
j=i*i;
if(j%k==i)
printf("%ld\t%ld\n",i,j);
}
}
(8)电视台点歌,收费标准为:前10分钟每分钟1.5元,10分钟后每增加1分钟付1元,2小时后不再付费,但6小时后又重新开始计算。计算点歌结束后的付费金额。
swich(branch){
case0: bonus=i*0.1;break;
case1: bonus=bonus1+(i-100000)*0.075;break;

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解

第一章

1.数据结构研究的主要内容包括逻辑结构、存储结构和算法。

2.数据元素是数据的基本单位,数据项是数据的最小标示单位。

3.根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、树形、线性、图状。

4.常见的数据存储结构有四种类型:顺序、链式、索引、散列。

5.可以从正确性、可读性、健壮性、高效性四方面评价算法的质量。

6.在一般情况下,一个算法的时间复杂度是问题规模的函数。

7.常见时间复杂度有:常数阶O(1)、线性阶O(n)、对数阶O(log2 n)、平方阶O(n²)和指数阶O(2ⁿ)。通常认为,具有常数阶量级的算法是好算法,而具有指数阶量级的算法是差算法。

8.时间复杂度排序由大到小(n+2)!>2ⁿ+²>(n+2)4次方>nlog2 n>100000.

问答题:

1.什么叫数据元素?

数据元素是数据的基本单位,是数据这个集合的个体,也称为元素、结点、顶点、记录。

2.什么叫数据逻辑结构?什么叫数据存储结构?

数据逻辑结构:指数据元素之间存在的固有的逻辑结构。

数据存储结构:数据元素及其关系在计算机内的表示。

3.什么叫抽象数据类型?

抽象数据类型是指数据元素集合以及定义在该集合上的一组操作。

4.数据元素之间的关系在计算机中有几种表示方法?

顺序、链式、索引、散列。

5.数据的逻辑结构与数据的存储结构之间存在着怎样的关系?

相辅相成,不可分割。

6.什么叫算法?算法的性质有哪些?

算法:求解问题的一系列步骤的集合。

可行性、有容性、确定性、有输入、有输出。

7.评价一个算法的好坏应该从哪几方面入手?

数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案

【篇一:《数据结构与算法》课后习题答案】

>2.3.2 判断题

2.顺序存储的线性表可以按序号随机存取。(√)

4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。(√)

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(√)

8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。(√)

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(√)

2.3.3 算法设计题

1.设线性表存放在向量a[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。

【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。

int insert (datatype a[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/

else {i=*elenum;

数据结构与算法习题及答案

数据结构与算法习题及答案

精心整理

第1章绪论

习题

1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现

5

A

6

{x=x-10;y--;}

elsex++;

(2)for(i=0;i

for(j=0;j

a[i][j]=0;

(3)s=0;

fori=0;i

for(j=0;j

s+=B[i][j];

sum=s;

(4)i=1;

while(i<=n)

i=i*3;

(5)x=0;

for(i=1;i

for(j=1;j<=n-i;j++)

x++;

(6)x=n;n108 C63.5 C1 C-1 C1 Cext=s;(*s).next=(*p).next;

C.s->next=p->next;p->next=s->next;

D.s->next=p->next;p->next=s;

2

,

=(rear+1)%=(rear+1)%(m+1)

(13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。

A.(rear+1)%n====front

C.rear+1==frontD.(rear-l)%n==front

(14)栈和队列的共同点是()。

A.都是先进先出

B.都是先进后出

C.只允许在端点处插入和删除元素

D.没有共同点

(15)一个递归算法必须包括()。

A.递归部分

B.终止条件和递归部分

C.迭代部分

D.终止条件和迭代部分

(2)回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

数据结构与算法习题及答案

数据结构与算法习题及答案

第1章绪论

习题

1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?

5.选择题

(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构

C.线性结构和非线性结构D.内部结构和外部结构

(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现

C.逻辑结构D.运算实现

(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点

B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致

C.每个数据元素都一样

D.数据元素所包含的数据项的个数要相等

(4)以下说法正确的是()。

A.数据元素是数据的最小单位

B.数据项是数据的基本单位

C.数据结构是带有结构的各数据项的集合

D.一些表面上很不相同的数据可以有相同的逻辑结构

(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C.有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构

A.树B.字符串C.队D.栈

6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;

while(y>0)

if(x>100)

{x=x-10;y--;}

else x++;

(2)for (i=0; i<n; i++)

《数据结构与算法》课后习题答案

《数据结构与算法》课后习题答案

2.3 课后习题解答

2.3.2 判断题

1.线性表的逻辑顺序与存储顺序总是一致的。(×)

2.顺序存储的线性表可以按序号随机存取。(√)

3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。(×)

4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。(√)

5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。(×)

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(√)7.线性表的链式存储结构优于顺序存储结构。(×)

8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。(√)

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。(×)

11.静态链表既有顺序存储的优点,又有动态链表的优点。所以它存取表中第i个元素的时间与i无关。(×)

12.线性表的特点是每个元素都有一个前驱和一个后继。(×)

2.3.3 算法设计题

1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。

数据结构与算法第3章课后答案

数据结构与算法第3章课后答案

第 3 章特殊线性表——栈、队列和串

(2005-07-14) -

第 3 章特殊线性表——栈、队列和串

课后习题讲解

1. 填空

⑴设有一个空栈,栈顶指针为1000H,现有输入序列为1、2、3、4、5,经过

push,push,pop,push,pop,push,push后,输出序列是(),栈顶指针为()。

【解答】23,1003H

⑵栈通常采用的两种存储结构是();其判定栈空的条件分别是(),判定栈满的条件分别是()。

【解答】顺序存储结构和链接存储结构(或顺序栈和链栈),栈顶指针top= -1和top=NULL,栈顶指针top等于数

组的长度和内存无可用空间

⑶()可作为实现递归函数调用的一种数据结构。

【解答】栈

【分析】递归函数的调用和返回正好符合后进先出性。

⑷表达式a*(b+c)-d的后缀表达式是()。

【解答】abc+*d-

【分析】将中缀表达式变为后缀表达式有一个技巧:将操作数依次写下来,再将算符插在它的两个操作数的后面

⑸栈和队列是两种特殊的线性表,栈的操作特性是(),队列的操作特性是(),栈和队列的主要区别在于(

)。

【解答】后进先出,先进先出,对插入和删除操作限定的位置不同

⑹循环队列的引入是为了克服()。

【解答】假溢出

⑺数组Q[n]用来表示一个循环队列,front为队头元素的前一个位置,rear为队尾元素的位置,计算队列中元素

个数的公式为()。

page: 2

The Home of jetmambo - 第 3 章特殊线性表——栈、队列和串

【解答】(rear-front+n)% n

【分析】也可以是(rear-front)% n,但rear-front的结果可能是负整数,而对一个负整数求模,其结果在不同

数据结构与算法习题册参考答案

数据结构与算法习题册参考答案

数据结构与算法

习题册

(课后部分参考答案)

《数据结构与算法》课程组

目录

目录

课后习题部分

第一章绪论 (1)

第二章线性表 (3)

第三章栈和队列 (5)

第四章串 (8)

第五章数组和广义表 (10)

第六章树和二叉树 (13)

第七章图 (16)

第九章查找 (20)

第十章排序 (23)

第一章绪论

一. 填空题

1. 从逻辑关系上讲,数据结构的类型主要分为集合、线性结构、树结构和图结构。

2. 数据的存储结构主要有顺序存储和链式存储两种基本方法,不论哪种存储结构,都要存储两方面的内容:数据元素和数据元素之间的关系。

3. 算法具有五个特性,分别是有穷性、确定性、可行性、输入、输出。

4. 算法设计要求中的健壮性指的是算法在发生非法操作时可以作出处理的特性。

二. 选择题

1. 顺序存储结构中数据元素之间的逻辑关系是由 C 表示的,链接存储结构中的数据元素之间的逻辑关系是由 D 表示的。

A 线性结构

B 非线性结构

C 存储位置

D 指针

2. 假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。则表示该遗产继承关系的最合适的数据结构应该是

B 。

A 树

B 图

C 线性表

D 集合

3. 算法指的是 A 。

A 对特定问题求解步骤的一种描述,是指令的有限序列。

B 计算机程序

C 解决问题的计算方法

D 数据处理

三. 简答题

1. 分析以下各程序段,并用大O记号表示其执行时间。

(1) (2)

i=1;k=0; i=1;k=0;

While(i

{ {

k=k+10*i; k=k+10*i;

i++; i++;

第5章 数据结构与算法 习题与答案

第5章 数据结构与算法 习题与答案

第五章习题

(1)复习题

1、试述数据和数据结构的概念及其区别。

数据是对客观事物的符号表示,是信息的载体;数据结构则是指互相之间存在着一种或多种关系的数据元素的集合。(P113)

2、列出算法的五个重要特征并对其进行说明。

算法具有以下五个重要的特征:有穷性:一个算法必须保证执行有限步之后结束。确切性:算法的每一步骤必须有确切的定义。输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件。输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法没有实际意义。可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。(P115)

3、算法的优劣用什么来衡量?试述如何设计出优秀的算法。

时间复杂度空间复杂度(P117)

4、线性和非线性结构各包含哪些种类的数据结构?线性结构和非线性结构各有什么特点?线性结构用于描述一对一的相互关系,即结构中元素之间只有最基本的联系,线性结构的特点是逻辑结构简单。所谓非线性结构是指,在该结构中至少存在一个数据元素,有两个或两个以上的直接前驱(或直接后继)元素。树型和图型结构就是其中十分重要的非线性结构,可以用来描述客观世界中广泛存在的层次结构和网状结构的关系。(P118 P122)

5、简述树与二叉树的区别;简述树与图的区别。

树用来描述层次结构,是一对多或多对一的关系;二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。图也称做网,是一种比树形结构更复杂的非线性结构。在图中,任意两个节点之间都可能相关,即节点之间的邻接关系可以是任意的,图表示的多对多的关系。(P121-P124)

智慧树知道网课《数据结构与算法(仲恺农业工程学院)》课后章节测试满分答案

智慧树知道网课《数据结构与算法(仲恺农业工程学院)》课后章节测试满分答案

第一章测试

1

【单选题】(10分)

在数据结构中,从逻辑上可以把数据结构分为()两类。

A.

紧凑结构和非紧凑结构

B.

线性结构和非线性结构

C.

动态结构和静态结构

D.

内部结构和外部结构

2

【单选题】(10分)

数据的逻辑结构是()关系的整体。

A.

数据项之间逻辑

B.

数据类型之间

C.

存储结构之间

D.

数据元素之间逻辑

3

【单选题】(5分)

在计算机的存储器中表示数据时,物理地址和逻辑地址的相对位置相同并且是连续的,称之为()。

A.

链式存储结构

B.

逻辑结构

C.

顺序存储结构

4

【单选题】(5分)

在链式存储结构中,通常一个存储节点用于存储一个()。

A.

数据元素

B.

数据项

C.

数据结构

D.

数据类型

5

【单选题】(5分)

数据运算的执行()。

A.

是根据存储结构来定义的

B.

必须用程序设计语言来描述

C.

效率与采用何种存储结构有关

D.

有算术运算和关系运算两大类

6

【单选题】(5分)

数据结构在计算机内存中的表示是指()。

A.

数据的逻辑结构

B.

数据的存储结构

C.

数据元素之间的关系

D.

数据结构

7

【单选题】(10分)

在数据结构中,与所使用的计算机无关的是()。

A.

存储结构

B.

物理结构

C.

逻辑结构和存储结构

D.

逻辑结构

8

【单选题】(10分)

数据采用链式存储结构存储,要求()。

A.

所有节点占用一片连续的存储区域

B.

节点的最后一个数据域是指针类型

C.

每个节点占用一片连续的存储区域

D.

每个节点有多少个后继,就设多少个指针域

9

【单选题】(10分)

下列说法中,不正确的是()。

A.

数据项是数据中不可分割的最小可标识单位

B.

数据项可由若干个数据元素构成

C.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.3 课后习题解答

2.3.2 判断题

1.线性表的逻辑顺序与存储顺序总是一致的。(×)

2.顺序存储的线性表可以按序号随机存取。(√)

3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。(×)

4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。(√)

5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。(×)

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(√)7.线性表的链式存储结构优于顺序存储结构。(×)

8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。(√)

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。(×)

11.静态链表既有顺序存储的优点,又有动态链表的优点。所以它存取表中第i个元素的时间与i无关。(×)

12.线性表的特点是每个元素都有一个前驱和一个后继。(×)

2.3.3 算法设计题

1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。

int insert (datatype A[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/

else {i=*elenum;

while (i>=0 && A[i]>x) /*边找位置边移动*/

{A[i+1]=A[i];

i--;

}

A[i+1]=x; /*找到的位置是插入位的下一位*/

(*elenum)++;

return 1; /*插入成功*/

}

}

时间复杂度为O(n)。

2.已知一顺序表A,其元素值非递减有序排列,编写一个算法删除顺序表中多余的值相同的元素。

【提示】对顺序表A,从第一个元素开始,查找其后与之值相同的所有元素,将它们删除;再对第二个元素做同样处理,依此类推。

void delete(Seqlist *A)

{i=0;

while(ilast) /*将第i个元素以后与其值相同的元素删除*/

{k=i+1;

while(k<=A->last&&A->data[i]==A->data[k])

k++; /*使k指向第一个与A[i]不同的元素*/ n=k-i-1; /*n表示要删除元素的个数*/

for(j=k;j<=A->last;j++)

A->data[j-n]=A->data[j]; /*删除多余元素*/

A->last= A->last -n;

i++;

}

}

3.写一个算法,从一个给定的顺序表A中删除值在x~y(x<=y)之间的所有元素,要求以较高的效率来实现。

【提示】对顺序表A,从前向后依次判断当前元素A->data[i]是否介于x和y之间,若是,并不立即删除,而是用n记录删除时应前移元素的位移量;若不是,则将A->data[i]向前移动n位。n用来记录当前已删除元素的个数。

void delete(Seqlist *A,int x,int y)

{i=0;

n=0;

while (ilast)

{if (A->data[i]>=x && A->data[i]<=y) n++; /*若A->data[i] 介于x和y之间,n自增*/

else A->data[i-n]=A->data[i]; /*否则向前移动A->data[i]*/

i++;

}

A->last-=n;

}

4.线性表中有n个元素,每个元素是一个字符,现存于向量R[n]中,试写一算法,使R中的字符按字母字符、数字字符和其它字符的顺序排列。要求利用原来的存储空间,元素移动次数最小。

【提示】对线性表进行两次扫描,第一次将所有的字母放在前面,第二次将所有的数字放在字母之后,其它字符之前。

int fch(char c) /*判断c是否字母*/

{if(c>='a'&&c<='z'||c>='A'&&c<='Z') return (1);

else return (0);

}

int fnum(char c) /*判断c是否数字*/

{if(c>='0'&&c<='9') return (1);

else return (0);

}

void process(char R[n])

{low=0;

high=n-1;

while(low

{while(low

while(low

if(low

{k=R[low];

R[low]=R[high];

R[high]=k;

}

}

low=low+1;

high=n-1;

while(low

{while(low

while(low

if(low

{k=R[low];

R[low]=R[high];

R[high]=k;

}

}

}

5.线性表用顺序存储,设计一个算法,用尽可能少的辅助存储空间将顺序表中前m个元素和后n个元素进行整体互换。即将线性表:

(a1, a2, … , a m, b1, b2, … , b n)改变为:

(b1, b2, … , b n , a1, a2, … , a m)。

【提示】比较m和n的大小,若m

void process(Seqlist *L,int m,int n)

{if(m<=n)

for(i=1;i<=m;i++)

{x=L->data[0];

for(k=1;k<=L->last;k++)

L->data[k-1]=L->data[k];

L->data[L->last]=x;

}

else for(i=1;i<=n;i++)

{x=L->data[L->last];

for(k=L->last-1;k>=0;k- -)

L->data[k+1]=L->data[k];

相关文档
最新文档