数据结构参考答案

《数据结构》模拟卷A

一、选择题

1.在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为( A )。

A. O(n)

B. O(n/2)

C. O(1)

D. O(n2)

2.带头结点的单链表first为空的判定条件是:( B )。

A. first == NULL;

B. first->link == NULL;

C. first->link == first;

D. first != NULL;

3. 从逻辑上可以把数据结构分为( C )两大类。

A.动态结构、静态结构B.顺序结构、链式结构

C.线性结构、非线性结构 D.初等结构、构造型结构

4.在系统实现递归调用时需利用递归工作记录保存实际参数的值。在传值参数情形,需为

对应形式参数分配空间,以存放实际参数的副本;在引用参数情形,需保存实际参数的( D ),在被调用程序中可直接操纵实际参数。

A. 空间

B. 副本

C. 返回地址

D. 地址

5. 以下数据结构中,哪一个是线性结构( D )。

A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串

6. 以下属于逻辑结构的是( C )。

A.顺序表 B. 哈希表 C.有序表 D. 单链表

7.对于长度为9的有序顺序表,若采用折半搜索,在等概率情况下搜索成功的平均搜索长

度为( C )的值除以9。

A. 20

B. 18

C. 25

D. 22

8.在有向图中每个顶点的度等于该顶点的( C )。

A. 入度

B. 出度

C. 入度与出度之和

D. 入度与出度之差

9.在基于排序码比较的排序算法中,( C )算法的最坏情况下的时间复杂度不高于

O(nlog2n)。

A. 起泡排序

B. 希尔排序

C. 归并排序

D. 快速排序

10.当α的值较小时,散列存储通常比其他存储方式具有( B )的查找速度。

A. 较慢

B. 较快

C. 相同

D.不同

二、填空题

1.二维数组是一种非线性结构,其中的每一个数组元素最多有______2___个直接前驱(或

直接后继)。

2.将一个n阶三对角矩阵A的三条对角线上的元素按行压缩存放于一个一维数组B中,

A[0][0]存放于B[0]中。对于任意给定数组元素B[K],它应是A中第_⎣(K+1)/3⎦_行的元素。

3.链表对于数据元素的插入和删除不需移动结点,只需改变相关结点的__指针__域的值。

4.在一个链式栈中,若栈顶指针等于NULL则为__空栈_。

5.主程序第一次调用递归函数被称为外部调用,递归函数自己调用自己被称为内部调用,

它们都需要利用栈保存调用后的__返回_地址。

6.在一棵树中,__叶子_结点没有后继结点。

7.一棵树的广义表表示为a (b (c, d (e, f), g (h) ), i (j, k (x, y) ) ),结点f

的层数为___3___。假定根结点的层数为0。

8.在一棵AVL树(高度平衡的二叉搜索树)中,每个结点的左子树高度与右子树高度之差

的绝对值不超过_____1___。

9.n (n﹥0) 个顶点的无向图最多有__ n(n-1)/2_条边,最少有___0_____条边。

10.在索引存储中,若一个索引项对应数据对象表中的一个表项(记录),则称此索引为_

稠密__索引,若对应数据对象表中的若干个表项,则称此索引为_稀疏___索引。

三、判断题

1.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的(对)

2.链式存储在插入和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间

的逻辑顺序(错)

3.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针(对)

4.通常递归的算法简单、易懂、容易编写,而且执行的效率也高(错)

5.一个广义表的表尾总是一个广义表(对)

6.当从一个小根堆(最小堆)中删除一个元素时,需要把堆尾元素填补到堆顶位置,然后

再按条件把它逐层向下调整,直到调整到合适位置为止(对)

7.对于一棵具有n个结点,其高度为h的二叉树,进行任一种次序遍历的时间复杂度为

O(h)(错)

8.存储图的邻接矩阵中,邻接矩阵的大小不但与图的顶点个数有关,而且与图的边数也有

关(错)

9.直接选择排序是一种稳定的排序方法(错)

10.闭散列法通常比开散列法时间效率更高(错)

四、运算题

1.设有一个10 10的对称矩阵A,将其下三角部分按行存放在一个一维数组B中,A[0][0]

存放于B[0]中,那么A[8][5]存放于B中什么位置。

解:根据题意,矩阵A中当元素下标I与J满足I≥J时,任意元素A[I][J]在一维数组B中的存放位置为I * (I + 1) / 2 + J,因此,A[8][5]在数组B中位置为

8 * (8 + 1) / 2 + 5 = 41。

2.这是一个统计单链表中结点的值等于给定值x的结点数的算法,其中while循环有错,

请重新编写出正确的while循环。

int count ( ListNode * Ha, ElemType x )

{ // Ha为不带头结点的单链表的头指针

int n = 0;

while ( Ha->link != NULL ) {

Ha = Ha->link;

if ( Ha->data == x ) n++;

}

return n;

}

解:

while ( Ha != NULL ) {

if ( Ha->data == x ) n++;

Ha = Ha->link;

}

3.已知一棵二叉树的前序和中序序列,求该二叉树的后序序列。

前序序列:A, B, C, D, E, F, G, H, I, J

中序序列:C, B, A, E, F, D, I, H, J, G

后序序列:

解:后序序列:C, B, F, E, I, J, H, G, D, A

4. 已知一个有序表 ( 15, 26, 34, 39, 45, 56, 58, 63, 74, 76, 83, 94 ) 顺序存储于

一维数组a[12]中,根据折半搜索过程填写成功搜索下表中所给元素34, 56, 58, 63, 94时的比较次数。

元素值

比较次数

解:判断结果

元素值 比较次数

5. 设散列表为HT[17], 待插入关键码序列为 { Jan, Feb, Mar, Apr, May, June, July,

Aug, Sep, Oct, Nov, Dec },散列函数为H (key) = ⎣i / 2⎦,其中,i 是关键码第一个字母在字母表中的序号。现采用线性探查法解决冲突。 (1) 试画出相应的散列表;

H(Jan) = ⎣10/2⎦ = 5,成功. H(Feb) = ⎣6/2⎦ = 3,成功. H(Mar) = ⎣13/2⎦ = 6,成功. H(Apr) = ⎣1/2⎦ = 0,成功.

