当前位置:文档之家› 【数据结构习题集附答案】

【数据结构习题集附答案】

【数据结构习题集附答案】

数据结构习题集附答案第一章绪论一、选择题1.组成数据的基本单位是()A.数据项B.数据类型C.数据元素D.数据变量2.数据结构是研究数据的()以及它们之间的相互关系。

A.理想结构,物理结构B.理想结构,抽象结构C.物理结构,逻辑结构D.抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。

①A.数据元素B.计算方法C.逻辑存储D.数据映像②A.结构B.关系C.运算D.算法5.算法分析的两个主要方面是()。

A.数据复杂性和程序复杂性B.正确性和简明性C.可读性和简明性D.空间复杂性和时间复杂性 6.算法分析的目的是()。

A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性7.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。

①A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法②A.可执行性,可移植性和可扩充性B.可行性,确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。()3.数据元素是数据的最小单位。()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。()三、填空题1.数据逻辑结构包括________、________、________和________四种类型,其中树形结构和图形结构合称为________。

2.在线性结构中,第一个结点________前驱结点,其余每个结点有且只有________个前驱结点;

最后一个结点________后续结点,其余每个结点有且只有________个后续结点。

3.在树形结构中,树根结点没有________结点,其余每个结点有且只有________个前驱结点;

叶子结点没有________结点,其余每个结点的后续结点可以________。

4.在图形结构中,每个结点的前驱结点数和后续结点数可以________。

5.线性结构中元素之间存在________关系,树形结构中元素之间存在________关系,图形结构中元素之间存在________关系。

6.算法的五个重要特性是________、________、________、________、________。

7.数据结构的三要素是指________、________和________。

8.链式存储结构与顺序存储结构相比较,主要优点是________________________________。

9.设有一批数据元素,为了最快的存储某元素,数据结构宜用________结构,为了方便插入一个元素,数据结构宜用________结构。

四、算法分析题 1.求下列算法段的语句频度及时间复杂度for(i=1; i i++) for(j =1; j j++) x=x+1; 分析:该算法为一个二重循环,执行次数为内、外循环次数相乘,但内循环次数不固定,与外循环有关,因些,时间频度T(n)=1+2+3+…+n=n*(n+1)/2 有1/4≤T(n)/n2≤1,故它的时间复杂度为O(n2), 即T(n)与n2 数量级相同。

2.分析下列算法段的时间频度及时间复杂度for (i=1;ii++)for (j=1;jj++) for ( k=1;kk++) x=i+j-k; 分析算法规律可知时间频度T(n)=1+(1+2)+(1+2+3)+...+(1+2+3+…+n) 由于有1/6 ≤ T(n)/ n3 ≤1,故时间复杂度为O(n3) 第二章线性表一、选择题1.一个线性

表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。

A.110 B.108 C.100 D.120 2.向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。

A.64 B.63 C.63.5 D.7 3.线性表采用链式存储结构时,其地址()。

A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续与否均可以4.在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()。

A.s-next=p;p-next=s; B.s-next=p-next;p-next=s; C.s-next=p-next;p=s; D.p-next=s;s-next=p; 5.在一个单链表中,若删除p所指结点的后续结点,则执行()。

A.p-next=p-next-next; B.p=p-next; p-next=p-next-next; C.p-next=p-next; D.p=p-next-next; 6.下列有关线性表的叙述中,正确的是()。

A.线性表中的元素之间隔是线性关系B.线性表中至少有一个元素C.线性表中任何一个元素有且仅有一个直接前趋D.线性表中任何一个元素有且仅有一个直接后继7.线性表是具有n个()的有限序列(n≠0)。

A.表元素B.字符C.数据元素D.数据项二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。()2.如果没有提供指针类型的语言,就无法构造链式结构。()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。()4.语句p=p-next完成了指针负值并使p指针得到了p指针所指后继结点的数据域值。()5.要想删除p指针的后继结点,我们应该执行q=p-next ;

p-next=q-next;

free(q)。()三、填空题1.已知P为单链表中的非首尾结点,在P结点后插入S结点的语句为:________。

2.顺序表中逻辑上相邻的元素物理位置( )相邻,单链表中逻辑上相邻的元素物理位置________相邻。

3.线性表L=(a1,a2,...,an)采用顺序存储,假定在不同的n +1个位置上插入的概率相同,则插入一个新元素平均需要移动的元素个数是________。

4.在非空双向循环链表中,在结点q的前面插入结点p的过程如下:

p-prior=q-prior; q-prior-next=p; p-next=q; ________; 5.已知L是无表头结点的单链表,是从下列提供的答案中选择合适的语句序列,实现:

表尾插入s结点的语句序列是________。

A.p-next=s; B.p=L; C.L=s; D.p-next=s-next; E.s-next=p-next; F.s-next=L; G.s-next=null; H.while(p-next!=0) p=p-next; I.while(p-next!=null) p=p-next; 四、算法设计题1.试编写一个求已知单链表的数据域的平均值的函数(数据域数据类型为整型)。

2.已知带有头结点的循环链表中头指针为head,试写出删除并释放数据域值为x的所有结点的c函数。

3.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。现出库(销售)m台价格为h的电视机,试编写算法修改原链表。

4.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。现新到m 台价格为h的电视机,试编写算法修改原链表。

5.线性表中的元素值按递增有序排列,针对顺序表和循环链表两种不同的存储方式,分别编写C函数删除线性表中值介于a与b(a≤b)之间的元素。

6.设A=(a0,a1,a2,...,an-1),B=(b0,b1,b2,...,bm-1)是两个给定的线性表,它们的结点个数分别是n和m,且结点值均是整数。

若n=m,且ai= bi (0≤in ),则A=B;

若nm ,且ai=bi (0≤in ),则AB;

若存在一个j,jm ,jn ,且ai=bi (0≤ij ),若ajbj,则AB,否则AB。

试编写一个比较A和B的C函数,该函数返回-1或0或1,分别表示AB或A=B或AB。

7.试编写算法,删除双向循环链表中第k个结点。

8.线性表由前后两部分性质不同的元素组成(a0,a1,...,an-1,b0,b1,...,bm-1),m和n为两部分元素的个数,若线性表分别采用数组和链表两种方式存储,编写算法将两部分元素换位成(b0,b1,...,bm-1,a0,a1,...,an-1),分析两种存储方式下算法的时间和空间复杂度。

9.用循环链表作线性表(a0,a1,...,an-1)和(b0,b1,...,bm-1)的存储结构,头指针分别为ah和bh,设计C函数,把两个线性表合并成形如(a0,b0,a1,b1,…)的线性表,要求不开辟新的动态空间,利用原来循环链表的结点完成合并操作,结构仍为循环链表,头指针为head,并分析算法的时间复杂度。

10.试写出将一个线性表分解为两个带有头结点的循环链表,并将两个循环链表的长度放在各自的头结点的数据域中的C函数。其中,线性表中序号为偶数的元素分解到第一个循环链表中,序号为奇数的元素分解到第二个循环链表中。

11.试写出把线性链表改为循环链表的C函数。

12.己知非空线性链表中x结点的直接前驱结点为y,试写出删除x 结点的C函数。

第三章栈和队列一、选择题1.一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是()。

A.edcba B.decba C.dceab D.abcde 2.栈结构通常采用的两种存储结构是()。

A.线性存储结构和链表存储结构B.散列方式和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构 3.判定一个栈ST(最多元素为m0)为空的条件是()。

A.ST-〉top!=0 B.ST-〉top==0 C.ST-〉top!=m0 D.ST-〉top=m0 4.判定一个栈ST(最多元素为m0)为栈满的条件是()。

