内容发布更新时间 : 2024/12/22 9:47:17星期一 下面是文章的全部内容请认真阅读。
数据结构练习题 习题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 8. 分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是____。 for(i=0;i A[i][j]=0; 9. 分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是____。 s=0; for (i=0;i sum=s; 10. 分析下面算法(程序段)给出最大语句频度,该算法的时间复杂度是____。 i=s=0; while (s s+=i; //s=s+i } 11. 分析下面算法(程序段)给出最大语句频度,该算法的时间复杂度是____。 i=1; while (i<=n) i=i*2; 1.3 算法设计题 1. 试写一算法,自大到小依次输出顺序读入的三个数X,Y和Z的值. 2. 试写一算法,求出n个数据中的最大值。写出最大语句频度,该算法的时间复杂度。 习题2 线性表 2.1 单项选择题 1. 一个数组(即一批地址连续的存储单元)第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是__B__。 A. 110 B. 108 C. 100 D. 120 2. 线性表的顺序存储结构是一种__B_的存储结构,而链式存储结构是一种__C_的存储结构。 A.随机存取 B.索引存取 C.顺序存取 D.散列存取 3. 线性表的逻辑顺序与存储顺序总是一致的,这种说法__B_。 A. 正确 B. 不正确 4. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址__D_。 A. 必须是连续的 B. 部分地址必须是连续的 C. 一定是不连续的 D. 连续或不连续都可以 5. 在以下的叙述中,正确的是__C_。 A. 线性表的顺序存储结构优于链表存储结构 B. 线性表的顺序存储结构适用于频繁插入/删除数据元素的情况 C. 线性表的链表存储结构适用于频繁插入/删除数据元素的情况 D. 线性表的链表存储结构优于顺序存储结构 6. 每种数据结构都具备三个基本运算:插入、删除和查找,这种说法__A_。 A. 正确 B. 不正确 7. 不带头结点的单链表head为空的判定条件是_A__。 A. head= =NULL B. head.getNext()= =NULL C. head.getNext()= =head D. head!=NULL 8. 带头结点的单链表head为空的判定条件是___B_。 A. head= =NULL B. head.getNext()= =NULL C. head.getNext()= =head D. head!=NULL 9. 非空的循环单链表head的尾结点(由p所指向)满足__C__。 A. p.getNext()= =NULL B. p= =NULL C. p.getNext()= =head D. p= =head *10. 在双向循环链表的p所指结点之后插入s所指结点的操作是__D__。 A. p.setRight(s); s.setLeft(p); p.getRight().setLeft(s); s.setRight(p.getRight()); B. p.setRight(s); p.getRight().setLeft(s); s.setLeft(p); s.setRight(p.getRight()); C. s.setLeft(p); s.setRight(p.getRight()); p.setRight(s); p.getRight().setLeft(s); D. s.setLeft(p); s.setRight(p.getRight()); p.getRight().setLeft(s); p.setRight(s); 11. 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行___B_。 A. s.setNext(p.getNext()); p.setNext(s); B. p.setNext(s.getNext()); s.setNext(p); C. q.setNext(s); s.setNext(p); D. p.setNext(s); s.setNext(q); 12. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行___B_。 A. s.setNext(p);p.setNext(s); B.s.setNext(p.getNext()); p.setNext(s); C. s.setNext(p.getNext()); p=s; D. p.setNext(s); s.setNext(p); 13.在一个单链表中,若删除p所指结点的后续结点,则执行__A__。 A. p.setNext(p.getNext().getNext()); B. p= p.getNext(); p.setNext(p.getNext().getNext()); C. p.setNext(p.getNext()); D. p= p.getNext().getNext(); 14. 从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较___D_个结点。 A. n B. n/2 C. (n-1)/2 D. (n+1)/2 15.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是_B_ __。 A. O(1)B.O(n) C. O (n2) D. O (nlog2n) 16. 给定有n个元素的数组,建立一个有序单链表的时间复杂度是__C __。 A. O(1)) B. O(n) C. O (n2) D. O (n*log2n) 2.2 填空题(将正确的答案填在相应的空中) 1. 单链表可以做_线性结表___的链接存储表示。 2. 在双链表中,每个结点有两个指针域,一个指向____前驱结点__,另一个指向_后期结点____。 3. 在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作: q=head; while (q.getNext()!=p) q=q.getNext(); s= newNode(e); q.setNext(); //填空 s.setNext();//填空 4. 在一个单链表中删除p所指结点的后继结点时,应执行以下操作: q= p.getNext(); p.setNext(_ ___); //填空 q=null; 5. 在一个单链表中p所指结点之后插入一个s所指结点时,应执行s.setNext(__ __);和p.setNext(____);的操作。 6. 对于一个具有n个结点的单链表,在已知p所指结点后插入一个新结点的时间复杂度是__ __;在给定值为x的结点后插入一个新结点的时间复杂度是__ __。 2.3 算法设计题: 1.设顺序表va中的数据元数递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。 2.试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1, a2,…. an)逆置为(an, an-1,…., a1)。 3. 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一算法,删除表中所有大于x且小于y的元素(若表中存在这样的元素)同时释放被删除结点空间。 4. 试写一算法,实现单链表的就地逆置(要求在原链表上进行)。 习题3 栈和队列 3.1 单项选择题 1.一个栈的入栈序列a,b,c,d,e,则栈的不可能的输出序列是__C__。 A. edcba B. decba C. dceab D. abcde 2. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为_C__。 A. i B. n=i C. n-i+1 D.不确定 3. 栈结构通常采用的两种存储结构是_A___。 A. 顺序存储结构和链式存储结构 B. 散列方式和索引方式 C. 链表存储结构和数组 D. 线性存储结构和非线性存储结构 4. 判定一个顺序栈ST(最多元素为m0)为空的条件是__B__。 A. top!=0 B. top= =-1C. top !=m0 D. top= =m0-1 5.判定一个顺序栈ST(最多元素为m0)为栈满的条件是___D_。 A. top!=0 B. top= =0C. top!=m0 D. top= =m0-1 6. 栈的特点是___B_,队列的特点是_A___。 A. 先进先出 B. 先进后出 7. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行_C___。 (不带空的头结点) A. HS.getNext()=s; B. s.getNext()= HS.getNext(); HS.getNext()=s; C. s.getNext()= HS; HS=s; D. s.getNext()= HS; HS= HS.getNext(); 8.从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行_B___。(不带空的头结点) A. x=HS; HS= HS.getNext(); B. x=HS.getData(); C.HS= HS.getNext(); x=HS.getData(); D. x=HS.getData(); HS= HS.getNext(); 9. 一个队列的数据入列序列是1,2,3,4,则队列的出队时输出序列是_C___。 A. 4,3,2,1 B. 1,2,3,4 C. 1,4,3,2 D. 3,2,4,1 10. 判定一个循环队列QU(最多元素为m0)为空的条件是_C___。 A. rear - front= =m0 B. rear-front-1= =m0 C. front= = rear D. front= = rear+1 11. 判定一个循环队列QU(最多元素为m0, m0= =Maxsize-1)为满队列的条件是_A___。 A. ((rear- front)+Maxsize)% Maxsize = =m0 B. rear-front-1= =m0 C. front= =rear D. front= = rear+1 12. 循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是___A_。 A. (rear-front+m)%m B. rear-front+1 C. rear-front-1 D. rear-front 13. 栈和队列的共同点是__C__。 A. 都是先进后出 B. 都是先进先出 C. 只允许在端点处插入和删除元素 D. 没有共同点 3.2 填空题(将正确的答案填在相应的空中) 1. 顺序表、栈和队列都是____结构,可以在顺序表的____位置插入和删除元素;对于栈只能在____插入和删除元素;对于队列只能在____插入元素和____删除元素。 2. 向一个长度为n的顺序表的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动____个元素。 3. 向一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动____个元素。 8. 在具有n个单元的循环队列中,队满时共有____个元素。