H(May) = ⎣13/2⎦ = 6,= 7,成功, H(June) = ⎣10/2⎦ = 5,= 6,= 7,=8,成功. H(July) = ⎣10/2⎦ = 5,= 6,= 7,= 8,= 9,成功. H(Aug) = ⎣1/2⎦ = 0,= 1,成功. H(Sep) = ⎣19/2⎦ = 9,= 10,成功. H(Oct) = ⎣15/2⎦ = 7,= 8,= 9,= 10,= 11,成功. H(Nov) = ⎣14/2⎦ = 7,= 8,= 9,= 10,= 11,= 12,成功. H(Dec) = ⎣4/2⎦ = 2,成功. (1) 相应的散列表:

1 2 3 4

5

6 7 8 9 10

11

12

13

(1)

(2)

(1)

(1)

(1)

(1)

(2)

(4)

(5)

(2)

(5)

(6)

34 56 58 63 94 34 56 58 63 94 02 1 3 4 4

(2)计算等概率下搜索成功的平均搜索长度;

1/12 * (1 + 2 + 1 + 1 + 1 + 1 + 2 + 4 + 5 + 2 + 5 + 6) = 31 / 12

五、算法设计题

已知二叉树中的结点类型用BinTreeNode表示,被定义为:

struct BTreeNode { char data; BinTreeNode *leftChild, *rightChild; };其中data 为结点值域,leftChild和rightChild分别为指向左、右子女结点的指针域,根据下面函数声明编写出求一棵二叉树中结点总数的算法,该总数值由函数返回。假定参数BT初始指向这棵二叉树的根结点。

int BTreeCount ( BinTreeNode* BT );

解:int BTreeCount ( BinTreeNode* BT ) {

if ( BT == NULL ) return 0;//2分

else return BTreeCount ( BT->leftChild ) + BTreeCount ( BT->rightChild ) + 1;

//4分

}

《数据结构》模拟卷 B

一、单项选择题

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

A.循环队列 B. 链表 C. 哈希表 D. 栈

2.以下数据结构中,哪一个是线性结构( D )。

A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串

3.以下那一个术语与数据的存储结构无关?( B )。

A.栈 B. 哈希表 C. 线索树 D. 双向链表

4.在下面的程序段中,对x的赋值语句的频度为( C )。

FOR i:=1 TO n DO

FOR j:=1 TO n DO

x:=x+1;

A. O(2n) B.O(n) C.O(n2) D.O(log2n)

5.下面关于线性表的叙述中,错误的是哪一个( B )。

A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

6.线性表是具有n个( C )的有限序列(n>0)。

A.表元素 B.字符 C.数据元素 D.数据项 E.信息项

7.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( A )存储方式最节省时间。

A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表8.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。

A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表

9.下面给出的四种排序法中( D )排序法是不稳定性排序法。

A. 插入

B. 冒泡

C. 二路归并

D. 堆积

10. 下列排序算法中,其中( D )是稳定的。

A. 堆排序,冒泡排序

B. 快速排序,堆排序

C. 直接选择排序,归并排序

D. 归并排序,冒泡排序

11.已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( D )。

A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE 12.算术表达式a+b*(c+d/e)转为后缀表达式后为( B )。

A.ab+cde/* B.abcde/+*+ C.abcde/*++ D.abcde*/++

二、填空题,在横线处填写合适内容

1. 数据结构的存储结构包括顺序、_链接___、索引和散列等四种。

2. 在程序运行过程中可以扩充的数组是_动态__分配的数组。这种数组在声明它时需要使用数组指针。

3. 在链表中进行插入和删除操作的效率比在顺序存储结构中进行相同操作的效率高。

4. 栈是一种限定在表的一端进行插入和删除的线性表,又被称为_后出先进__表。

5. 如果一个对象部分地包含自己,或自己定义自己,则称这个对象是__递归___的对象。

6. 一棵树的广义表表示为a(b(c,d(e,f),g(h)),i(j,k(x,y))),结点f的层数为___3______。假定树根结点的层数为0。

7. 一棵树按照左子女-右兄弟表示法转换成对应的二叉树,则该二叉树中树根结点肯定没有____右____子女。

8. 向一棵二叉搜索树中插入一个元素时,若元素的值小于根结点的值,则应把它插入到根结点的_左子树_上。

9. 设图G=(V,E),V={1,2,3,4}, E={<1,2>,<1,3>,<2,4>,<3,4>},从顶点1出发,对图G 进行广度优先搜索的序列有___2_____种。

10. 每次直接或通过基准元素间接比较两个元素,若出现逆序排列就交换它们的位置,这种排序方法叫做___交换_______排序。

11. 快速排序在平均情况下的空间复杂度为__ O(log2n) ___。

12. 若对长度n=10000的线性表进行二级索引存储,每级索引表中的索引项是下一级20个表项的索引,则一级索引表的长度为___500_____。

三、判断题

1.在顺序表中进行顺序搜索时,若各元素的搜索概率不等,则各元素应按照搜索概率的降序排列存放,则可得到最小的平均搜索长度(对)

2. 在二叉搜索树中,若各结点的搜索概率不等,使得搜索概率越小的结点离树根越近,则得到的是最优二叉搜索树(错)

3. 对于AOE网络,加速任一关键活动都能使整个工程提前完成(错)

4. 直接选择排序是一种稳定的排序方法(错)

5. 闭散列法通常比开散列法时间效率更高(错)

6.数据的逻辑结构是指各数据元素之间的逻辑关系,是用户根据应用需要建立的(对)

7.顺序表和一维数组一样,都可以按下标随机(或直接)访问(对)

8.在一个顺序存储的循环队列中, 队头指针指向队头元素的后一个位置(错)

9.用非递归方法实现递归算法时一定要使用递归工作栈(错)

10.在一棵二叉树中,假定每个结点只有左子女,没有右子女,对它分别进行中序遍历和后序遍历,则具有相同的结果(对)

四、运算题

1. 设有一个二维数组A[10][20],按行存放于一个连续的存储空间中,A[0][0]的存储地址是200,每个数组元素占1个存储字,则A[6][2]的存储字地址是多少。

A[6][2]的存储字地址:322

答案说明:

按行存储时,计算A[i][j]地址的公式为

LOC(i,j)=LOC(0,0)+(i*n+j)*d

其中首地址LOC(0,0)=200, 每个数组元素的存储占用数d=1, 二维数组的列数n=20,根据题意,元素A[6][2]的存储地址为