A.ST-top!=0 B.ST-top==0 C.ST-top!=m0-1 D.ST-top==m0-1 5.一个队列的入列序列是1,2,3,4,则队列的输出序列是()。

A.4,3,2,1 B.1,2,3,4 C.1,4,3,2 D.3,2,4,1 6.循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear则当前队列中的元素个数是()。

A.(rear-front+m)%m B.rear-front+1 C.rear-front-1 D.rear-front 7.栈和队列的共同点是()A.都是先进后出B.都是先进先出C.只允许在端点处插入和删除元素D.没有共同点8.表达式a*(b+c)-d的后缀表达式是()。

A.abcd*+- B.abc+*d- C.abc*+d- D.-+*abcd 9.4个元素a1,a2,a3和a4依次通过一个栈,在a4进栈前,栈的状态,则不可能的出栈序是()。

A.a4,a3,a2,a1 B.a3,a2,a4,a1 C.a3,a1,a4,a2 D.a3,a4,a2,a1 10.以数组Q[0..m-1]存放循环队列中的元素,变量rear 和qulen分别指示循环队列中队尾元素的实际位置和当前队列中元素的个数,队列第一个元素的实际位置是()。

A.rear-qulen B.rear-qulen+m C.m-qulen D.1+(rear +m-qulen)%m 二、填空题1.栈的特点是________,队列的特点是________。

2.线性表、栈和队列都是________结构,可以在线性表的________位置插入和删除元素,对于栈只能在________插入和删除元素,对于队列只能在________插入元素和________删除元素。

3.一个栈的输入序列是*****,则栈有输出序列*****是________。(正确/错误)

4.设栈S和队列Q的初始状态皆为空,元素a1,a2,a3,a4,a5和a6依次通过一个栈,一个元素出栈后即进入队列Q,若6个元素出队列的顺序是a3,a5,a4,a6,a2,a1则栈S至少应该容纳________个元素。

三、算法设计题1.假设有两个栈s1和s2共享一个数组stack[M],其中一个栈底设在stack处,另一个栈底设在stack[M-1]处。试编写对任一栈作进栈和出栈运算的C函数push(x,i)和pop(i),i=l,2。其中i=1表示左边的栈,,i=2表示右边的栈。要求在整个数组元素都被占用时才产生溢出。

2.利用两个栈s1,s2模拟一个队列时,如何用栈的运算来实现该队列的运算?写出模拟队列的插入和删除的C函数。

一个栈s1用于插入元素,另一个栈s2用于删除元素。

第四章串一、选择题1.下列关于串的叙述中,正确的是()A.一个串的字符个数即该串的长度B.一个串的长度至少是1 C.空串是由一个空格字符组成的串D.两个串S1和S2若长度相同,则这两个串相等 2.字符串“abaaabab“的nextval值为( ) A.(0,1,01,1,0,4,1,0,1) B.(0,1,0,0,0,0,2,1,0,1) C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1) 3.字符串满足下式,其中head和tail的定义同广义表类似,如head(‘xyz’)=‘x’,tail(‘xyz’)= ‘yz’,则s=( )。concat(head(tail(s)),head(tail(tail(s))))= ‘dc’。

A.abcd B.acbd C.acdb D.adcb 4.串是一种特殊的线性表,其特殊性表现在()A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符5.设串S1=‘*****’,s2=‘PQRST’,函数CONCAT(X,Y)返回X和Y串的连接串,SUBSTR(S,I,J)返回串S从序号I开始的J个字符组成的字串,LENGTH(S)返回串S的长度,则CONCAT(SUBSTR(S1,2,LENGTH (S2)),SUBSTR(S1,LENGTH(S2),2))的结果串是()。

A.BCDEF B.BCDEFG C.***** D.***** 二、算法设计1.分别在顺序存储和一般链接存储两种方式下,用C语言写出实现把串s1复制到串s2的串复制函数strcpy(s1,s2)。

2.在一般链接存储(一个结点存放一个字符)方式下,写出采用简单算法实现串的模式匹配的C语言函数int L_index(t,p)。

第五章数组与广义表一、选择题1.常对数组进行的两种基本

操作是()A.建立与删除B.索引和修改C.查找和修改D.查找与索引2.二维数组M的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到4,列下标j的范围从0到5,M按行存储时元素M的起始地址与M按列存储时元素( )的起始地址相同。

A.M B.M C.M D.M 3.数组A中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是()。

A.80 B.100 C.240 D.270 4.数组A中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A的起始地址为()。

A.SA+141 B.SA+144 C.SA+222 D.SA+225 5.数组A中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,该数组按列存放时,元素A的起始地址为()。

A.SA+141 B.SA+180 C.SA+222 D.SA+225 6.稀疏矩阵一般的压缩存储方法有两种,即()。

A.二维数组和三维数组B.三元组和散列C.三元组和十字链表D.散列和十字链表7.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点()。

A.正确B.错误8.设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分按行序存放在一维数组B[1,n(n-1)/2]中,对下三角部分中任一元素ai,j(i=j),在一组数组B的下标位置k的值是()。

A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j 二、填空题1.己知二维数组A[m][n]采用行序为主方式存储,每个元素占k 个存储单元,并且第一个元素的存储地址是LOC(A),则A的地址是________。

2.二维数组A采用列序为主方式存储,每个元素占一个存储单元,并且A的存储地址是200,则A的地址是________。

3.有一个10阶对称矩阵A,采用压缩存储方式(以行序为主,且

LOC(A)=1),则A的地址是________。

4.设n行n列的下三角矩阵A已压缩到一维数组S[1..n*(n+1)/2]中,若按行序为主存储,则A[i][j]对应的S中的存储位置是________。

5.若A是按列序为主序进行存储的4×6的二维数组,其每个元素占用3个存储单元,并且A的存储地址为1000,元素A的存储地址为________,该数组共占用________个存储单元。

三、算法设计1.如果矩阵A中存在这样的一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个函数计算出1×n的矩阵A的所有马鞍点。

算法思想:依题意,先求出每行的最小值元素,放入min[m]之中,再求出每列的最大值元素,放入max[n]之中,若某元素既在min[i]中,又在max[j]中,则该元素A[i][j]便是马鞍点,找出所有这样的元素,即找到了所有马鞍点。

2.n只猴子要选大王,选举办法如下:所有猴子按1,2,...,n编号围坐一圈,从1号开始按1、2、...、m报数,凡报m号的退出到圈外,如此循环报数,直到圈内剩下只猴子时,这只猴子就是大王。n和m由键盘输入,打印出最后剩下的猴子号。编写一程序实现上述函数。

算法思想:本题用一个含有n个元素的数组a,初始时a[i]中存放猴子的编号i,计数器似的值为0。从a[i]开始循环报数,每报一次,计数器的值加1,凡报到m时便打印出a[i]值(退出圈外的猴子的编号),同时将a[i]的值改为O(以后它不再参加报数),计数器值重新置为0。该函数一直进行到n只猴子全部退出圈外为止,最后退出的猴子就是大王。因此,现本题功能的程序如下: 3.数组和广义表的算法验证程序编写下列程序: (1)求广义表表头和表尾的函数head()和tail()。

(2)计算广义表原子结点个数的函数count_GL()。

