数据结构练习(附答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题一绪论
.1.1 单项选择题
1. 数据结构是一门研究非数值计算的程序设计问题中计算机的① A 以及它们之间的
② B 和运算等的学科。
①A.操作对象B.计算方法C.逻辑存储D.数据映象
②A.结构B.关系C.运算D.算法
2. 数据结构被形式地定义为(K,R),其中K是① B 的有限集合,R是K上的②D 有限集合。
①A.算法B.数据元素C.数据操作D.逻辑结构
②A.操作B.映象C.存储D.关系
3. 在数据结构中,从逻辑上可以把数据结构分成 C 。
A.动态结构和静态结构B.紧凑结构和非紧凑结构
C.线性结构和非线性结构D.内部结构和外部结构
4. 线性表的顺序存储结构是一种① A 的存储结构,线性表的链式存储结构是一种
② B 的存储结构。
A.随机存取B.顺序存取C.索引存取D.散列存取
5. 算法分析的目的是① C ,算法分析的两个主要方面是② A B 。
① A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系
C. 分析算法的效率以求改进
D. 分析算法的易懂性和文档性
② A. 空间复杂性和时间复杂性 B. 正确性和简明性
C. 可读性和文档性
D. 数据复杂性和程序复杂性
6. 计算机算法指的是① C ,它必具备输入、输出和② B 等五个特性。
①A. 计算方法 B. 排序方法
C. 解决问题的有限运算序列
D. 调度方法
②A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性
C. 确定性、有穷性和稳定性
D. 易读性、稳定性和安全性
7. 线性表的逻辑顺序与存储顺序总是一致的,这种说法 B 。
A. 正确
B. 不正确
8. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址 D 。
A. 必须是连续的
B. 部分地址必须是连续的
C. 一定是不连续的
D. 连续或不连续都可以
9. 在以下的叙述中,正确的是 B 。
A.线性表的线性存储结构优于链表存储结构
B.二维数组是其数据元素为线性表的线性表
C.栈的操作方式是先进先出
D.队列的操作方式和先进后出
10. 每种数据结构都具备三个基本运算:插入、删除和查找,这种说法 B 。
A. 正确
B. 不正确
1.2 填空题(将正确的答案填在相应的空中)
1. 数据逻辑结构包括线性结构、树形结构和图形结构三种类型,树形结构和图形
结构合称为非线性结构。
2. 在线性结构中,第一个结点无前驱结点,其余每个结点有且只有 1 个前驱结点;最后一个结点无后续结点,其余每个结点有且只有1 个后续结点。
3. 在树形结构中,树根结点没有前驱结点,其余每个结点有且只有 1 个前驱结点,叶子结点没有后继结点,其余每个结点的后续结点可以任意多个。
4. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。
5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。
6. 算法的五个重要特性是_有穷性、确定性、可行性、输入和输出。
7. 下面程序段的时间复杂度是O(m*n)。
for (i=0;i<n;i++)
for (j=0;j<m;j++)
A[i][j]=0;
8. 下面程序段的时间复杂度是O(n) 。
i=s=0;
while (s<n)
{ i++; /*i=i+1*/
s+=i; /*s=s+1*/
}
9. 下面程序段的时间复杂度是O(n2)。
s=0;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
s+=B[i][j];
sum=s;
10. 下面程序段的时间复杂度是O(log3n)。
i=1;
while (i<=n)
i=i*3;
1.3 算法设计题:
1. 试写一算法,自大到小依次输出顺序读入的三个数X,Y和Z的值.
习题二顺序表示(线性表、栈和队列)
2.1 单项选择题
1. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是_B_。
A. 110
B. 108
C. 100
D. 120
2. 一个栈的入栈序列a,b,c,d,e,则栈的不可能的输出序列是_C_。
A. edcba
B. decba
C. dceab
D. abcde
3. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为_C 。
A. i
B. n=i
C. n-i+1
D. 不确定
4. 栈结构通常采用的两种存储结构是_A。
A.顺序存储结构和链式存储结构
B.散列方式和索引方式
C.链表存储结构和数组
D.线性存储结构和非线性存储结构
5. 判定一个栈ST(最多元素为m0)为空的条件是_B_。
A. ST—> top !=0
B. ST—> top= =0
C. ST—> top !=m0
D. ST—> top= =m0
6. 判定一个栈ST(最多元素为m0)为栈满的条件是_D_。
A. ST—> top!=0
B. ST—> top= =0
C. ST—> top!=m0
D. ST—> top= =m0
7. 栈的特点是_B,队列的特点是A_。
A. 先进先出
B. 先进后出
8. 一个队列的入列序列是1,2,3,4,则队列的输出序列是_B_ 。
A. 4,3,2,1
B. 1,2,3,4
C. 1,4,3,2
D. 3,2,4,1
9. 判定一个队列QU(最多元素为m0)为空的条件是C。
A.QU—>rear—QU—>front= =m0
B.QU—>rear—QU—>front-1= =m0
C.QU—>front= =QU—>rear
D.QU—>front= =QU—>rear+1
10. 判定一个队列QU(最多元素为m0, m0+1= =Maxsize)为满队列的条件是_A_。
A.((QU—>rear-QU—>front)+ Maxsize)% Maxsize = =m0
B.QU—>rear—QU—>front-1= =m0
C.QU—>front= =QU—>rear
D.QU—>front= =QU—>rear+1
11. 判定一个循环队列QU(最多元素为m0)为空的条件是A_。
A.QU—>front= =QU—>rear
B.QU—>front!=QU—>rear
C.QU—>front= =(QU—>rear+1)%m0
D.QU—>front!=(QU—>rear+1)%m0
12. 判定一个循环队列QU(最多元素为m0)为满队列的条件是C_。
A.QU—>front= =QU—>rear
B.QU—>front!=QU—>rear
C.QU—>front= =(QU—>rear+1)%m0
D.QU—>front!=(QU—>rear+1)%m0
13. 循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是A。
A. (rear-front+m)%m
B. rear-front+1
C. rear-front-1
D. rear-front
14. 栈和队列的共同点是_C_。
A. 都是先进后出
B. 都是先进先出
C. 只允许在端点处插入和删除元素
D. 没有共同点
2.2 填空题(将正确的答案填在相应的空中)
1.向量、栈和队列都是_线性结构___结构,可以在向量的_任何_位置插入和删除
元素;对于栈只能在_栈顶_插入和删除元素;对于队列只能在_队尾_插入元素和_队头删除元素。
2.向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向
后移动_n-i+1_个元素。
3.向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动_n-i_个元
素。
4.向栈中压入元素的操作是_先移动栈顶指针,后存入元素_。
5.对栈进行退栈时的操作是_先取出元素,后移动栈顶指针。
6.在一个循环队列中,队首指针指向队首元素的_前一个位置_。
7.从循环队列中删除一个元素时,其操作是_先移动队首指针,后取出元素_。
8.在具有n个单元的循环队列中,队满时共有_n-1_个元素。
9.一个栈的输入序列是12345,则栈的输出序列43512是_不可能的_。
10.一个栈的输入序列是12345,则栈的输出序列12345是_可能的。
2.3 算法设计题:
设顺序表va中的数据元数递增有序。
试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1, a2,…. a n)逆置为(a n, a n-1,…., a1)。
习题三链表(线性表、栈和队列)
3.1 单项选择题
1. 不带头结点的单链表head为空的判定条件是A_。
A. head= =NULL
B. head—>next= =NULL
C. head—>next= =head
D. head!=NULL
2. 带头结点的单链表head为空的判定条件是_B_。
A. head= =NULL
B. head—>next= =NULL
C. head—>next= =head
D. head!=NULL
3. 非空的循环单链表head的尾结点(由p所指向)满足_C_。
A. p—>next= =NULL
B. p= =NULL
C. p—>next= =head
D. p= =head
4. 在循环双链表的p所指结点之后插入s所指结点的操作是D_。
A.p—>right=s; s—>left=p; p—>right—>left=s; s—>right=p—>right;
B.p—>right=s; p—>right—>left=s; s—>left=p; s—>right=p—>right;
C.s—>left=p; s—>right=p—>right; p—>right=s; p—>right—>left=s;
D.s—>left=p; s—>right=p—>right; p—>right—>left=s; p—>right=s;
5. 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行_C_。
A.s—>next=p—>next; p—>next=s;
B.p—>next=s—>next; s—>next=p;
C.q—>next=s; s—>next=p;
D.p—>next=s; s—>next=q;
6. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行_B。
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;
7. 在一个单链表中,若删除p所指结点的后续结点,则执行A 。
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;
9.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较_D_个结点。
A. n
B. n/2
C. (n-1)/2
D. (n+1)/2
10. 在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是_B_。
A. O(1)
B.O(n)
C. O (n2)
D.O (nlog2n)
11. 给定有n个元素的向量,建立一个有序单链表的时间复杂度是_C_。
A. O(1)
B.O(n)
C. O (n2)
D.O (nlog2n)
12. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行__C_。
(不带空的头结点)
A.HS—>next=s;
B.s—>next= HS—>next; HS—>next=s;
C.s—>next= HS; HS=s;
D.s—>next= HS; HS= HS—>next;
13. 从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行__D__。
(不带空的头结点)
A.x=HS; HS= HS—>next;
B. x=HS—>data;
C. HS= HS—>next; x=HS—>data;
D. x=HS—>data; HS= HS—>next;
3.2 填空题(将正确的答案填在相应的空中)
1. 单链表是_线性表_的链接存储表示。
2. 可以使用__双链表_表示树形结构。
3. 在双链表中,每个结点有两个指针域,一个指向_前驱结点_,另一个指向_后继结点_。
4. 在一个单链表中的p所指结点之前插入一个s所指结点时,可执行如下操作:
⑴s—>next=_p->next_;
⑵p—>next=s;
⑶t=p—>data;
⑷p—>data=_s->next_;
⑸s—>data=_t_;
5. 在一个单链表中删除p所指结点时,应执行以下操作:
q= p—>next;
p—>data= p—>next—>data;
p—>next=_ p->next->next _;
free(q);
6. 带有一个头结点的单链表head为空的条件是_ head->next==NULL _。
7. 在一个单链表中p所指结点之后插入一个s所指结点时,应执行s—>next=_ p—>next___和p—>next=_s___的操作。
8. 非空的循环单链表head的尾结点(由p所指向),满足条件_ head->next==p _。
9. 在栈顶指针为HS的链栈中,判定栈空的条件是_ HS==NULL _。
10. 对于一个具有n个结点的单链表,在已知p所指结点后插入一个新结点的时间复杂度是_O(1)_;在给定值为x的结点后插入一个新结点的时间复杂度是O(n) 。