LOC(6,2)=200+(6*20+2)*1=322

2. 已知一棵二叉树的中序和后序序列如下,求该二叉树的高度(假定空树的高度为-1)和度为2、度为1及度为0的结点个数。

中序序列:c,b,d,e,a,g,i,h,j,f

后序序列:c,e,d,b,i,j,h,g,f,a

求解一下问题:

高度: 4

度为2的结点数:3

度为1的结点数: 3

度为0的结点数:4

3. 假定一组记录为(36,75,83,54,12,67,60,40),将按次序把每个结点插入到初始为空的一棵AVL树中,请回答在插入时需进行“左单旋转”、“右单旋转”、“先左后右双旋转”、“先右后左双旋转”,“不调整”的结点数各是多少?

左单旋转结点个数: 1

右单旋转结点个数:0

先左后右双旋转结点个数: 1

先右后左双旋转结点个数:0

不调整结点个数:6

4. 已知一个带权图的顶点集V和边集G分别为:

V={0,1,2,3,4,5,6};

E={(0,1)19,(0,2)10,(0,3)14,(1,2)6,(1,5)5,(2,3)26,(2,4)15,(3,4)18,

(4,5)6,(4,6)6,(5,6)12};

试根据迪克斯特拉(Dijkstra)算法求出从顶点0到其余各顶点的最短路径,在下面填写对应的路径长度。

顶点: 0 1 2 3 4 5 6

5. 已知一个数据表为{36,25,25*,62,40,53},请写出在进行快速排序的过程中每次划分后

数据表的变化。

(0) [36 25 25* 62 40 53]

(1) [25* 25] 36 [62 40 53]

(2) 25* 25 36 [53 40] 62

(3) 25* 25 36 40 53 62

五、算法设计题

1.设有一个表头为first的单链表。试设计一个算法,通过遍历一趟链表,将链表中所有结点按逆序链接。

解答1

template void List : : Tnerse() {

if (first== NULL )return ;

ListNode * p=first→link ; , *pr =NULL ;

While (p !=NULL ) {

First→link =pr ;

Pr =first ;first =p ;p =p→link;

}

first ->link =pr ;

}

解答2

template void List : : Tnerse() {

ListNode * p , *head = new ListNode ( ) ;

While (first ! = NULL ) {

P=first ;first = first→link;

p→link =head→link ; head→link =p;

}

first = head→link ; delete head ;

}

《数据结构》模拟卷 C

一、单项选择题

1.数据结构是( D )。

A.一种数据类型

B.数据的存储结构

C.一组性质相同的数据元素的集合

D.相互之间存在一种或多种特定关系的数据元素的集合

2.算法分析的目的是(B )。

A.辨别数据结构的合理性

B.评价算法的效率

C.研究算法中输入与输出的关系

D.鉴别算法的可读性

3.在线性表的下列运算中,不.改变数据元素之间结构关系的运算是( D )。

A.插入B.删除

C.排序D.定位

4.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( B )。

A.3,2,6,1,4,5 B.3,4,2,1,6,5

C.1,2,5,3,4,6 D.5,6,4,2,3,1

5.设串sl=″Data Structures with Java″,s2=″it″,则子串定位函数index(s1,s2)的值为( D )。

A.15 B.16

C.17 D.18

6.二维数组A[8][9]按行优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址为1153,则数组元素A[6][7]的存储地址为(A )。

A.1207 B.1209

C.1211 D.1213

7.在按层次遍历二叉树的算法中,需要借助的辅助数据结构是( A )。

A.队列B.栈

C.线性表D.有序表

8.在任意一棵二叉树的前序序列和后序序列中,各叶子之间的相对次序关系(B )。A.不一定相同B.都相同

C.都不相同D.互为逆序

9.若采用孩子兄弟链表作为树的存储结构,则树的后序遍历应采用二叉树的(C )。A.层次遍历算法B.前序遍历算法

C.中序遍历算法D.后序遍历算法

10.若用邻接矩阵表示一个有向图,则其中每一列包含的″1″的个数为(A )。

A.图中每个顶点的入度B.图中每个顶点的出度

C.图中弧的条数D.图中连通分量的数目

11.图的邻接矩阵表示法适用于表示(C )。

A.无向图B.有向图

C.稠密图D.稀疏图

12.在对n个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素,则在进行第i趟排序之前,无序区中关键字元素的个数为(D )。

A.i B.i+1

C.n-i D.n-i+1

二、填空题

1.栈是__特殊_____的线性表,其运算遵循__后进先出_____的原则。

2.___栈__是限定仅在表尾进行插入或删除操作的线性表。

3. 一个栈的输入序列是:1,2,3则不可能的栈输出序列是_3,1,2______。

4.二叉树由_根结点、左子树、右子树__三个基本单元组成。

5.在二叉树中,指针p所指结点为叶子结点的条件是P->Lchild==NULL && P->Rchild==NULL _。

6.具有256个结点的完全二叉树的深度为__9____。

7.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有__12_个叶子结点。

8.若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的_比较_____和记录的_移动____。

9.分别采用堆排序,快速排序,冒泡排序和归并排序,对初态为有序的表,则最省时间的是_冒泡排序____算法,最费时间的是_快速排序_算法。

10.不受待排序初始序列的影响,时间复杂度为O(N2)的排序算法是_选择排序____,在排序算法的最后一趟开始之前,所有元素都可能不在其最终位置上的排序算法是_归并排序____。

三、解答题

1.某广义表的表头和表尾均为(a,(b,c)),画出该广义表的图形表示。

2.已知二叉树的先序序列和中序序列分别为HDACBGFE和ADCBHFEG。

(1)画出该二叉树;

(2)画出与(1)求得的二叉树对应的森林。

3.已知带权图的邻接表如下所示,其中边表结点的结构为:

依此邻接表从顶点C出发进行深度优先遍历。

(1)画出由此得到的深度优先生成树;

(2)写出遍历过程中得到的从顶点C到其它各顶点的带权路径及其长度。

顶点C到顶点A的带权路径为(C,D,B,A),其长度为8+20+11=39

顶点C到顶点B的带权路径为(C,D,B),其长度为8+20=28

顶点C到顶点D的带权路径为(C,D),其长度为8

顶点C到顶点E的带权路径为(C,D,B,F,E),其长度为8+20+9+14=51