(3)计算广义表所有原子结点数据域(设数据域为整型〉之和的函数sum_GL()。

#include “stdio.h“ #include “malloc.h“ typedef struct node { int

tag; union {struct node *sublist; char data; }dd; struct node *link; }NODE; NODE *creat_GL(char **s) { NODE *h; char ch; ch=*(*s); (*s)++; if(ch!='\0') { h=(NODE*)malloc(sizeof(NODE)); if(ch=='(') { h-tag=1; h-dd.sublist=creat_GL(s); } Else { h-tag=0; h-dd.data=ch; } } else h=NULL; ch=*(*s); (*s)++; if(h!=NULL) if(ch==',') h-link =creat_GL(s); else h-link=NULL; return(h); } void prn_GL(NODE *p) { if(p!=NULL) { if(p-tag==1) { printf(“(“); if(p-dd.sublist ==NULL) printf(“ “); else prn_GL(p-dd.sublist ); } else printf(“%c“,p-dd.data); if(p-tag==1) printf(“)“); if(p-link!=NULL) { printf(“,“); prn_GL(p-link); } } } NODE *copy_GL(NODE *p) { NODE *q; if(p==NULL) return(NULL); q=(NODE *)malloc(sizeof(NODE)); q-tag=p- if(p-tag) q-dd.sublist =copy_GL(p-dd.sublist ); else q-dd.data =p-dd.data; q-link=copy_GL(p-link); return(q); } NODE *head(NODE *p) /*求表头函数*/ { return(p-dd.sublist); } NODE *tail(NODE *p) /*求表尾函数*/ { return(p-link); } int sum(NODE *p) /*求原子结点的数据域之和函数*/ { int m,n; if(p==NULL) return(0); else { if(p-tag==0) n=p-dd.data; else n=sum(p-dd.sublist); if(p-link!=NULL) m=sum(p-link); else m=0; return(n+m); } } int depth(NODE *p) /*求表的深度函数*/ { int h,maxdh; NODE *q; if(p-tag==0) return(0); else if(p-tag==1p-dd.sublist==NULL) return 1; else { maxdh=0; while(p!=NULL) { if(p-tag==0) h=0; else {q=p-dd.sublist; h=depth(q); } if(hmaxdh)maxdh=h; p=p-link; } return(maxdh+1); } } main() { NODE *hd,*hc; char s,*p; p=gets(s); hd=creat_GL( prn_GL(head(hd)); prn_GL(tail(hd)); hc=copy_GL(hd); printf(“copy after:“); prn_GL(hc); printf(“sum:%d\n“,sum(hd)); printf(“depth:%d\n“,depth(hd)); } 第六章树一、选择题1.在线索化二叉树中,t所指结点没有左子树的充要条件是()。

A.t-〉left==NULL B.t-〉ltag==1 C.t-〉ltag=1且t-〉left=NULL D.以上都不对2.二叉树按某种顺序线索化后,任一结点均有指向其前趋和后继的线索,这种说法()。

A.正确B.错误C.不同情况下答案不确定3.二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法()。

A.正确B.错误C.不同情况下答案不确定4.由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法()。

A.正确B.错误C.不同情况下答案不确定5.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为()。

A.2h B.2h-1 C.2h+1 D.h+1 6.已知某二叉树的后序遍历序列是dabec。中序遍历序列是debac,它的前序遍历序列是()。

A.acbed B.decab C.deabc D.cedba 7.如果T2是由有序树T 转换而来的二叉树,那么T中结点的前序就是T2中结点的()A.前序B.中序C.后序D.层次序8.某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是()。

A.bdgcefha B.gdbecfha C.bdgaechf D.gdbehfca 9.二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。这种说法()。

A.正确B.错误C.不同情况下答案不确定10.按照二叉树的定义,具有3个结点的二叉树有()种。

A.3 B.4 C.5 D.6 11.在一非空二叉树的中序遍历序列中,根结点的右边()。

A.只有右子树上的所有结点B.只有右子树上的部分结点C.只有左子树上的部分结点D.只有左子树上的所有结点12.树最适合用来表示()。

A.有序数据元素B.无序数据元素C.元素之间具有分支层次关系的数据D.元素之间无联系的数据13.任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序()。

A.不发生改变B.发生改变C.不能确定D.以上都不对14.实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案

是二叉树采用()存储结构。

A.二叉链表B.广义表存储结构C.三叉链表D.顺序存储结构15.对一个满二叉树,m个树叶,n个结点,深度为h,则()。

A.n=h+m B.h+m=2n C.m=h-1 D.n=2h-1 16.如果某二叉树的前序为stuwv,中序为uwtvs,那么该二叉树的后序为()。

A.uwvts B.vwuts C.wuvts D.wutsv 17.具有五层结点的二叉平衡树至少有()个结点。

A.10 B.12 C.15 D.17 二、判断题1.二叉树中任何一个结点的度都是2。()2.由二叉树结点的先根序列和后根序列可以唯一地确定一棵二叉树。()3.一棵哈夫曼树中不存在度为1的结点。()4.平衡二叉排序树上任何一个结点的左、右子树的高度之差的绝对值不大于2()三、填空题 1.指出树和二叉树的三个主要差别________,________,________。

2.从概念上讲,树与二叉树是两种不同的数据结构,将树转化为二叉树的基本目的是________。

3.若结点A有三个兄弟(包括A本身),并且B是A的双亲结点,B的度是________。

4.若一棵具有n个结点的二叉树采用标准链接存储结构,那么该二叉树所有结点共有________个空指针域。

5.已知二叉树的前序序列为*****HIJ,中序序列为*****IJC,写出后序序列________。

6.已知二叉树的后序序列为*****A,中序序列为*****C ,并写出前序序列________。

7.找出满足下列条件的二叉树1)先序和中序遍历,得到的结点访问顺序一样。________。

2)后序和中序遍历,得到的结点访问顺序一样。________。

3)先序和后序遍历,得到的结点访问顺序一样。________。

8.一棵含有n个结点的k叉树,可能达到的最大深度和最小深度各是多少?________。

9.一棵二叉树有67个结点,这些结点的度要么是0,要么是2。这棵二叉树中度为2的结点有________个。

10.含有100个结点的树有________条边。

四、问答题1.一棵深度为h的满m叉树具有如下性质:第h层上的结点都是叶结点,其余各层上每个结点都有m棵非空子树。若按层次从上到下,每层从左到右的顺序从1开始对全部结点编号,试计算: (1)第k层结点数(1≤k≤h)。

(2)整棵树结点数。

(3)编号为i的结点的双亲结点的编号。

(4)编号为i的结点的第j个孩子结点(若有)的编号。

2.证明:一个满k叉树上的叶子结点数n0和非叶子结点数n1之间满足以下关系:

n0=(k-1)n1+1 3.已知一组元素为(50,28,78,65,23,36,13,42,71),请完成以下操作: (1)画出按元素排列顺序逐点插入所生成的二叉排序树BT。

(2)分别计算在BT中查找各元素所要进行的元素间的比较次数及平均比较次数。

