1、数据结构期中复习题完整版第一章 线性表一、单项选择题1.对于数据结构下列结论不正确的是( )A.相同的逻辑结构,对应的存储结构也必相同B.数据结构由逻辑结构、存储结构和基本操作3个方面组成C.数据存储结构就是数据逻辑结构的机内的实现D.对数据基本操作的实现与存储结构有关2.下面算法的时间复杂度是( )int y=0;while(n=(y+1)*(y+1)y+;A.O(n) B.O(n2) C.O(1) D.O(n)3.若长度为n的线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,i的合法值应该是( )Ai0 B.in C.1in D.1in+14. 若长度为n的非空线性表采用顺序存储结
2、构,删除表的第i个数据元素,i的合法值应该是( )。Ai0 B.in C.1in D.1in+15.若长度为n的非空线性表采用顺序存储结构,删除表的第i个数据元素,需要移动表中( )个数据元素An-i B.n+i C. n-i+1 D. n-i-16.若长度为n的线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,需要移动表中( )个数据元素Ai B.n+i C. n-i+1 D. n-i-17.采用顺序存储结构的线性表的插入算法中,当n个空间已满时,可申请再增加分配m个空间。若申请失败,则说明系统没有( )可分配的存储空间。Am个 B. m个连续的 C.n+ m个 D. n+m个连续的
3、8.线性链表中各链结点之间的地址( )。A必须连续 B. 一定不连续 C.部分地址必须连续 D. 连续与否无所谓9.给定n个数据元素,逐个输入这些元素,建立一个有序单链表的时间复杂度是( )。A.O(1) B.O(n) C.O(n2) D.O(nlogn)10.线性表(a1,a2,an )以链接方式存储时,访问第i个位置元素的时间复杂度为( )A.O(i) B.O(1) C.O(n) D.O(i-1)11.将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( )。A.O(1) B.O(n) C.O(m) D.O(m+n)12.将两个各有n1个n2个元素的有序表(递增)归并成一个有
4、序表,仍保持其递增顺序,则最少的比较次数是( )。An1 B. n2 C.n1+n2-1 D. min(n1,n2)13.已知L是带头结点的单链表,结点p既不是首结点(第一个结点),也不是尾结点,删除p结点的直接后继结点的语句序列是( )A.p=p-next; B.p-next=p; C.p-next=p-next-next; D.p=p-next-next;14.设双向链表中结点的结构为(prior,data,next),在双向链表中删除指针p所指的结点时需要修改指针( )A.p-prior-next=p-next; p-next-prior=p-prior;B. p-prior =p- p
5、rior- prior; p- prior-next=p;C.p -next-prior =p; p-next =p-next-next;D.p -next=p-prior-prior; p- prior=p- next- next;15.设双向循环链表中结点的结构为(prior,data,next),且不带表头结点。若想在指针p所指结点之后插入指针s所指结点,则应执行下列哪一个操作( )。Ap-next=s; s-prior=p; p-next-prior=s; s-next=p-next;Bp-next=s; p-next-prior=s; s-prior=p; s-next=p-next
6、;Cs-prior=p; s-next=p-next; p-next=s; p-next-prior=s;Ds-prior=p; s-next=p-next; p-next-prior=s; p-next=s;16.下面关于线性表的叙述中,错误的是哪一个( )。A.线性表采用顺序存储,必须占用一片连续的存储单元B.线性表采用顺序存储,便于进行插入和删除操作C.线性表采用链接存储,不必占用一片连续的存储单元D.线性表采用链接存储,便于插入和删除操作17.以下关于链式存储结构的叙述中,( )是不正确的。A. 结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构B. 逻辑上相邻的结点物理上不必
7、相邻C. 可以通过计算直接确定第i个结点的存储地址D.插入、删除运算操作方便,不必移动结点18.如某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。A. 顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表19.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除一个元素,则采用( )存储方式最节省运算时间A. 单链表B. 仅有头指针的单循环链表C. 双链表D. 仅有尾指针的单循环链表20.设线性表非空,采用下列( )所描述的链表可以在O(1)时间内在表尾插入一个新结点。A. 带表头结点的单链表,一个链表指针指向表头结点B.
8、 带表头结点的单循环链表,一个链表指针指向表头结点C. 不带表头结点的单链表,一个链表指针指向表的第一个结点D.不带表头结点的单循环链表,一个链表指针指向表的第一个结点21.线性表的静态链表存储结构与顺序存储结构相比优点是( )。A.所有的操作算法实现简单 B.便于随机存储C.便于插入和删除 D.便于利用零散的存储空间22.下面说法正确的是( )A.集合与线性表的区别在于是否按关键排序B.对于任何数据结构,链式存储结构一定优于顺序存储结构C.链表中的头结点仅起到标识作用D.在单链表中设置头结点的作用主要是使插入和删除等操作统一,在第一个元素之前插 元素和删除第一个结点不必另作判断。另外,不论链
9、表是否为空,链表指针不变。二、综合应用题1.线性表(a1,a2,a3,a4)采用顺序存储,每个元素都是整数,试设计算法用最少时间把所有值为负数的元素移到全部正数值元素前边的算法。例:(x,-x,-x,x,x,-xx)变为(-x,-x,-xx,x,x)。2.线性表(a1,a2,a3,an)中元素递增有序按顺序存储,要求设计算法完成下述功能: (1)用最少时间在表中查找数值为x的元素; (2)若找到将其与后继元素位置相交换; (3)若找不到将其插入表中并使表中元素仍递增有序3.已知一个带有头结点的单链表,假设该链表只给出了头指针L,在不改变链表的前提下, 请设计一个尽可能高效的算法,查找链表中倒数
10、第k个位置上的结点(k为正整数),若查找成功,算法输出该结点的data域的值,并返回0。要求: (1)描述算法的基本设计思想; (2)描述算法的详细实现步骤;(3)根据设计思想和实现步骤,采用程序设计语言描述算法,关键之处请给出简要注 4.假设一个单循环链表,其结点含有三个域(pre,data,next)。其中data为数据域;pre为指针域,它的值为空指针;next为指针域,它指向后继结点。请设计算法,将此表改成双向链表。5.试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法、函数原型如下:void delete(LinkList &L);6.设计一个算法,将带有头结点的非空单链
11、表中数据域值最小的那个结点移到链表的最前面。要求:不得额外申请新的链结点。函数原型如下:void delinsert(LinkList &L);7.编写一个算法来交换单链表中指针p所指结点与其后继结点,head是该链表的头指针,p指向该链表中某一结点。8.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值非递增次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。9.编写一个算法,设有两个无头结点的单链表,头指针分别为ha、hb,两个链表的数据都按递增序存放。要求将hb归并到ha表中,且归并后ha仍递增序,在归并中对于ha表中已
12、有的数据若hb中的这部分也有,则hb中的这部分数据不归并到ha中,hb的链表在算法中不允许破坏。10.已知L1、L2分别为两个单循环链表的头结点指针,m、n分别为L1、L2表中数据结点个数。要求设计一个算法,用最快速度将两表合并成一个带头结点的单循环链表。11.已知不带头结点的线性表list,链表中结点构造为(data,next),其中data为数据域,next为指针域。请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。要求链接过程中不得使用除该链表以外的任何链接点空间。12.已知线性表第一个链接点指针为list,请写一算法,将该链表分解为两个有头结点的循环链表,并将两个循环链表的长
13、度分别存放在各自头结点的数据域中。其中,线性表中序号为奇数的元素分解到第一个循环链表中,序号为偶数的元素分解到第二个循环链表中。(要求用最少的时间和最少的空间)13.设键盘输入n个英语单词,输入格式为n,w1,w2,wn,其中n表示随后输入英语单词个数,试编一程序,建立一个单链表,实现: (1)如果单词重复出现,则只在链表上保留一个; (2)除满足(1)的要求外,链表结点还应有一个频度域,记录该单词重复出现的次数,然后输出出现次数最多的前k(knext=x B.x-next=top-next; top-next=x;C.x-next=top;top=x; Dx-next=top;top=top
14、-next;10.由两个栈共享一个向量空间的好处是()。A.减少存取时间,降低上溢发生的几率 B. 节省存储空间,降低上溢发生的几率C.减少存取时间,降低下溢发生的几率 D. 节省存储空间,降低下溢发生的几率11.若栈采用顺序存储方式存储,现两栈共享空间V1.m,topi代表第i个栈(i=1,2)的栈顶,栈1的底在V1,栈2的底在Vm,则栈满的条件是()。A.top2-top1=0; B.top1+1=top2;C.top1+top2=m; D.top1=top2;12.设计一个判别表达式中左、右括号是否匹配的算法,采用()数据结构最佳。A.线性表的顺序存储结构 B.队列C.线性表的链式存储结
15、构 D.栈13.表达式a*(b+c)-d的后缀表达式是()。A.abcd * + - B.abc + * d - C.abc * + d D.- + * abcd 14. 表达式3*2(4+2*2-6*3)-5求值过程中,当扫描到6时,操作数对象栈和运算符栈分别为(),其中表示幂乘。A.3 2 4 1 1;(* (+ * - B.3 2 8 ;(* -C.3 2 4 2 2 ;(*(- D.3 2 8 ;(* ( -15.单循环链表表示的列队长度为n,若只设头指针,则入队的时间复杂度为()。A.O(n) B.O(1) C.O(n*n) D.O(nlogn)16.设栈S和列队Q的初始状态为空,元
16、素A,B,C,D,E,F,G 一次进栈S,一个元素出栈后即进入队列Q,若七个元素出队列的顺序为B,D,C,F,E,A,G,则栈S的容量至少应该是()。A.2 B.3 C.4 D.717.若元素abcdef依次进栈,允许进栈、退栈操作交替进行。 但不允许连续三次进行退栈工作,则不可能得到的出栈序列是()A.dcebfa B.cbdaef C.dbcaef Dafedcb18.循环队列存储在数组A0.m中,则入队时的操作为().A.rear=rear+1 B.rear=(rear+1)MOD(m-1)C.rear=(rear+1)MOD m D.rear=(rear+1)MOD(m+1)19.若用
17、一个大小为6的数组来实现循环队列,且当前rear和front的值分别是0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别是()。A.1和5 B.2和4 C.4和2 D.5和120.最大容量为n的循环队列,队尾指针为rear,队头指针为front,则队空的条件是()。A.(rear+1)MOD n=front B.rear=frontC.rear+1=front ; D. (rear-1)MOD n=front21.循环队列用数组A0.m-1存放其元素值,已知其队头指针front指向队头元素,队尾指针rear指向队尾元素,则当前队列的元素个数是()。A.(rear-f
18、ront+m)MOD n=front B.rear-front+1C.rear+1=front D.(rear-front+m-1)MOD m22.用链式方式存储的队列,在进行删除运算时()。A.仅修改头指针 B.仅修改尾指针C.头、尾指针都要修改 D.头、尾指针可能都要修改23.已知二维数组A1.4,1.6采用行序为主序方式存储,每个元素占用3个存储单元,并且A11的存储地址为1200,元素A24的存储地址是()。A.1221 B.1227 C.1239 D.1257 24.已知二维数组A1.4,1.6采用列序为主序方式存储,每个元素占用4个存储单元,并且A34的存储地址为1234,元素A1
19、1的存储地址是()。A.1178 B.1290 C.1278 D.1190 25.C语言中定义的整数一维数组a50和二维数组b105具有相同的首元素地址,即&(a0)=&(b00),在以列序为主序时,a18的地址和()相同。A.b17 B.b18 C.b81 D.b7126.对一些特殊的矩阵采用压缩存储的目的主要是为了()。A.表达变得简单 B.对矩阵元素的存取变得简单C.去掉矩阵中的多余元素 D.减少不必要的存储空间开销27. 按照压缩储存的思想,对于具有t个非零元素的m*n阶稀疏矩阵,可以采用三元组表储存方法储存,但t满足( )关系是,这样做才有意义。A. tm*n B. t(m*n)/3
20、 C. t=(m*n)/3-1 D. t(m*n)/3-1二、综合应用题1、试证明:若借助栈由输入顺序1,2,n得到输出序列为p1,p2,pn(它是输入序列的一个排列 ),则在输出序列中不可能出现这样的情形:存在着ijk,使PjPknext=q-next; /p的后继指向原p后继的后继q-next=p; /原p后继的后继指针指向p /算法结束8【分析】因为两链表已按元素值递增次序排列,将其合并时,均从第一个结点起进行比较,将小的链入链表中,同时后移链表工作指针。该问题要求结果链表按元素值非递增次序排列。故在合并的同时,将该链表结点逆置,可采用头插法建立结果链表。【算法如下】void Union
21、(LinkList &la,LinkList &lb) /*la,lb分别是带头结点的两个单链表的头指针,链表中的元素值按递增序排列,本算法将两链表合并成一个按元素值非递增次序排列的单链表*/pa=la-next;pb=lb-next; /pa,pa分别是链表la和lb的工作指针la-next=null; /la作结果链表的头指针,先将结果链表初始化为空while(pa!=null&pb!=null) /当两个链表均不为空时if(pa-datadata) r=pa-next; /将pa的后继结点暂存于rpa-next=la-next; /将pa的结点链于结果表中,同时逆置la-next=pa;pa=r; /恢复pa为当前待比较结点else r=pb-next; /将pb的后继结点暂存于rpb-next=la-next; /将pb结点链于结果表中,同时逆置la-next=pb;pb
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1