顶点C到顶点F的带权路径为(C,D,B,F),其长度为8+20+9=37

四、算法设计题

1.已知中序线索二叉树T右子树不空。设计算法,将S所指的结点作为T的右子树中的一个叶子结点插入进去,并使之成为T的右子树的(中序序列)第一个结点(同时要修改相应的线索关系)。

insertS(BiThrTree T)

{p=T->lchild; //T是线索二叉树T的头结点,p指向根节点

if(p->RTag==1) return ERROR; //右标记是线索,即右子树为空则返回错误

p=p->rchild ;

while(p->LTag==0) //当p节点的左标记是孩子时,p指向p的左孩子 p=p->lchild;

S->LTag=1; S->RTag=1; //S的左右标记都为线索

S->lchild=p->lchild;

S->rchild=p;

p->lchild=S; p->LTag=0;

return OK;

}

2.写出在中序线索二叉树里;找指定结点在后序下的前驱结点的算法。

//指定节点为S, F是它在后序下的前驱结点,thrt是头结点指针

qianqu(BiTreTree thrt)

{if(S->RTag==0)// 有右子树

F=S->Rchild;

else if (S->LTag==0) //无右子树但有左子树

F=S->Lchild

else { //叶子节点

p=S;

while(p->LTag==1)

p=p->Lchild;

if(p!=thrt) thrt是头结点指针

F=p->Lchild;

else F=NIL;

}

}

(完整版)数据结构单元4练习参考答案

单元测验4 一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳) (√)(1)队列是限制在两端进行操作的线性表。 (√)(2)判断顺序队列为空的标准是头指针和尾指针都指向同一个结点。 (×)(3)在链队列上做出队操作时,会改变front指针的值。 (√)(4)在循环队列中,若尾指针rear大于头指针front,其元素个数为rear- front。(×)(5)在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是p=h。(√)(6)链队列在一定范围内不会出现队满的情况。 (×)(7)在循环链队列中无溢出现象。 (×)(8)栈和队列都是顺序存储的线性结构。 (×)(9)在队列中允许删除的一端称为队尾。 (×)(10)顺序队和循环队关于队满和队空的判断条件是一样的。 二.填空题 (1)在队列中存取数据应遵循的原则是先进先出。 (2)队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 (3)在队列中,允许插入的一端称为队尾。 (4)在队列中,允许删除的一端称为队首(或队头)。 (5)队列在进行出队操作时,首先要判断队列是否为空。 (6)顺序队列在进行入队操作时,首先要判断队列是否为满。 (7)顺序队列初始化后,front=rear= -1 。 (8)解决顺序队列“假溢出”的方法是采用循环队列。 (9)循环队列的队首指针为front,队尾指针为rear,则队空的条件为 front == rear 。 (10)链队列LQ为空时,LQ->front->next= NULL 。 (11)设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为 O(n)。 (12)设长度为n的链队列用单循环链表表示,若只设尾指针,则出队操作的时间复杂度为 0(1)。 (13)在一个链队列中,若队首指针与队尾指针的值相同,则表示该队列为空。

(完整版)数据结构课后答案