(3)画出在BT中删除(23〉后的二叉树。

4.有七个带权结点,其权值分别为3,7,8,2,6,10,14,试以它们为叶结点构造一棵哈夫曼树(请按照每个结点的左子树根结点的权小于等于右子树根结点的权的次序构造〉,并计算出带权路径长度WPL及该树的结点总数。

5.有一电文共使用五种字符a,b,c,d,e,其出现频率依次为4,7,5,2,9。

(1)试画出对应的编码哈夫曼树(要求左子树根结点的权小于等于右子树根结点的权)。

(2)求出每个字符的晗夫曼编码。

(3)求出传送电文的总长度。

(4)并译出编码系列***-********-*****的相应电文。

五、算法设计已知一棵具有n个结点的完全二叉树被顺序存储

在一维数组A[n]中,试编写一个算法输出A[i]结点的双亲和所有孩子。

二叉树其他运算的算法(只作参考)#include “stdio.h“ #include “malloc.h“ typedef struct node { char data; struct node *lchild,*rchild; }NODE; NODE *T; void create(NODE **T) //创建二叉树{ char ch; ch=getchar(); if(ch=='') *T=NULL; else { *T=(NODE *)malloc(sizeof(NODE)); (*T)-data=ch; create(((*T)-lchild)); create(((*T)-rchild)); } } void inorder(NODE *p) //中序编历二叉树{ if(p!=NULL) { inorder(p-lchild); printf(“%c “,p-data); inorder(p-rchild); } } int num=0; void count(NODE *p) //统计出二叉树中单孩子的结点数方法1 { if(p!=NULL) { count(p-lchild); if(p-lchild!=NULLp-rchild==NULL||p-lchild==NULLp-rchild!=NULL) num++; count(p-rchild); } } void count1(NODE *p,int *num1) { if(p!=NULL) { count1(p-lchild,num1); if(p-lchild!=NULLp-rchild==NULL||p-lchild==NULLp-rchild!=NULL) (*num1)++; count1(p-rchild,num1); } } int onechild(NODE *t) //统计出二叉树中单孩子的结点数方法 2 { int num1,num2; if(t==NULL) return(0); else if(t-lchild==NULLt-rchild!=NULL||t-lchild!=NULLt-rchild==NULL) return(onechild(t-lchild)+onechild(t-rchild)+1); else { num1=onechild(t-lchild); num2=onechild(t-rchild); return(num1+num2); } } int sum(NODE *t) //统计出二叉树中所有结点数{if(t==NULL) return(0); else return(sum(t-lchild)+sum(t-rchild)+1); } int leaf(NODE *t) //统计出二叉树中叶子结点数{ if(t==NULL) return(0); else if(t-lchild==NULLt-rchild==NULL) return(leaf(t-lchild)+leaf(t-rchild)+1); else return(leaf(t-lchild)+leaf(t-rchild)); } void preorder1(NODE *root) //非递归二叉树前序编历{ NODE *p,*s,*q; //q为p的双亲结点int top=0; //top为栈顶指针p=root;q=p; while((p!=NULL)||(top0)) { while(p!=NULL) {printf(“%d “,p-data); s[++top]=p; p=p-lchild; } p=s[top--]; p=p-rchild; }} void delk(NODE **root,char k) //删去并释放数据值为k的叶结点{ NODE *p,*s,*q; //q为p的双亲结点int

top=0; //top为栈顶指针if((*root)==NULL)return; if((*root)-lchild==NULL (*root)-rchild==NULL(*root)-data==k) {*root=NULL;return;} p=*root;q=p; while((p!=NULL)||(top0)) { while(p!=NULL) { if(p-lchild==NULLp-rchild==NULL p-data==k) {if(q-lchild==p) q-lchild=NULL; else q-rchild=NULL; free(p); return; } s[++top]=p; q=p; p=p-lchild; } p=s[top--]; q=p;p=p-rchild; }} void lev_traverse(NODE *T) //按层次从上到下,每层从右到左的顺序列出二叉树所有结点的数据信息{NODE *q,*p; int head,tail; q=T;head=0;tail=1; while(headtail) {p=q[head++]; printf(“%c“,p-data); if(p-rchild!=NULL) q[tail++]=p-rchild; if(p-lchild!=NULL) q[tail++]=p-lchild; }} int depth(NODE *t) //求二叉树的深度{ int num1,num2; if(t==NULL) return(0); if(t-lchild ==NULLt-rchild ==NULL) return(1); else { num1=depth(t-lchild ); num2=depth(t-rchild ); if(num1num2) return(num1+1); else return(num2+1); } } int onechild3(NODE *root) //非递归统计出二叉树共有多少个度为1的结点{ NODE *p,*s; int top=0,num=0; //top为栈顶指针p=root; while((p!=NULL)||(top0)) { while(p!=NULL) {if(p-lchild!=NULLp-rchild==NULL ||p-lchild==NULLp-rchild!=NULL) num++; s[++top]=p; p=p-lchild; } p=s[top--]; p=p-rchild; } return num; } int like(NODE *t1,NODE *t2) //判定两颗二叉树是否相似{ int like1,like2; if(t1==t2t2==NULL) return(1); else if(t1==NULL t2!=NULL||t1!=NULLt2==NULL) return(0); else { like1=like(t1-lchild,t2-lchild); like2=like(t1-rchild ,t2-rchild ); return(like1like2); } } char a; //数组顺序存储二叉树void change(NODE *t,int i) //将二叉树的链接存储转换为顺序存储{ if(t!=NULL) {a[i]=t-data; change(t-lchild,2*i); change(t-rchild,2*i+1); } } int complete(NODE *t) //判断二叉树是否为完全二叉树{ int i,flag=0; change(t,1); for(i=1;ii++) {if(!flaga[i]=='\0') flag=1; if(flaga[i]!='\0') break; } if(i==100) return(1); else return(0); } 第七章图一、判断题1.一个无向图的邻

接矩阵中各非零元素之和与图中边的条数相等。()2.一个有向图的邻接矩阵中各非零元素之和与图中边的条数相等。()3.一个对称矩阵一定对应着一个无向图。()4.一个有向图的邻接矩阵一定是一个非对称矩阵。()二、选择题1.在一个图中,所有顶点的度数之和等于所有边数的()倍。

A.1/2 B.1 C.2 D.4 2.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。

A.1/2 B.1 C.2 D.4 3.一个有n个顶点的无向图最多有()条边。

A.n B.n(n-1) C.n(n-1)/2 D.2n 4.具有4个顶点的无向完全图有()条边。

A.6 B.12 C.16 D.20 5.具有6个顶点的无向图至少应有()条边才能确保是一个连通图。

A.5 B.6 C.7 D.8 6.在一个具有n个顶点的无向图中,要连通全部顶点至少需要()条边。

A.n B.n+1 C.n-1 D.n/2 7.对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小()A.n B.(n-1) 2 C.n-1 D.n2 8.对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为(),所有邻接表中的结点总数是()。

①A.n B.n+1 C.n-1 D.n+e ②A.e/2 B.e C.2e D.n+e 9.采用邻接表存储的图的深度优先遍历算法类似于二叉树的()。

A.先序遍历B.中序遍历C.后序遍历D.按层遍历10.采用邻接表存储的图的宽度优先遍历算法类似于二叉树的()。

A.先序遍历B.中序遍历C.后序遍历D.按层遍历11.判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用()。

A.求关键路径的方法B.求最短路径的Dijkstm方法C.宽度优先遍历算法D.深度优先遍历算法 1 4 3 2 5 6 12 12 3 3 10 6 5 7 8 4 11 12.用Prim算法求下列连通的带权图的最小代价生成树,在算法

执行的某刻,已选取的顶点集合U={1,2,5},边的集合TE={(1,2),(2,5)},要选取下一条权值最小的边,应当从()组中选取。

A.{(1,4),(3,4),(3,5),(2,5)} B.{(5,4),(5,3),(5,6)} C.{(1,2),(2,3),(3,5)} D.{(3,4),(3,5),(4,5),(1,4)} 三、填空题1.n个顶点的连通图至少________条边。

2.在一个无环有向图G中,若存在一条从顶点i到顶点j的弧,则在顶点的拓扑序列中,顶点i与顶点j的先后次序是________。

3.在一个无向图的邻接表中,若表结点的个数是m,则图中边的条数是________条。

4. 如果从一个顶点出发又回到该顶点,则此路径叫做________。

5.如果从一无向图的任意顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是________。

6.若采用邻接表的存储结构,则图的广度优先搜索类似于二叉树的________遍历。

7. 一个连通图的生成树是该图的________连通子图。若这个连通图有n个顶点, 则它的生成树有________条边。

四、算法设计:

1.试在无向图的邻接矩阵和邻接链表上实现如下算法:

(1)往图中插入一个顶点(2)往图中插入一条边(3)删去图中某顶点(4)删去图中某条边2.下面的伪代码是一个广度优先搜索算法,试以下图中的v0为源点执行该算法,请回答下述问题:

(1)对图中顶点vn+1,它需入队多少次?它被重复访问多少次? (2)若要避免重复访问同一个顶点的错误,应如何修改此算法? void BFS(ALGraph *G,int k) {//以下省略局部变量的说明,visited各分量初值为假InitQueue(//置空队列EnQueue(Q,k);//k入队while(!QueueEmpty(Q)){ i=DeQueue(//vi出队visited[i]=TRUE;//置访问标记printf(“%c“,G-adjlist[i].vertex;//访问vi for(p=G-adjlist[i].firstedge;p;p=p-next) //依次搜索vi的邻接点vj(不妨设p-adjvex=j) if(!visited[p-adjvex])//若vj没有访问过EnQueue(Q,p-

adjvex);//vj入队}//endofwhile }//BFS 3.试以邻接表和邻接矩阵为存储结构,分别写出基于DFS和BFS遍历的算法来判别顶点vi和vj(ij)之间是否有路径。

4.试分别写出求DFS和BFS生成树(或生成森林)的算法,要求打印出所有的树边。

5.写一算法求连通分量的个数并输出各连通分量的顶点集。

6.设图中各边的权值都相等,试以邻接矩阵和邻接表为存储结构,分别写出算法:

(1)求顶点vi到顶点vj(ij)的最短路径(2)求源点vi到其余各顶点的最短路径要求输出路径上的所有顶点(提示:利用BFS遍历的思想) 7.以邻接表为存储结构,写一个基于DFS遍历策略的算法,求图中通过某顶点vk的简单回路(若存在)。

8.写一算法求有向图的所有根(若存在),分析算法的时间复杂度。

第八章排序一、选择题1.在所有排序方法中,关键字比较的次数与记录得初始排列次序无关的是()A.希尔排序B.起泡排序C.插入排序D.选择排序2.设有1000个无序的元素,希望用最快的速度挑选出其中前10个最大的元素,最好()排序法。

A.起泡排序B.快速排序C.堆排序D.基数排序3.在待排序的元素序列基本有序的前提下,效率最高的排序方法是()。

A.插入排序B.选择排序C.快速排序D.归并排序4.一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始推为()。

A.79,46,56,38,40,80 B.84,79,56,38,40,46 C.84,79,56,46,40,38 D.84,56,79,40,46,38 5.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()。

A.38,40,46,56,79,84 B.40,38,46,79,56,84 C.40,38,46,56,79,84 D.40,38,46,84,56,79 6.一组记录的排序码为(25,48,16,35,79,82,23,40,36,72),其中含有5个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为()。

A.16,25,35,48,23,40,79,82,36,72 B.16,25,35,48,79,82,23,36,40,72 C.16,25,48,35,79,82,23,36,40,72 D.16,25,35,48,79,23,36,40,72,82 7.排序方法中,从未排序序列中依次取出元素与己排序序列(初始时为空)中的元素进行比较,将其放入己排序序列的正确位置上的方法,称为()。

A.希尔排序B.起泡排序C.插入排序D.选择排序8.排序方法中,从未排序序列中挑选元素并将其依次放入己排序序列(初始为空)的一端的方法,称为()。

A.希尔排序B.归并排序C.插入排序D.选择排序9.用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,元素序列的变化情况如下: (1)25,84,21,47,15,27,68,35,20 (2)20,15,21,25,47,27,68,35,84 (3)15,20,21,25,35,27,47,68,84 (4)15,20,21,25,27,35,47,68,845 则所采用的排序方法是()。

A.选择排序B.希尔排序C.归并排序D.快速排序10.下述几种排序方法中,平均查找长度最小的是()。

A.插入排序B.选择排序C.快速排序D.归并排序11.下述几种排序方法中,要求内存量最大的是()。

A.插入排序B.选择排序C.快速排序D.归并排序12.快速排序方法在情况下最不利于发挥其长处。( ) A.要排序的数据量太大B.要排序的数据中含有多个相同值C.要排序的数据已基本有序D.要排序的数据个数为奇数13.设有*****个元素组成的无序序列,希望尽快挑选出其中前10个最大值元素,在不改变已有算法结构的前提下,以下几种内排序算法中( )最合适。

A.选择排序法B.快速排序法C.堆排序法D.冒泡排序法14.下列四种排序方法中,不稳定的方法是()A.直接插入排序B.冒泡排序C.归并排序D.直接选择排序二、判断题1.用直接选择排序方法分别对序列S1=(1,2,3,4,5,6,7)和序列S2=(7,5,3,2,4,1,6)进行排序,两者的比较次数不相同。()2.快速排序是所有排序中速度最快的一种。()3.堆排序是直到最后一趟排

序结束之前所有元素才能在其最终的位置上。()三、填空题1.试五种排序方法与对应的操作联系起来: (A)归并排序________ (B)选择排序________ (C)冒泡排序________ (D)插入排序________ (E)快速排序________ (1)从待排序序列中依次取出元素与己排序序列中的元素作比较将其放入己排序序列中的正确的位置上。

(2)从待排序序列中挑选元素,并将其放入己排序序列的一端。

(3)依次将相邻的有序表合并成一个有序表。

(4)每次把待排序的区间划分为左、右两个子区间,其中左区间中元素的键值均小于等于基准元素的键值,右区间中元素的键值均大于等于基准元素的键值。

(5)当两个元素比较出现反序(即逆序)时就相互交换位置。

2.在对一组记录(4,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置需比较________次。

3.在利用快速排序方法对一组记录(54,38,96,23,15,72,60,45,83)进行快速排序时,递归调用而使用的栈的所能达到的最大深度为________,共需递归调用的次数为________,其中第二次递归调用是对________一组记录进行快速排序。

4.在堆排序,快速排序和归并排序中,若只从存储空间考虑,则应首先选取________方法,其次选取________方法,最后选取________方法:若只从排序结果的稳定性考虑,则应选取________方法:若只从平均情况下排序最快考虑,则应选取________方法:若只从最坏情况下排序最快并且要节省内存考虑,则应选取________方法。

5.在插入排序、希尔排序、选择排序、快速排序、堆排序、归并排序和基数排序中,排序是不稳定的有________。

6.在插入排序、希尔排序、选择排序、快速排序、堆排序、归并排序和基数排序中,平均比较次数最少的排序是________需要内存容量最多的是________。

7.在堆排序和快速排序中,若原始记录接近正序或反序,则选用

数据结构习题集附答案

第一章绪论 一、选择题 1.组成数据的基本单位是() A.数据项B.数据类型C.数据元素D.数据变量 2.数据结构是研究数据的()以及它们之间的相互关系。 A.理想结构,物理结构B.理想结构,抽象结构 C.物理结构,逻辑结构D.抽象结构,逻辑结构 3.在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。 ①A.数据元素B.计算方法C.逻辑存储D.数据映像 ②A.结构B.关系C.运算D.算法 5.算法分析的两个主要方面是()。 A.数据复杂性和程序复杂性B.正确性和简明性 C.可读性和简明性D.空间复杂性和时间复杂性 6.算法分析的目的是()。 A.找出数据结构的合理性B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进D.分析算法的易懂性和文档性 7.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。 ①A.计算方法B.排序方法 C.解决问题的有限运算序列D.调度方法 ②A.可执行性,可移植性和可扩充性B.可行性,确定性和有穷性 C.确定性、有穷性和稳定性D.易读性、稳定性和安全性 二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。() 3.数据元素是数据的最小单位。() 4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。() 5.算法的时间复杂度取决于问题的规模和待处理数据的初态。() 三、填空题 1.数据逻辑结构包括________、________、________和________四种类型,其中树形结构和图形结构合称为________。 2.在线性结构中,第一个结点________前驱结点,其余每个结点有且只有________个前驱结点;最后一个结点________后续结点,其余每个结点有且只有________个后续结点。 3.在树形结构中,树根结点没有________结点,其余每个结点有且只有________个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以________。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以________。 5.线性结构中元素之间存在________关系,树形结构中元素之间存在________关系,图形结构中元素之间存在________关系。 6.算法的五个重要特性是________、________、________、________、________。 7.数据结构的三要素是指________、________和________。 8.链式存储结构与顺序存储结构相比较,主要优点是________________________________。 9.设有一批数据元素,为了最快的存储某元素,数据结构宜用________结构,为了方便插入一个元素,数据结构宜用________结构。 四、算法分析题 1.求下列算法段的语句频度及时间复杂度

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

数据结构习题和答案及解析 数据结构是计算机科学中非常重要的一个领域,它关注数据的存储、组织和管理方式。在学习数据结构的过程中,遇到习题是必不可少的,通过解答这些习题可以更好地理解和掌握数据结构的概念和应用。以 下是一些常见的数据结构习题及其答案和解析,希望可以帮助读者更 好地学习和理解数据结构。 习题一:栈的应用 题目描述:设计一个栈,使其具有获取栈中最小元素的操作。 解答及解析:可以通过两个栈来实现,一个栈用于存储数据,另一 个栈用于存储当前最小元素。在入栈时,如果新的元素比当前最小元 素小,则将新元素同时入栈到数据栈和最小栈;在出栈时,如果当前 出栈元素与最小栈的栈顶元素相同,则同时出栈。这样,最小栈的栈 顶元素始终为当前栈的最小元素。 习题二:队列的应用 题目描述:设计一个队列,使其具有获取队列中最大元素的操作。 解答及解析:可以通过两个队列来实现,一个队列用于存储数据, 另一个队列用于存储当前最大元素。在入队时,如果新的元素比当前 最大元素大,则将新元素同时入队到数据队列和最大队列;在出队时,如果当前出队元素与最大队列的队首元素相同,则同时出队。这样, 最大队列的队首元素始终为当前队列的最大元素。

习题三:链表的操作 题目描述:给定一个链表,删除链表中倒数第n个节点,并返回链表的头节点。 解答及解析:使用双指针法来解决该问题。首先让一个指针从链表的头节点向前移动n+1步,然后再让另一个指针从链表的头节点开始移动。这样两个指针之间的间隔为n,当第一个指针到达链表末尾时,第二个指针指向的节点就是倒数第n个节点的前一个节点。接着,将第二个指针指向的节点的next指针指向下下个节点,完成删除操作。 习题四:树的遍历 题目描述:给定一个二叉树,按照中序遍历的顺序返回其节点值的集合。 解答及解析:采用递归的方式进行中序遍历,先遍历左子树,然后访问根节点,最后遍历右子树。对于任意一个节点,递归遍历其左子树,将节点值添加到集合中。然后访问该节点,并将节点值添加到集合中。最后递归遍历右子树,将节点值添加到集合中。最终得到的集合即为中序遍历的结果。 习题五:图的搜索 题目描述:给定一个有向图,判断是否存在从起点到终点的路径。 解答及解析:可以使用深度优先搜索算法(DFS)来解决该问题。从起点开始进行深度优先搜索,如果找到终点,则存在从起点到终点的路径;如果遍历完所有节点都没有找到终点,则不存在路径。在搜

数据结构练习题及答案

数据结构练习题(一) 一、单选题 1.栈和队列的共同特点是( )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 2.用链接方式存储的队列,在进行插入运算时( )。 A. 仅修改头指针 B. 头、尾指针都要修改 C. 仅修改尾指针 D.头、尾指针可能都要修改 3.以下数据结构中( )是非线性结构。 A. 队列 B. 栈 C. 线性表 D. 二叉树 4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10), 每个元素占一个空间,问A[3][3](10)存放在()位置。脚注(10)表示用10进制表示。 A.688 B.678 C.692 D.696 5.树最适合用来表示( )。 A.有序数据元素 B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 6.二叉树的第k层的结点数最多为( )。 A.2k-1 +1 D. 2k-1 7.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二 分查找,则查找A[3]的比较序列的下标依次为( )。 A. 1,2,3 B. 9,5,2,3 C. 9,5,3 D. 9,4,2,3 8.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K) =K %9作为散列函数,则散列地址为1的元素有()个。 A.1 B.2 C.3 D.4 9.设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。

二、填空题 1.通常从四个方面评价算法的质量:_________、_________、_________和_________。 2.一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。 3.假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数为 __________个,树的深度为___________,树的度为_________。 4.若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指 针。在这种存储结构中,n个结点的二叉树共有________个指针域,其中有________个指针域是存放了地址,有________________个指针是空指针。 5.对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点 分别有_______个和________个。 6.AOV网是一种___________________的图。 7.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有 向完全图中,包含有________条边。 8.假定一个线性表为(12,23,74,55,63,40),若按Key % 4条件进行划分,使得同一余数的元 素成为一个子表,则得到的四个子表分别为____________________________、___________________、_______________________和__________________________。 9.在快速排序、堆排序、归并排序中,_________排序是稳定的。 三、计算题 1.在如下数组A中链接存储了一个线性表,表头指针为A [0].next,试写出该线性表。 A 0 1 2 3 4 5 6 7 data 605078903440 next3572041 2.

数据结构综合习题集(含答案)

数据结构习题集 一、选择题 1.数据结构中所定义的数据元素,是用于表示数据的。(C) A.最小单位 B.最大单位 C.基本单位 D.不可分割的单位 2.从逻辑上可以把数据结构分为(C) A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 3.当待排序序列中记录数较少或基本有序时,最适合的排序方法为(A ) A.直接插入排序法 B.快速排序法 C.堆排序法 D.归并排序法 4.关于串的的叙述,不正确的是( B) A.串是字符的有限序列 B.空串是由空格构成的串 C.替换是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 5.带表头结点链队列的队头和队尾指针分别为front和rear,则判断队空的条件为(A )A.front==rear B.front!=NULL C.rear!=NULL D.front==NULL 6.若构造一棵具有n个结点的二叉排序树,最坏的情况下其深度不会超过(B) A.n/2 B.n C.(n+1)/2 D.n+1 7.将两个各有n个元素的有序表合并成一个有序表,其最少的比较次数为(A) A.n B.2n-1 C.2n D.n2 8.设顺序表有19个元素,第一个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为(B ) A.236 B.239 C.242 D.245 9.一个栈的入栈序列是a,b,c,d,e,则栈的输出序列不可能是(A ) A.dceab B.decba C.edcba D.abcde 10.元素大小为1个单元,容量为n个单元的非空顺序栈中,以地址高端为栈底,以top作为栈顶指针,则出栈处理后,top的值应修改为(D ) A.top=top B.top=n-1 C.top=top-1 D.top=top+1 11.设有一个10阶的对称矩阵A,采用压缩存储方式以行序为主序存储,a00为第一个元素,其存储地址为0,每个元素占有1个存储地址空间,则a45的地址为(B) A.13 B.35 C.17 D.36 12.栈和队列( C ) A.共同之处在于二者都是先进先出的特殊的线性表 B.共同之处在于二者都是先进后出的特殊的线性表 C.共同之处在于二者都只允许在顶端执行删除操作

数据结构习题集(包含全部答案)

数据结构习题集(包含全部答案)

数据结构习题集(自编) 第一章绪论 一、选择题 1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。 A.结构B.关系 C.运算 D.算法 2.在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.逻辑结构和存储结构 3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。 A.正确B.不正确 C.无法确定 D.以上答案都不对4.算法分析的目的是()。 A.找出算法的合理性 B.研究算法的输人与输出关系 C.分析算法的有效性以求改进 D.分析算法的易懂性 5. 算法的时间复杂度取决于() A.问题的规模B待处理数据的初态 C. A和B 6.一个算法应该是()。 A.程序B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 7. 下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法与为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 8.以下与数据的存储结构无关的术语是()。 A.循环队列 B. 链表 C. 哈希表 D. 栈 9.在下面的程序段中,对x的赋值语句的频度为() for(i=0;i

数据结构习题集(包含全部答案)

数据结构习题集(自编) 第一章绪论 一、选择题 1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之 间的()和运算的学科。 A.结构B.关系C.运算D.算法 2.在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构 B .紧凑结构和非紧凑结构C.线性结 构和非线性结构 D .逻辑结构和存储结构 3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。 A.正确B.不正确C.无法确定D.以上答案都不对4.算法分析的目的是()。 A.找出算法的合理性B.研究算法的输人与输出关系 C.分析算法的有效性以求改进D.分析算法的易懂性 5.算法的时间复杂度取决于() A.问题的规模 B 待处理数据的初态 C. A 和 B 6.一个算法应该是()。 A.程序B.问题求解步骤的描述 C .要满足五个基本特性D.A和C. 7.下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法与为该问题编写的程序含义是相同的 C.算法的可行性是指指令不能有二义性 D.以上几个都是错误的 8.以下与数据的存储结构无关的术语是()。 A.循环队列 B.链表 C.哈希表 D.栈 9.在下面的程序段中,对 x 的赋值语句的频度为() for ( i=0;i

数据结构练习题(含答案)

数据结构练习题 习题1 绪论 1.1 单项选择题 1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的①、数据信息在计算机中的②以及一组相关的运算等的课程。 ① A.操作对象B.计算方法C.逻辑结构D.数据映象 ② A.存储结构B.关系C.运算D.算法 2. 数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是①的有限集合,R是D上的②有限集合。 ① A.算法B.数据元素C.数据操作D.数据对象 ② A.操作B.映象C.存储D.关系 3. 在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 4. 算法分析的目的是①,算法分析的两个主要方面是②。 ① A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 ② A. 空间复杂性和时间复杂性 B. 正确性和简明性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 5. 计算机算法指的是①,它必具备输入、输出和②等五个特性。 ① A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 1.2 填空题(将正确的答案填在相应的空中) 1. 数据逻辑结构包括、和三种类型,树形结构和图形结构合称为。 2. 在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。 3. 在树形结构中,树根结点没有结点,其余每个结点有且只有个直接前驱结点,叶子结点没有结点,其余每个结点的直接后续结点可以。 4. 在图形结构中,每个结点的前驱结点数和后续结点数可以。 5. 线性结构中元素之间存在关系,树形结构中元素之间存在关系,图形结构中元素之间存在关系。 6. 算法的五个重要特性是__ __ , __ __ , ___ _ , __ __ , _ ___。 7. 分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是__ __。 for (i=0;i

数据结构习题集及答案

第一章 一、填空题 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、研究数据结构就是研究( D )。 A. 数据的逻辑结构 B. 数据的存储结构 C. 数据的逻辑结构和存储结构 D. 数据的逻辑结构、存储结构及其基本操作 2、算法分析的两个主要方面是( A )。 A. 空间复杂度和时间复杂度 B. 正确性和简单性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 3、具有线性结构的数据结构是( D )。 A. 图 B. 树 C. 二叉树 D. 栈 4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、( B )等5个特性。 A. 可执行性、可移植性和可扩充性 B. 可执行性、有穷性和确定性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和确定性 5、下面程序段的时间复杂度是( C )。 for(i=0;i=(y+1)*(y+1)) y=y+1; A. O(n) B. )(n O C. O(1) D. O(n 2) 12. 算法分析的目的是( C ) A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系 C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性 13. 数据结构中,与所使用的计算机无关的是数据的 C 结构; A) 存储 B) 物理 C) 逻辑 D) 物理和存储

