数据结构期中复习题完整版.docx
- 文档编号:4511359
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:27
- 大小:36.38KB
数据结构期中复习题完整版.docx
《数据结构期中复习题完整版.docx》由会员分享,可在线阅读,更多相关《数据结构期中复习题完整版.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构期中复习题完整版
第一章线性表
一、单项选择题
1.对于数据结构下列结论不正确的是()
A.相同的逻辑结构,对应的存储结构也必相同
B.数据结构由逻辑结构、存储结构和基本操作3个方面组成
C.数据存储结构就是数据逻辑结构的机内的实现
D.对数据基本操作的实现与存储结构有关
2.下面算法的时间复杂度是()
inty=0;
while(n>=(y+1)*(y+1)){
y++;
}
A.O(n)B.O(n2)C.O
(1)D.O(√n)
3.若长度为n的线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,i的合法值应该是()
A.i>0B.i≤nC.1≤i≤nD.1≤i≤n+1
4.若长度为n的非空线性表采用顺序存储结构,删除表的第i个数据元素,i的合法值应该是()。
A.i>0B.i≤nC.1≤i≤nD.1≤i≤n+1
5.若长度为n的非空线性表采用顺序存储结构,删除表的第i个数据元素,需要移动表中()个数据元素
A.n-iB.n+iC.n-i+1D.n-i-1
6.若长度为n的线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,需要移动表中()个数据元素
A.iB.n+iC.n-i+1D.n-i-1
7.采用顺序存储结构的线性表的插入算法中,当n个空间已满时,可申请再增加分配m个空间。
若申请失败,则说明系统没有()可分配的存储空间。
A.m个B.m个连续的C.n+m个D.n+m个连续的
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个元素的有序表(递增)归并成一个有序表,仍保持其递增顺序,则最少的比较次数是()。
A.n1B.n2C.n1+n2-1D.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->prior->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所指结点,则应执行下列哪一个操作()。
A.p->next=s;s->prior=p;p->next->prior=s;s->next=p->next;
B.p->next=s;p->next->prior=s;s->prior=p;s->next=p->next;
C.s->prior=p;s->next=p->next;p->next=s;p->next->prior=s;
D.s->prior=p;s->next=p->next;p->next->prior=s;p->next=s;
16.下面关于线性表的叙述中,错误的是哪一个()。
A.线性表采用顺序存储,必须占用一片连续的存储单元
B.线性表采用顺序存储,便于进行插入和删除操作
C.线性表采用链接存储,不必占用一片连续的存储单元
D.线性表采用链接存储,便于插入和删除操作
17.以下关于链式存储结构的叙述中,()是不正确的。
A.结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构
B.逻辑上相邻的结点物理上不必相邻
C.可以通过计算直接确定第i个结点的存储地址
D.插入、删除运算操作方便,不必移动结点
18.如某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表B.双链表
C.带头结点的双循环链表D.单循环链表
19.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除一个元素,则采用()存储方式最节省运算时间
A.单链表
B.仅有头指针的单循环链表
C.双链表
D.仅有尾指针的单循环链表
20.设线性表非空,采用下列()所描述的链表可以在O
(1)时间内在表尾插入一个新结点。
A.带表头结点的单链表,一个链表指针指向表头结点
B.带表头结点的单循环链表,一个链表指针指向表头结点
C.不带表头结点的单链表,一个链表指针指向表的第一个结点
D.不带表头结点的单循环链表,一个链表指针指向表的第一个结点
21.线性表的静态链表存储结构与顺序存储结构相比优点是()。
A.所有的操作算法实现简单B.便于随机存储
C.便于插入和删除D.便于利用零散的存储空间
22.下面说法正确的是()
A.集合与线性表的区别在于是否按关键排序
B.对于任何数据结构,链式存储结构一定优于顺序存储结构
C.链表中的头结点仅起到标识作用
D.在单链表中设置头结点的作用主要是使插入和删除等操作统一,在第一个元素之前插
元素和删除第一个结点不必另作判断。
另外,不论链表是否为空,链表指针不变。
二、综合应用题
1.线性表(a1,a2,a3,…,a4)采用顺序存储,每个元素都是整数,试设计算法用最少时间把所有值为负数的元素移到全部正数值元素前边的算法。
例:
(x,-x,-x,x,x,-x…x)变为(-x,-x,-x…x,x,x)。
2.线性表(a1,a2,a3,…,an)中元素递增有序按顺序存储,要求设计算法完成下述功能:
(1)用最少时间在表中查找数值为x的元素;
(2)若找到将其与后继元素位置相交换;
(3)若找不到将其插入表中并使表中元素仍递增有序
3.已知一个带有头结点的单链表,假设该链表只给出了头指针L,在不改变链表的前提下,
请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数),若查找成功,算法输出该结点的data域的值,并返回0。
要求:
(1)描述算法的基本设计思想;
(2)描述算法的详细实现步骤;
(3)根据设计思想和实现步骤,采用程序设计语言描述算法,关键之处请给出简要注
4.假设一个单循环链表,其结点含有三个域(pre,data,next)。
其中data为数据域;pre为指针域,它的值为空指针;next为指针域,它指向后继结点。
请设计算法,将此表改成双向链表。
5.试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法、函数原型如下:
voiddelete(LinkList&L);
6.设计一个算法,将带有头结点的非空单链表中数据域值最小的那个结点移到链表的最前面。
要求:
不得额外申请新的链结点。
函数原型如下:
voiddelinsert(LinkList&L);
7.编写一个算法来交换单链表中指针p所指结点与其后继结点,head是该链表的头指针,p指向该链表中某一结点。
8.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。
请编写算法将这两个单链表归并为一个按元素值非递增次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
9.编写一个算法,设有两个无头结点的单链表,头指针分别为ha、hb,两个链表的数据都按递增序存放。
要求将hb归并到ha表中,且归并后ha仍递增序,在归并中对于ha表中已有的数据若hb中的这部分也有,则hb中的这部分数据不归并到ha中,hb的链表在算法中不允许破坏。
10.已知L1、L2分别为两个单循环链表的头结点指针,m、n分别为L1、L2表中数据结点个数。
要求设计一个算法,用最快速度将两表合并成一个带头结点的单循环链表。
11.已知不带头结点的线性表list,链表中结点构造为(data,next),其中data为数据域,next为指针域。
请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。
要求链接过程中不得使用除该链表以外的任何链接点空间。
12.已知线性表第一个链接点指针为list,请写一算法,将该链表分解为两个有头结点的循环链表,并将两个循环链表的长度分别存放在各自头结点的数据域中。
其中,线性表中序号为奇数的元素分解到第一个循环链表中,序号为偶数的元素分解到第二个循环链表中。
(要求用最少的时间和最少的空间)
13.设键盘输入n个英语单词,输入格式为n,w1,w2,…wn,其中n表示随后输入英语单词个数,试编一程序,建立一个单链表,实现:
(1)如果单词重复出现,则只在链表上保留一个;
(2)除满足
(1)的要求外,链表结点还应有一个频度域,记录该单词重复出现的次数,然后输出出现次数最多的前k(k<=n)个单词。
答案解析
一、单项选择题
1.【答案】A
选项A错误的原因是相同的逻辑结构可以由不同的存储结构来实现,例如线性表可以用顺序存储结构和链式存储结构来实现。
2.【答案】D
本题程序中每次循环将y的值增加1,然后比较n与y+1的平方大小,所以总共要进行根号n次比较。
3.【答案】D
在线性表的第1至第n个位置插入一个数据元素显然是允许的,紧挨在线性表最后那个数据元素后面插入一个数据元素也是允许的,因此,i的合法值应该是1≦i≦n+1。
4.【答案】C
只有删除非空线性表的第1至第n个数据元素才是可能的,因此,i的合法值应1≦i≦n。
5.【答案】A
删除线性表中的第i个数据元素,需要将线性表的第i+1个数据元素至第n个数据元素依次前移1个位置,一共需要移动n-i个数据元素。
6.【答案】C
在线性表的第i个位置插入一个新的数据元素之前,需要先将线性表的第i个数据元素至第n个数据元素依次后移1个位置,一共需要移动n-i+1个数据元素。
7.【答案】D
本题主要考查线性表的顺序存储结构的特点。
8.【答案】D
若线性表采用链式存储结构,各链结点之间的地址连续可以,不连续也可以(但每一个链
第二章栈、列队和数组
一、单项选择题
1.栈和列队的相同之处是()。
A.元素的进出满足先进后出B.元素的进出满足先进先出
C.只允许在端点进行插入和删除操作D.无共同点
2.某栈的输入序列为1,2,3,4,下面的四个序列中()不可能是它的输出序列。
A1,3,2,4B.2,3,4,1C.4,3,1,2D.3,4,2,1
3.设栈的初始状态为空,当字符序列n1_作为栈的输入时,输出长度为3的且可用作C语言标识符的序列有()个。
A.3B.4C.5D.6
4.若某栈的输入序列是1,2,3,…,n,输出序列的第一个元素为n,则第i个输出元素为()。
A.iB.n-iC.n-i+1D.以上都不对
5.设栈的输入序列为1,2,3,…,n,输出序列为a1,a2,a3,…,an,若存在1≤k≤n时ak=n,则当k≤i≤n时ai为()。
A.n-i+1B.n-i+kC.n-i-1D.不确定
6.若进栈序列为a,b,c,则通过出栈操作可能得到的a,b,c的不同排列个数为()。
A.3B.4C.5D.6
7.设计一个递归问题的非递归算法通常需要设置()结构。
A.线性表B.数组C.栈D.队列
8.当执行函数时其局部变量的存储一般采用()进行存储。
A.树B.静态链表C.栈D.队列
9.向一个栈顶指针为top的链栈中插入一个x节点,则执行()。
A.top->next=xB.x->next=top->next;top->next=x;
C.x->next=top;top=x;D.x->next=top;top=top->next;
10.由两个栈共享一个向量空间的好处是()。
A.减少存取时间,降低上溢发生的几率B.节省存储空间,降低上溢发生的几率
C.减少存取时间,降低下溢发生的几率D.节省存储空间,降低下溢发生的几率
11.若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i=1,2)的栈顶,栈1的底在V[1],栈2的底在V[m],则栈满的条件是()。
A.top[2]-top[1]=0;B.top[1]+1=top[2];
C.top[1]+top[2]=m;D.top[1]=top[2];
12.设计一个判别表达式中左、右括号是否匹配的算法,采用()数据结构最佳。
A.线性表的顺序存储结构B.队列
C.线性表的链式存储结构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.32411;(*^(+*-B.328;(*^-
C.32422;(*^(-D.328;(*^(-
15.单循环链表表示的列队长度为n,若只设头指针,则入队的时间复杂度为()。
A.O(n)B.O
(1)C.O(n*n)D.O(nlogn)
16.设栈S和列队Q的初始状态为空,元素A,B,C,D,E,F,G一次进栈S,一个元素出栈后即进入队列Q,若七个元素出队列的顺序为B,D,C,F,E,A,G,则栈S的容量至少应该是()。
A.2B.3C.4D.7
17.若元素abcdef依次进栈,允许进栈、退栈操作交替进行。
但不允许连续三次进行退栈工作,则不可能得到的出栈序列是()
A.dcebfaB.cbdaefC.dbcaefD.afedcb
18.循环队列存储在数组A[0..m]中,则入队时的操作为().
A.rear=rear+1B.rear=(rear+1)MOD(m-1)
C.rear=(rear+1)MODmD.rear=(rear+1)MOD(m+1)
19.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别是0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别是()。
A.1和5B.2和4C.4和2D.5和1
20.最大容量为n的循环队列,队尾指针为rear,队头指针为front,则队空的条件是()。
A.(rear+1)MODn=frontB.rear=front
C.rear+1=front;D.(rear-1)MODn=front
21.循环队列用数组A[0..m-1]存放其元素值,已知其队头指针front指向队头元素,队尾指针rear指向队尾元素,则当前队列的元素个数是()。
A.(rear-front+m)MODn=frontB.rear-front+1
C.rear+1=frontD.(rear-front+m-1)MODm
22.用链式方式存储的队列,在进行删除运算时()。
A.仅修改头指针B.仅修改尾指针
C.头、尾指针都要修改D.头、尾指针可能都要修改
23.已知二维数组A[1..4,1..6]采用行序为主序方式存储,每个元素占用3个存储单元,并且A11的存储地址为1200,元素A24的存储地址是()。
A.1221B.1227C.1239D.1257
24.已知二维数组A[1..4,1..6]采用列序为主序方式存储,每个元素占用4个存储单元,并且A34的存储地址为1234,元素A11的存储地址是()。
A.1178B.1290C.1278D.1190
25.C语言中定义的整数一维数组a[50]和二维数组b[10][5]具有相同的首元素地址,即&(a[0])=&(b[0][0]),在以列序为主序时,a[18]的地址和()相同。
A.b[1][7]B.b[1][8]C.b[8][1]D.b[7][1]
26.对一些特殊的矩阵采用压缩存储的目的主要是为了()。
A.表达变得简单B.对矩阵元素的存取变得简单
C.去掉矩阵中的多余元素D.减少不必要的存储空间开销
27.按照压缩储存的思想,对于具有t个非零元素的m*n阶稀疏矩阵,可以采用三元组表储存方法储存,但t满足()关系是,这样做才有意义。
A.t 二、综合应用题 1、试证明: 若借助栈由输入顺序1,2,……,n得到输出序列为p1,p2,……,pn(它是输入序列的一个排列),则在输出序列中不可能出现这样的情形: 存在着i 2、在一个算法中需要建立多个堆栈时可以选用下列三种方法之一,试问: 着三种方案之间相比较各有什么优缺点? (1)、分别用多个顺序表储存空间建立多个独立的堆栈; (2)、多个堆栈共享一个顺序储存空间; (3)、分别建立多个独立的链接堆栈。 3、数组A[1…8,-2…6,0…6]以行为主序存储,设第一个元素的首地址时78,每个元素的长度为4,试求元素A[4,2,3]的存储地址。 4.假设按低下标优先存储整型数组A[-3..8,3..5,-4..0,0..7]时,第一个元素的字节存储地址是100,每个整数占4个字节,问元素A[0,4,-2,5]的存储地址是什么? 5.设计一个算法,判断一个算术表达式中的括号是否配对。 算术表达式保存在带头结点的单循环链表中,每个结点有两个域: ch和next,其中ch域为字符类型。 设栈已定义: InitStack(S),Push(S,e),StackEmpty(S),GetTop(S,e),Pop(S,e)分别为栈初始化,入栈,判断栈空,获得栈顶元素,出栈等操作。 6.在数组A[1..n]中有n个数据,试建立一个带有头结点的循环链表,头指针为h,要求链中数据从小到大排列,重复的数据在链中只保存一个。 7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,请写出相应的入队列和出队列算法。 8.设整数序列a1,a2,…,an,给出求解最大值的递归程序。 9、编写一个过程,对一个m*n的矩阵,通过行变换,使其每行元素的平均值按递增顺序排列。 第一章线性表 一、选择题 1.A选项A错误的原因是相同的逻辑可以用不同的存储结构来实现,例如线性表可以用顺序存储结构来实现 2.D本体中每次循环将y的值加1,然后比较n与(y+1)(y+1)大小,所以总共要进行 次比较 3.D在线性表的第1至第n个位置插入一个数据元素显然是允许的,紧挨在线性表的最后那个数据元素的后面插入一个数据元素也是允许的,因此,i的合法值应该是 4.C只有删除非空线性表的第1至第n个元素才是可能的,因此,i的合法值应该是 5.A 删除线性表的第i个数据元素,需要将线性表的第i+1个数据元素至第n个数据元素依次前移1个位置,一共移动n-i个数据元素 6.C 在线性表的第i个位置插入一个新的数据元素之前,需要先将线性表的第i个数据元素依次前移1个位置,一共需要移动n-i+1个元素 7.D 本题主要考察线性表的顺序存储结构的特点 8.D 若线性表采用链式存储结构,各链接点之间的地址连续可以,不连续也可以(但每一个链接点所占用的存储空间必须离线连续) 9.C 对于有序单链表,最坏情况下需要遍历整个链表才能找到当前结点需要插入的位置 10.C链接方式存储时访问某个元素需要进行遍历,时间复杂度为O(n) 11.C由于长度为n的单链表表链接在长度为m的单链表之后的操作,需要把长度为m的单链表遍历一遍,找到最后的一个结点,所以时间复杂度为O(m) 12.D比较次数少的情况是一个表中的元素大于另一个表中的元素,这时需要比较的次数是mon(n1,n2) 13.C 选项A是删除了当前p结点;选项B是把p结点之后的所有结点都丢失了,同时在p结点本身形成了一个环;选项C正确;选项D是把p和p后的后继结点都删除了 14.A 本题主要考察如何在双链表中删除一个结点,与单链表上的插入和删除操作不同意的是,在双链表中插入恶化删除必须同时修改两个方向上的指针 15.D 本题主要考察如何在双向链表中插入一个结点。 根据双向链表上的结构特点,选项D所提到的操作时正确的,其关键之一的操作p->next->prior=s;要出现在p->next=s;之后。 选项A.B.C均造成prior指向其自身 16.B线性表采用顺序存储,便于进行查找操作,不便于进行插入和删除操作 17.C选项C错误的原因是链式存储结构的地址不一定是连续的,所以不能通过计算直接确定地i个结点的存储地址 18.A只有顺序表才能存取任一指定序号的元素,其他存储方式都需要遍历才能到达相应元素。 顺序表同样可以在末尾进行插入和删除元素 19.D本题显然应该在选项B和选项D中选择正确答案,考虑到需要在最后一个元素之后插入和删除第一个元素,所以最好可以直接得到链表尾指针。 如果需要只有头指针,必须遍历所有 8------9 p->next=q->next;//p的后继指向原p后继的后继 q->next=p;//原p后继的后继指针指向p } }//算法结束 8【分析】因为两链表已按元素值递增次序排列,将其合并时,均从第一个结点起进行比较,将小的链入链表中,同时后移链表工作指针。 该问题要求结果链表按元素值非递增次序排列。 故在合并的同时,将该链表结点逆置,可采用头插法建立结果链表。 【算法如下】 voidUnion(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->data<=pb->data){ r=pa->next;//将pa的后继结点暂存于r pa->next=la->next;//将pa的结点链于结果表中,同时逆置 la->next=pa; pa=r;//恢复pa为当前待比较结点 } else{ r=pb->next;//将pb的后继结点暂存于r pb->next=la->next;//将pb结点链于结果表中,同时逆置 la->next=pb; pb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 期中 复习题 完整版