第1章绪论 1 ?简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 答案: 数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。 数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、结点、记录等。数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。 数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信息表中的学号、姓名、性别等都是数据项。 数据对象:是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0, ± 1,土2,…},字母字符数据对象是集合C={ ‘A',‘ B',…,‘ Z', ‘a',‘ $,???,‘ z' }, 学生基本信息表也可是一个数据对象。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。 逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。 存储结构:数据对象在计算机中的存储表示,也称为物理结构。 抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。 2?试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 答案: 例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继。学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构。 这些学生记录在计算机中的存储表示就是存储结构。如果用连续的存储单元(如用数组表示)来存放 这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行链接,则称为链式存储结构。 即相同的逻辑结构,可以对应不同的存储结构。 3?简述逻辑结构的四种基本关系并画出它们的关系图。 答案: (1)集合结构 数据元素之间除了“属于同一集合”的关系外,别无其他关系。例如,确定一名学生是否为班级成员,只需将班级看做一个集合结构。 (2)线性结构 数据元素之间存在一对一的关系。例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构。 (3)树结构

数据结构习题及参考答案

数据结构习题及参考答案 一、判断下列叙述的对错。 (1)线性表的逻辑顺序与物理顺序总是一致的。 (2)线性表的顺序存储表示优于链式存储表示。 (3)线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。 (4)二维数组是其数组元素为线性表的线性表。 (5)每种数据结构都应具备三种基本运算:插入、删除和搜索。 二、设单链表中结点的结构为 typedef struct node { file://链表结点定义 ElemType data; file://数据 struct node * Link; file://结点后继指针 } ListNode; (1)已知指针p所指结点不是尾结点,若在*p之后插入结点*s,则应执行下列哪一个操作? A. s->link = p; p->link = s; B. s->link = p->link; p->link = s; C. s->link = p->link; p = s; D. p->link = s; s->link = p; (2)非空的循环单链表first的尾结点(由p所指向)满足: A. p->link == NULL; B. p == NULL; C. p->link == first; D. p == first; 三、设有一个顺序栈S,元素s1, s2, s3, s4, s5, s6依次进栈,如果6个元素的出栈顺序为s 2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为多少?

四、一棵具有n个结点的理想平衡二叉树(即除离根最远的最底层外其他各层都是满的,最底层有若干结点)有多少层?若设根结点在第0层,则树的高度h如何用n来表示(注意n可能为0)? 五、从供选择的答案中选择与下面有关图的叙述中各括号相匹配的词句,将其编号填入相应的括号内。 (1)对于一个具有n个结点和e条边的无向图,若采用邻接表表示,则顶点表的大小为(A),所有边链表中边结点的总数为(B)。 (2)采用邻接表存储的图的深度优先遍历算法类似于树的(C)。 (3)采用邻接表存储的图的广度优先遍历算法类似于树的(D)。 (4)判断有向图是否存在回路,除了可以利用拓扑排序方法外,还可以利用(E)。 供选择的答案 A:①n②n+1③n-1④n+e B:①e/2②e③2e④n+e C~D:①中根遍历②先根遍历③后根遍历④按层次遍历 E:①求关键路径的方法②求最短路径的Dijkstra方法 ③深度优先遍历算法④广度优先遍历算法 六、填空题 (1)在用于表示有向图的邻接矩阵中,对第i行的元素进行累加,可得到第i个顶点的(①)度,而对第j列的元素进行累加,可得到第j个顶点的(②)度。 (2)一个连通图的生成树是该图的(③)连通子图。若这个连通图有n个顶点,则它的生成树有(④)条边。 (3)给定序列{100, 86, 48, 73, 35, 39, 42, 57, 66, 21},按堆结构的定义,则它一定(⑤)堆。 (4)在进行直接插入排序时,其数据比较次数与数据的初始排列(⑥)关;而在进行直接选择排序时,其数据比较次数与数据的初始排列(⑦)关。 (5)利用关键码分别为10, 20, 30, 40的四个结点,能构造出(⑧)种不同的二叉搜索树。 七、设带表头结点的双向链表的定义为 typedef int ElemType;

数据结构附部分答案

一、选择题 1、下面关于线性表的叙述错误的是( C )。 A.线性表采用顺序存储必须占用一片连续的存储空间 B.线性表采用链式存储不必占用一片连续的存储空间 C.线性表采用链式存储便于插入和删除操作的实现 D.线性表采用顺序存储便于插入和删除操作的实现 2、栈是一种特殊的线性表,具有( B )性质 A.先进先出 B.先进后出 C.后进后出 D.顺序进出 3、顺序循环队列中(数组大小为n),队头指示front指向队列的第一个元素,队尾指示 rear指向队列最后一个元素的后一个位置,则循环队列中存放了n-1个元素,即循环队列满的条件是(B)。 A.(rear+1)%n=front-1 B.(rear+1)%n=front C. (rear)%n=front D.rear+1=front 4、在一个单链表中,若删除p所指结点的后续结点,则执行(A)。 A. p->next=p->next->next B. p=p->next;p->next->next C.p->next=p->next D.p=p->next->next 5、设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为N2, 则下列等式成立的是( A )。 A. N0=N2+1 B.N0=Nl+N2 C. N0=N1+1 D.N0=2N1+l 6、设有6个结点的无向图,该图至少应有( D )条边才能确保是一个连通图。 A.8 B.6 C.7 D.5 7、设有向无环图G中的有向边集合E={<1,2>,<2,3>,<3,4>,<1,4>},则下列属于该 有向图G的一种拓扑排序序列的是(A)。 A.1,2,3,4 B. 2,3,4,1 C.1,4,2,3 D. 1,2,4,3 8、已知一个有向图如下所示,则从顶点a出发进行深度优先遍历,不可能得到的DFS序列为(A)。 A.a d b e f c B. a d c e f b C.a d c e b f D.a d e f b c

数据结构试题及答案(十套)

数据结构试题及答案(十套)数据结构试题及答案(十套) 一、选择题 1. 数据结构是指()。 A. 存储数据的方式 B. 数据的逻辑结构和物理结构 C. 数据的存储结构和存储方式 D. 数据的逻辑结构、存储结构和存储方式 答案:D 2. 在数据结构中,线性表的存储方式包括()。 A. 顺序存储和链式存储 B. 数组存储和链表存储 C. 顺序存储、链表存储和索引存储 D. 顺序存储、链表存储和树形存储 答案:A 3. 栈是一种()的数据结构。 A. 先进先出

B. 先进后出 C. 后进先出 D. 后进后出 答案:C 4. 队列是一种()的数据结构。 A. 先进先出 B. 先进后出 C. 后进先出 D. 后进后出 答案:A 5. 二叉树中,度为0的节点称为()。 A. 叶子节点 B. 根节点 C. 中间节点 D. 子节点 答案:A 6. 以下哪个排序算法是稳定的?

A. 快速排序 B. 选择排序 C. 插入排序 D. 希尔排序 答案:C 7. 图中表示顶点之间关系的边的数量称为()。 A. 顶点度数 B. 边数 C. 路径数 D. 网络 答案:B 8. 哈希表通过()来实现高效的查找操作。 A. 散列函数 B. 排序算法 C. 遍历操作 D. 顺序存储 答案:A

9. 平衡二叉树是一种具有左右子树高度差不超过()的二叉树。 A. 0 B. 1 C. 2 D. 3 答案:B 10. 在链表中,删除节点的操作时间复杂度是()。 A. O(1) B. O(logn) C. O(n) D. O(nlogn) 答案:A 二、填空题 1. 在顺序存储结构中,元素之间的逻辑关系由()表示。 答案:下标 2. 二叉查找树的中序遍历结果是一个()序列。 答案:递增 3. 哈希表通过散列函数将关键字映射到()上。

数据结构参考答案

《数据结构》模拟卷A 一、选择题 1.在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为( A )。 A. O(n) B. O(n/2) C. O(1) D. O(n2) 2.带头结点的单链表first为空的判定条件是:( B )。 A. first == NULL; B. first->link == NULL; C. first->link == first; D. first != NULL; 3. 从逻辑上可以把数据结构分为( C )两大类。 A.动态结构、静态结构B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 4.在系统实现递归调用时需利用递归工作记录保存实际参数的值。在传值参数情形,需为 对应形式参数分配空间,以存放实际参数的副本;在引用参数情形,需保存实际参数的( D ),在被调用程序中可直接操纵实际参数。 A. 空间 B. 副本 C. 返回地址 D. 地址 5. 以下数据结构中,哪一个是线性结构( D )。 A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 6. 以下属于逻辑结构的是( C )。 A.顺序表 B. 哈希表 C.有序表 D. 单链表 7.对于长度为9的有序顺序表,若采用折半搜索,在等概率情况下搜索成功的平均搜索长 度为( C )的值除以9。 A. 20 B. 18 C. 25 D. 22 8.在有向图中每个顶点的度等于该顶点的( C )。 A. 入度 B. 出度 C. 入度与出度之和 D. 入度与出度之差 9.在基于排序码比较的排序算法中,( C )算法的最坏情况下的时间复杂度不高于 O(nlog2n)。 A. 起泡排序 B. 希尔排序 C. 归并排序 D. 快速排序 10.当α的值较小时,散列存储通常比其他存储方式具有( B )的查找速度。

数据结构习题及参考答案

习题1 一、单项选择题 1. 数据结构是指()。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 2. 数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 3. 树形结构是数据元素之间存在一种()。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 4. 设语句x++的时间是单位时间,则以下语句的时间复杂度为()。 for(i=1; i<=n; i++) for(j=i; j<=n; j++) x++; (1) (2n) (n) (3n) 5. 算法分析的目的是(1),算法分析的两个主要方面是(2)。 (1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2) A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性

6. 计算机算法指的是(1),它具备输入,输出和(2)等五个特性。 (1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7. 数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。 A.低 B.高 C.相同 D.不好说 8. 数据结构作为一门独立的课程出现是在()年。 9. 数据结构只是研究数据的逻辑结构和物理结构,这种观点()。 A.正确 B.错误 C.前半句对,后半句错 D.前半句错,后半句对 10. 计算机内部数据处理的基本单位是()。 A.数据 B.数据元素 C.数据项 D.数据库 二、填空题 1. 数据结构按逻辑结构可分为两大类,分别是______________和_________________。 2. 数据的逻辑结构有四种基本形态,分别是________________、__________________、__________________和__________________。 3. 线性结构反映结点间的逻辑关系是__________________的,非线性结构反映结点间的逻辑关系是__________________的。 4. 一个算法的效率可分为__________________效率和__________________效率。 5. 在树型结构中,树根结点没有__________________结点,其余每个结点的有且只有

(完整版)数据结构练习题及参考答案

数据结构练习题 第一部分绪论 一、单选题 1. 一个数组元素a[i]与________的表示等价。 A、 *(a+i) B、 a+i C、 *a+i D、 &a+i 2. 对于两个函数,若函数名相同,但只是____________不同则不是重载函数。 A、参数类型 B、参数个数 C、函数类型 3. 若需要利用形参直接访问实参,则应把形参变量说明为________参数 A、指针 B、引用 C、值 4. 下面程序段的时间复杂度为____________。 for(int i=0; i

《数据结构》教材课后习题+答案

《数据结构》教材课后习题+答案数据结构 第一章介绍 数据结构是计算机科学中重要的概念,它涉及到组织和存储数据的方法和技术。数据结构的选择对于算法的效率有着重要的影响。本教材为读者提供了丰富的课后习题,以帮助读者巩固所学知识并提高解决问题的能力。下面是一些选定的习题及其答案,供读者参考。 第二章线性表 习题一: 给定一个顺序表L,编写一个算法,实现将其中元素逆置的功能。 答案一: 算法思路: 1. 初始化两个指针i和j,分别指向线性表L的首尾两个元素 2. 对于L中的每一个元素,通过交换i和j所指向的元素,将元素逆置 3. 当i>=j时,停止逆置 算法实现: ```python

def reverse_list(L): i, j = 0, len(L)-1 while i < j: L[i], L[j] = L[j], L[i] i += 1 j -= 1 ``` 习题二: 给定两个线性表A和B,编写一个算法,将线性表B中的元素按顺序插入到线性表A中。 答案二: 算法思路: 1. 遍历线性表B中的每一个元素 2. 将B中的元素依次插入到A的末尾 算法实现: ```python def merge_lists(A, B): for element in B: A.append(element)

``` 第三章栈和队列 习题一: 编写一个算法,判断一个表达式中的括号是否匹配。表达式中的括号包括小括号"()"、中括号"[]"和大括号"{}"。 答案一: 算法思路: 1. 遍历表达式中的每一个字符 2. 当遇到左括号时,将其推入栈中 3. 当遇到右括号时,判断栈顶元素是否与其匹配 4. 当遇到其他字符时,继续遍历下一个字符 5. 最后判断栈是否为空,若为空则表示括号匹配 算法实现: ```python def is_matching(expression): stack = [] for char in expression: if char in "([{":

数据结构习题集及答案

第一章 一、填空题 1 数据元素是数据的基本单位,..数据项.......是具有独立含义的最小标识单位。 3 数据之间的关系(逻辑结构)有四种集合、线性结构、树形结构、网状结构或图状结构,可分为....................... ....、...................两大类。 4 数据的存储结构包括..顺序存储结构.....................、..链式存储结构.......................... 二、问答题 1.什么是数据结构?什么是数据类型? 答:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作等的学科。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 2.叙述算法的定义与特性。 答:算法是对待定问题求解步骤的一种描述,他是指令的有限序列,其中每一条指令表示一个或多个操作。 一个算法具有以下5个重要特性: 1)、有穷性 2)、确定性3)、可行性 4)、输入 5)、输出 3. 叙述算法的时间复杂度。 答:算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时量度,记作T(n)=O(f(n)) 他表示随着问题规模n的增大,算法执行时间增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。 三、判断题(在各题后填写“√”或“×”) 1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。(×) 2.下列几种数量级从小到大的排列顺序为: O(1) 、O(logn)、O(n) 、O(nlogn) 、O(n2) 、O(n3 ) 、O(2n)。(√) 四、1.计算机执行下面的语句时,语句s的执行频度(重复执行的次数)为 _______ 。 FOR(i=l;i=i;j--) s; 2.有下列运行时间函数: (1)T1 (n)=1000; (2)T2(n)=n2+1000n; (3)T3(n)=3n3+100n2+n+1; 分别写出相应的大O表示的运算时间。(1)_______ (2)_______ (3)_______ 3. 设n为正整数,利用大O记号,将该程序段的执行时间表示为n的函数,则下列程序段的时间复杂度可表示为(1)( O (n.) ) (2)( O(n2 ) ) 1)float sum1(int n){ /* 计算1!+2!+…+n! */ p=1; sum1=0; for (i=1; i<=n; ++i){ p=p*i; sum1=sum1+p } }/* sum1 */ (2) float sum2(int n){ /* 计算1!+2!+…+n! */ sum2=0; for (i=1; i<=n; ++i){ p=1; for (j=1; j<=i; ++j) p=p*j; sum2=sum2+p;} }/* sum2 */ 第二章 一、判断 1. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。(×)

数据结构习题和答案及解析

第 1 章绪论 课后习题讲解 1. 填空 ⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 【解答】数据元素 ⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的是数据元素以及数据元素之间的关系。 ⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。 【解答】集合,线性结构,树结构,图结构 ⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系 ⑸算法具有五个特性,分别是()、()、()、()、()。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺在一般情况下,一个算法的时间复杂度是()的函数。 【解答】问题规模 ⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。 2. 选择题 ⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

数据结构试题及答案(十套)

一、单选题(每题 2 分,共20分) 1.对一个算法的评价,不包括如下(B )方面的内容。 A.健壮性和可读性B.并行性C.正确性D.时空复杂度 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点, 则执行( )。 A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p; C. p->next=HL; p=HL; D. HL=p; p->next=HL; 3.对线性表,在下列哪种情况下应当采用链表表示?( ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是 ( C ) A. 2 3 1 B. 3 2 1 C. 3 1 2 D. 1 2 3 5.AOV网是一种()。 A.有向图B.无向图C.无向无环图D.有向无环图 6.采用开放定址法处理散列表的冲突时,其平均查找长度()。 A.低于链接法处理冲突 B. 高于链接法处理冲突 C.与链接法处理冲突相同D.高于二分查找 7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。 A.值B.函数C.指针D.引用 8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有 相同的()。 A.行号B.列号C.元素值D.非零元素个数 9.快速排序在最坏情况下的时间复杂度为()。 A.O(log2n) B.O(nlog2n)C.0(n) D.0(n2) 10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A. O(n) B. O(1) C. O(log2n) D. O(n2) 二、运算题(每题 6 分,共24分) 1.数据结构是指数据及其相互之间的______________。当结点之间存在M对N (M:N)的联系时,称这种结构为_____________________。 2.队列的插入操作是在队列的___尾______进行,删除操作是在队列的____首______进行。 3.当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件是___top==0___(要超出才为满)_______________。 4.对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为_________,在表尾插入元素的时间复杂度为____________。

《数据结构》课后参考答案

《数据结构》课后参考答案 第一题: 1. 什么是数据结构? 数据结构是一种组织和存储数据的方式,它涉及到数据的逻辑关系、数据元素之间的操作和存储方式等。数据结构可以帮助我们更有效地 组织和管理数据,提高程序的运行效率。 第二题: 2. 请简述线性表和链表的区别。 线性表是一种线性结构,其中的数据元素按照线性的顺序排列。线 性表可以使用数组实现,也可以使用链表实现。链表是一种动态数据 结构,它通过节点之间的指针连接来存储数据元素。 主要区别: - 存储方式:线性表使用静态的连续内存空间存储,而链表使用动 态的节点存储,并通过指针连接节点。 - 插入和删除操作:线性表需要移动数组中的元素,而链表只需要 修改指针指向即可。 - 访问效率:线性表可以通过下标直接访问元素,访问效率高;链 表需要从头节点开始逐个遍历,访问效率较低。 第三题:

3. 请描述栈和队列的特点及其应用场景。 栈和队列都是常用的线性数据结构,它们在不同的场景中有着不同的特点和应用。 栈的特点: - 先进后出(LIFO)的数据结构。 - 只能在栈顶进行插入和删除操作。 - 用途广泛,如函数调用、表达式求值、计算机内存的管理等。 队列的特点: - 先进先出(FIFO)的数据结构。 - 可以在队尾插入元素,在队头删除元素。 - 用途广泛,如任务调度、消息传递、广度优先搜索等。 第四题: 4. 请简述树和图的区别以及它们的应用场景。 树和图都是常用的非线性数据结构,它们之间有着一些区别和各自的应用场景。 树的特点: - 由节点和边组成的层次结构。 - 每个节点最多有一个父节点和多个子节点。

- 常用的树结构有二叉树、平衡二叉树、B树等。 - 应用场景包括文件系统、数据库索引等。 图的特点: - 由节点和边组成的非线性结构。 - 节点之间的关系可以是任意的。 - 常用的图结构有有向图、无向图、加权图等。 - 应用场景包括社交网络、路由算法、拓扑排序等。 综上所述,数据结构是计算机科学的重要基础,它为我们解决实际问题提供了有力的工具和方法。不同的数据结构适用于不同的场景,我们需要根据问题的特点选择合适的数据结构,并合理地使用它们来提高程序的效率和性能。

1数据结构习题及参考答案

1数据结构习题及参考答案 数据结构习题 习题2 2.1选择题 (1)线性表是具有n个__________的有限序列(n!=0)。A.表元素B.字符C.数据元素D.数据项 (2)顺序表的存储结构是一种__________的存储结构。A.随机存取B.顺序存取C.索引存取D.HASH存取 (3)在一个长度为n的顺序表中,向第i个元素(1<=i<=n+1)之前插入一个新元素时,需要向后移动____________个元素。 A.n-i B.n-i+1 C.n-i-1 D.i (4)链表是一种采用____________存储结构存储的线性表。A.顺序B 链式C.星式D.网状 (5)下面关于线性表的叙述错误的是_____________。A.线性表采用顺序存储方式,必须占用一片连续的存储空间B.线性表采用链式存储方式,不必占用一片连续的存储空间C.线性表采用链式存储方式,便于插入和删除操作的实现D.线性表采用顺序存储方式,便于插入和删除操作的实现 (6)设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用____________存储方式最节省运算时间。 A.单项链表 B.单向循环链表 C.双向链表 D.双向循环链表

(7)设指针q指向单链表中的结点A,指针p指向单链表中的结点A 的后继结点B,指针指向被插入的结点某,则在结点A和结点B之间插入结点某的操作序列为____________。A.->ne某t=p->ne某t;p->ne某t=-;B.q->ne某t=;->ne某t=p;C.p->ne某t=->ne某t;->ne某t=p;D.p->ne 某t=;->ne某t=q; (8)设指针变量p指向单链表结点A,则删除结点A的后继结点B的操作为___________。A.p->ne某t=p->ne某t->ne某tB.P=P->ne某 tC.p=p->ne某t->ne某tD.P->ne某t=p (9)在一个以h为头的单循环链表中,p指针指向链尾的条件是 __________.A.P->ne某t=hB.p->ne某t=NULLC.p->ne某t->ne某 t=hD.p->data=-1 (10)对于只在首尾两端进行插入操作的线性表,宜采用的存储结构为___________。A.顺序表B.用头指针表示的单循环链表C.单链表D.用尾指针表示的单循环链表2.2填空题 (1)线性表是n个元素的_____________________________。(2)线性表的存储结构有______________________________。 (3)设线性表中有n个数据元素,则在顺序存储结构上实现顺序查找的平均时间复杂度为___________________,在链式存储结构上实现顺序查找的平均时间复杂度为___________________。 (4)设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移动表中___________个数据元素;删除第i个位置上的数据元素需要移动表中___________个元素。(5)若频繁地对线性表进行插入与删除操作,该线性表应采用_________________存储结构。(6)链式存储结构中的结点包含________________域和_________________域。

数据结构课后参考答案

第 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为队尾元素的位置,计算队列中元素个数的公式为()。 【解答】(rear-front+n)% n 【分析】也可以是(rear-front)% n,但rear-front的结果可能是负整数,而对一个负整数求模,其结果在不同的编译器环境下可能会有所不同。 ⑻用循环链表表示的队列长度为n,若只设头指针,则出队和入队的时间复杂度分别是()和()。【解答】O(1),O(n)

数据结构课后习题及答案

数据结构课后习题及答案 填空题(10 * 1’ = 10’) 一、概念题 2.2.当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。 2.3.当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。 2.6.带头结点的单链表L中只有一个元素结点的条件是L->Next->Next==Null。 3.6.循环队列的引入,目的是为了克服假溢出。 4.2.长度为0的字符串称为空串。 4.5.组成串的数据元素只能是字符。 4.8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。 7.2.为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。 5.7.广义表的深度是广义表中括号的重数 7.8.有向图G可拓扑排序的判别条件是有无回路。 7.9.若要求一个稠密图的最小生成树,最好用Prim算法求解。 8.8.直接定址法法构造的哈希函数肯定不会发生冲突。 9.2.排序算法所花费的时间,通常用在数据的比较和交换两大操作。 1.1.通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。 1.2.对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。 1.3.存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。 1.4.抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的

数学特性不变,都不影响其外部使用。 1.5.一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。 2.8.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句: s->prior= p->prior; s->next= p; p->prior- next= s; p->prior= s;。 2.9.在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作 (如插入和删除)在各种情况下统一。 3.1.队列是限制在表的一端进行插入和在另一端进行删除的线性表,其运算遵循先进先出原则。 3.2.栈是限定尽在表位进行插入或删除操作的线性表。 3.5.在链式队列中,判定只有一个结点的条件是(Q->rear==Q->front)&&(Q->rear!=NULL)。 3.7.已知链队列的头尾指针分别是f和r,则将x入队的操作序列是node *p=(node *)malloc(node); p->next=x; p->next=NULL; if(r) {r->next=p; r=p;} else {r=p; f=p;}。 3.8.循环队列的满与空的条件是(rear+1)%MAXSIZE==fornt和(front=-1&&rear+1==MAXSIZE)。 4.3.串是一种特殊的线性表,其特殊性表现在数据元素都是由字符组成。 4.7.字符串存储密度是串值所占存储位和实际分配位的比值,在字符串的链式存储结构中其结点大小是可变的。 5.3.所谓稀疏矩阵指的是矩阵中非零元素远远小于元素总数,则称该矩阵为矩阵中非零元素远远小于元素总数, 则称该矩阵为稀疏矩阵。 5.4.一维数组的逻辑结构是线性结构,存储结构是顺序存储结构;对二维或多维数组,分别按行优先和列优先两种 不同的存储方式。

数据结构网参考答案

数据结构试题参考答案 第一章绪论 一、选择题: 二、填空题: 1、(l)结点的集合(2)结点有序对的集合 2、(l)开始结点(2)终端结点 3、(l)线性结构(2)非线性结构 4、前驱 5、顺序方法或索引方法 6、顺序 7、(l)逻辑结构(2)存储 8、时间复杂度 9、问题规模 10、数组 11、(1)数据元素(2)数据元素间关系 12、(1)集合(2)线性结构(3)树形结构(4)图状结构或网状结构。 13、(1)有穷性(2)确定性(3)可行性。 14、O(n) 15、(1)一对一(2)一对多(3)多对多 三、判断题(正确的在括号中记√,错误的记×) 四、应用题 1、评价好的算法有四个方面。一是算法的正确性;二是算法的易读性;三是算法的健壮性;四是算法的时空效率(运行)。 2、将学号、姓名、平均成绩看成一个记录(元素,含三个数据项),将100个这样的记录存于数组中。因一般无增删操作,故宜采用顺序存储。 typedef struct {int num;//学号 char name[8];//姓名

float score;/平均成绩 }node; node student[100]; 3、应从两方面进行讨论:如通讯录较少变动(如城市私人电话号码),主要用于查询,以顺序存储较方便,既能顺序查找也可随机查找;若通讯录经常有增删操作,用链式存储结构较为合适,将每个人的情况作为一个元素(即一个结点存放一个人),设姓名作关键字,链表安排成有序表,这样可提高查询速度。 4、(1)O(1) (2)O(n2) (3)O(n3) 五、综合题: 1、struct node {int year,month,day; }; typedef struct {int num;//帐号 char name[8];//姓名 struct node date;//开户年月日 int tag;//储蓄类型,如:0- 零存,1- 一年定期…… float put;//存入累加数; float interest;//利息 float total;//帐面总数 }count; 2、第一层FOR循环判断n+1次,往下执行n次,第二层FOR执行次数为(n+(n-1)+(n-2)+…+1),第三层循环体受第一层循环和第二层循环的控制,其执行次数如下表: i= 1 2 3 … n j=n n n n … n j=n-1 n-1 n-1 n-1 … … … … … j=3 3 3 j=2 2 2 j=1 1 执行次数为(1+2+…+n)+(2+3+…+n)+…+n=n*n(n+1)/2-n(n2-1)/6。在n=5时,f(5)=55,执行过程中,输出结果为:sum=15,sum=29,sum=41,sum=50,sum=55。 第二章线性表 一、选择题: 二、填空题: 1、用顺序存储方法存储的

(完整版)数据结构练习题及参考答案

数据结构练习题 第一部分 绪 论 一、单选题 1. 一个数组元素 a[i] 与 __________ 的表示等价。 A 、 *(a+i) B 、 a+i C 、 *a+i D 、 &a+i 2. 对于两个函数,若函数名相同,但只是 _______________ 不同则不是重载函数。 A 、 参数类型 B 、 参数个数 C 、 函数类型 3. 若需要利用形参直接访问实参,则应把形参变量说明为 _____________ 参数 A 、 指针 B 、 引用 C 、 值 4. 下面程序段的时间复杂度为 ______________ 。 for(int i=0; i

相关主题
相关文档
最新文档