数据结构习题及参考答案

习题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

数据结构_习题集(含答案)

数据结构_习题集(含答案) 《数据结构》课程习题集 一、单选题 1.头结点为L的单循环链表为空的条件是() A、L==NULL B、L->next==NULL C、L->next==L D、L!==NULL 2.与线性表的链式存储结构特点不符的是:() A、便于插入、删除运算 B、查找操作费时 C、需要连续的地址空间 D、空间动态分配 3.采用邻接表存储的图,其深度优先遍历算法类似于二叉树的() A、先序遍历 B、中序遍历 C、后序遍历 D、按层遍历 4.对序列{1,5,7,10,12,15,19},采用折半查找1,需比较()次。 A、1 B、2 C、3 D、4 5.直接选择排序算法的时间复杂度为() A、O(n) B、O(n2) C、 O(n*log(n)) D、 O(1) 6.一个栈的入栈序列为1、2、3、4,则栈的不可能的输出序列是

() A、1 2 3 4 B、4 3 2 1 C、4 1 2 3 D、3 4 2 1 7.判定一个顺序栈S为空的条件为()。 A、S.top=0 B、S.base=0 C、S.top=S.base D、S.top>S.stacksize 8.设有两个串r和t,求r在t中首次出现位置的运算称作() A、求串长 B、连接 C、模式匹配 D、求子串 9.按二叉树的定义,具有3个结点的二叉树共有()种形态。 A、3 B、4 C、5 D、6 10.一个有n个顶点的完全无向图共有()条边。 A、n B、2n C、n*(n-1) D、n*(n-1)/2 11.对序列{5,7,12,19,20,30},采用折半查找19,需比较()次。 A、1 B、2 C、3

数据结构练习题(含答案)

数据结构练习题(含答案) 数据结构练习题习题1 绪论1.1 单项选择题1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的① 、数据信息在计算机中的② 以及一组相关的运算等的课程。 ① A.操作对象B.计算方法C.逻辑结构D.数据映象② A.存储结构B.关系C.运算D.算法2. 数据结构 DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是① 的有限集合,R是D上的② 有限集合。 ① A.算法B.数据元素C.数据操作D.数据对象② A.操作B.映象C.存储D.关系 3. 在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构 4. 算法分析的目的是① ,算法分析的两个主要方面是② 。 ① A. 找出数据结构的合理性B. 研究算法中的输入和输出的关系C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性② A. 空间复杂性和时间复杂性 B. 正确性和简明性C. 可读性和文档性 D. 数据复杂性和程序复杂性 5. 计算机算法指的是① ,它必具备输入、输出和② 等五个特性。 ① A. 计算方法B. 排序方法C. 解决问题的有限运算序列D. 调度

方法② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性C. 确定性、有穷性和稳定性D. 易读性、稳定性和安全性1.2 填空题(将正确的答案填在相应的空中) 1. 数据逻辑结构包括、和三种类型,树形结构和图形结构合称为。 2. 在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点; 最后一个结点后续结点,其余每个结点有且只有个后续结点。 3. 在树形结构中,树根结点没有结点,其余每个结点有且只有个直接前驱结点,叶子结点没有结点,其余每个结点的直接后续结点可以。 4. 在图形结构中,每个结点的前驱结点数和后续结点数可以。 5. 线性结构中元素之间存在关系,树形结构中元素之间存在关系,图形结构中元素之间存在关系。 6. 算法的五个重要特性是__ __ , __ __ , ___ _ , __ __ , _ ___。 7. 分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是__ __。 for (i=0;ii++) for (j=0;j j++) A[i][j]=0; 8. 分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是__ __。 for (i=0;ii++) for (j=0; j j++) A[i][j]=0; 9. 分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是__ __。 s=0; for (i=0;ii++) for (j=0;jj++) for (k=0;kk++) s=s+B[i][j][k]; sum=s;

经典数据结构习题集含答案

线性表 1.下列有关线性表的叙述中,正确的是(A)。 A)线性表中元素之间的关系是线性关系 B)线性表中至少有一个元素 C)线性表中的任一元素有且仅有一个直接前趋 D)线性表中的任一元素有且仅有一个直接后继 2.下述哪一条是顺序存储结构的优点?(A) A)存储密度大B)插入方便 C)删除方便D)可方便地用于各种逻辑结构的存储表示 3.在一个长度为n的顺序表中,在第i个元素(1<=i<=n)之前插入一个新元素时需向后移动(D)个元素。 A)1 B)n-i C)n-i-1 D)n-i+1 4.如果某线性表中最常用的操作是取第i个元素和找第i个元素的前驱,那么采用(A)存储方式最节省时间。 A)顺序表B)单链表 C)双链表D)循环链表 5.对顺序存储的线性表,设其长度为n,且在任何位置上插入或删除操作都是等概率的。则插入一个元素时平均要移动表中的(A)个元素。 A)n/2 B)(n+1)/2 C)(n-1)/2 D)n 6.下述哪一条是顺序存储结构的缺点?(C) A)存储密度太大 B)随机存取 C)一般要估计最大的需要空间 D)只能应用于少数几种逻辑结构的存储表示 7.在单链表中,增加头结点的目的是(C)。 A)使单链表至少有一个结点 B)标志表中首结点的位置 C)方便运算的实现 D)说明单链表是线性表的链式存储表示 8.单链表不具有的特点是(A)。 A)可随机访问任一元素B)插入和删除不需要移动元素 C)不必事先估计存储空间D)所需空间和线性表长度成正比 9.循环链表的主要优点是(D)。 A)不再需要头指针了 B)已知某个结点的位置后,能够容易找到他的直接前趋 C)在进行插入、删除运算时,能更好的保证链表不断开 D)从表中的任意结点出发都能扫描到整个链表 10.链表对于数据元素的插入与删除是(B)。 A)不需移动结点,不需改变结点指针 B)不需移动结点,只需改变结点指针 C)只需移动结点,不需改变结点指针 D)既需移动结点,又需改变结点指针

数据结构习题(含答案)

第一章绪论 一、填空题 1.数据是描述客观事物的数、字符以及所有能输入到计算机且能够被计算机程序加工处理的符号集合。_________是数 据的基本单位;___________是数据的最小单位。通常被计 算机加工处理的数据不是孤立无关的,而是彼此之间存在 着某种联系,将这种数据间的联系称为________。 2.数据结构进行形式化定义时,可以从逻辑上认为数据结构DS是_________的集合D和D上_________的集合R所构成 的二元组:DS=(D,R)。 3.已知某数据结构的二元组形式表示为:A=(D,R),D={01,02,03,04,05,06,07,08,09},R={r},r={<01,02>, <01,03>,<01,04>,<02,05>,<02,06>,<03,07>, <03,08>,<03,09>}。则此数据结构属于_____________ 结构。 4.一个算法的时间复杂度通常用问题规模大小的函数来表示,当一个算法的时间复杂度与问题规模n大小无关时, 则表示为__________;成正比关系时,则表示为 ___________;成对数关系时,则表示为___________;成 平方关系时,则表示为__________。 5.数据结构的逻辑结构包括_____________、树型结构和图型结构三种类型,其中树型结构和图型结构合称为 _____________;数据结构的存储结构主要包括 ____________和____________两种类型。

6.线性结构的特点是:第一个结点_______前驱结点,其余结点有且仅有_______个前驱结点;最后一个结点_______后 继结点,其余每个结点有且仅有_______个后继结点。 7.树型结构的特点是:根结点没有________结点,其余每个结点有且仅有________个前驱结点;叶子结点_________后 继结点,其余结点可以有_________个后继结点。 8.图型结构的特点是:每个结点可以有_________个前驱结点和后继结点。 9.程序段for(i=1,s=0;s}。 2.B=(K,R),其中:K={a,b,c,d,e,f,g,h},R={r}, r={}。 3.C=(K,R),其中:K={ a,b,c,d,e },R={r},r={}。

数据结构各章习题及答案

数据结构各章习题及答案 第一章绪论 一、选择题 1.组成数据的基本单位是() (A)数据项(B)数据类型(C)数据元素(D)数据变量 2.数据结构是研究数据的()以及它们之间的相互关系。 (A)理想结构,物理结构(B)理想结构,抽象结构 (C)物理结构,逻辑结构(D)抽象结构,逻辑结构 3.在数据结构中,从逻辑上可以把数据结构分成() (A)动态结构和静态结构(B)紧凑结构和非紧凑结构 (C)线性结构和非线性结构(D)内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。 ①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像 ②(A)结构(B)关系(C)运算(D)算法 5.算法分析的目的是()。 (A)找出数据结构的合理性(B)研究算法中的输入和输出的关系 (C)分析算法的效率以求改进(D)分析算法的易懂性和文档性 6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。 ① (A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法 ②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性 二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。() 3.数据元素是数据的最小单位。()

4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。() 5.算法的时间复杂度取决于问题的规模和待处理数据的初态。() 三、填空题 1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。 2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。 3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以 _________。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以_________。 5.线性结构中元素之间存在________关系,树形结构中元素之间存在______关系,图形结构中元素之间存在_______关系。 6.算法的五个重要特性是_______、_______、______、_______、_______。 7.数据结构的三要素是指______、_______和________。 8.链式存储结构与顺序存储结构相比较,主要优点是 ________________________________。 9.设有一批数据元素,为了最快的存储某元素,数据结构宜用_________结构,为了方便插入一个元素,数据结构宜用____________结构。 四、算法分析题 1.求下列算法段的语句频度及时间复杂度 参考答案: 一、选择题 1. C 2.C

数据结构习题及参考答案

数据结构习题及参考答案 部门: xxx 时间: xxx 整理范文,仅供参考,可下载自行编辑

数据结构习题及参考答案 一、判断下列叙述的对错。 <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个元素的出栈顺序为s2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为多少?b5E2RGbCAP 四、一棵具有n个结点的理想平衡二叉树<即除离根最远的最底层外其他各层都是满的,最底层有若干结点)有多少层?若设根结点在第0层,则树的高度h如何用n来表示<注意n可能为0)?p1 EanqFDPw 五、从供选择的答案中选择与下面有关图的叙述中各括号相匹配的词句,将其编号填入相应的括号内。 <1)对于一个具有n个结点和e条边的无向图,若采用邻接表表示,则顶点表的大小为

相关主题
文本预览
相关文档 最新文档