资源预览内容
第1页 / 共55页
第2页 / 共55页
第3页 / 共55页
第4页 / 共55页
第5页 / 共55页
第6页 / 共55页
第7页 / 共55页
第8页 / 共55页
第9页 / 共55页
第10页 / 共55页
亲,该文档总共55页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第1章 绪论习题1简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。2试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。3简述逻辑结构的四种基本关系并画出它们的关系图。4存储结构由哪两种基本的存储方法实现?5选择题(1)在数据结构中,从逻辑上可以把数据结构分成( )。A动态结构和静态结构 B紧凑结构和非紧凑结构C线性结构和非线性结构 D内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的( )。A存储结构 B存储实现C逻辑结构 D运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。 A数据具有同一特点B不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C每个数据元素都一样D数据元素所包含的数据项的个数要相等(4)以下说法正确的是( )。A数据元素是数据的最小单位B数据项是数据的基本单位C数据结构是带有结构的各数据项的集合D一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是( )。A顺序队列 B. 链表 C. 有序表 D. 链栈(6)以下数据结构中,( )是非线性数据结构A树 B字符串 C队 D栈6试分析下面各程序段的时间复杂度。(1)x=90; y=100;while(y0)if(x100) x=x-10;y-;else x+;(2)for (i=0; in; i+)for (j=0; jm; j+)aij=0;(3)s=0; for i=0; in; i+)for(j=0; jn; j+) s+=Bij;sum=s;(4)i=1; while(i=n) i=i*3;(5)x=0;for(i=1; in; i+) for (j=1; j1y=0;while(x(y+1)* (y+1) y+;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x+共执行了n-1+n-2+1= n(n-1)/2,所以执行时间为O(n2)(6)O()第2章 线性表1选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。A110 B108 C100 D120(2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( )。A访问第i个结点(1in)和求第i个结点的直接前驱(2in) B在第i个结点后插入一个新结点(1in)C删除第i个结点(1in)D将n个结点从小到大排序(3) 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动 的元素个数为( )。A8 B63.5 C63 D7(4)链接存储的存储结构所占存储空间( )。A分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针B只有一部分,存放结点值C只有一部分,存储表示结点间关系的指针D分两部分,一部分存放结点值,另一部分存放结点所占单元数(5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( )。A必须是连续的 B部分地址必须是连续的C一定是不连续的 D连续或不连续都可以(6)线性表在( )情况下适用于使用链式结构实现。A需经常修改中的结点值 需不断对进行删除插入 C中含有大量的结点 中结点结构复杂(7)单链表的存储密度( )。A大于1 B等于1 C小于1 D不能确定(8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是( )。An B2n-1 C2n Dn-1(9)在一个长度为n的顺序表中,在第i个元素(1in+1)之前插入一个新元素时须向后移动( )个元素。An-i Bn-i+1 Cn-i-1 Di(10) 线性表L=(a1,a2,an),下列说法正确的是( )。A每个元素都有一个直接前驱和一个直接后继B线性表中至少有一个元素C表中诸元素的排列必须是由小到大或由大到小D除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。(11) 若指定有n个元素的向量,则建立一个有序单链表的时间复杂性的量级是( )。AO(1) BO(n) CO(n2) DO(nlog2n)(12) 以下说法错误的是( )。A求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低B顺序存储的线性表可以随机存取C由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活D线性表的链式存储结构优于顺序存储结构(13) 在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( )。As-next=p+1; p-next=s;B(*p).next=s; (*s).next=(*p).next;Cs-next=p-next; p-next=s-next;Ds-next=p-next; p-next=s; (14) 在双向链表存储结构中,删除p所指的结点时须修改指针( )。Ap-next-prior=p-prior; p-prior-next=p-next;Bp-next=p-next-next; p-next-prior=p;Cp-prior-next=p; p-prior=p-prior-prior;Dp-prior=p-next-next; p-next=p-prior-prior;(15) 在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是( )。Ap-next=q; q-prior=p; p-next-prior=q; q-next=q;Bp-next=q; p-next-prior=q; q-prior=p; q-next=p-next;Cq-prior=p; q-next=p-next; p-next-prior=q; p-next=q;Dq-prior=p; q-next=p-next; p-next=q; p-next-prior=q;2算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc) pa=La-next; pb=Lb-next; Lc=pc=La; /用La的头结点作为Lc的头结点 while(pa & pb) if(pa-datadata) pc-next=pa;pc=pa;pa=pa-next; else if(pa-datapb-data) pc-next=pb; pc=pb; pb=pb-next; else / 相等时取La的元素,删除Lb的元素 pc-next=pa;pc=pa;pa=pa-next; q=pb-next;delete pb ;pb =q; pc-next=pa?pa:pb; /插入剩余段 delete Lb; /释放Lb的头结点 (2)将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。void union(LinkList& La, LinkList& Lb, LinkList& Lc, ) pa = La-next; pb = Lb-next; / 初始化 Lc=pc=La; /用La的头结点作为Lc的头结点 Lc-next = NULL; while ( pa | pb ) if ( !pa ) q = pb; pb = pb-next; else if ( !pb ) q = pa; pa = pa-next; else if (pa-data data ) q = pa; pa = pa-next; else q = pb; pb = pb-next; q-next = Lc-next; Lc-next = q; / 插入 delete Lb; /释放Lb的头结点 (3)已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B的交集,并存放于A链表中。void Mix(LinkList& La, LinkList& Lb, LinkList& Lc, ) pa=la-next;pb=lb-next;设工作指针pa和pb;Lc=pc=La; /用La的头结点作为Lc的头结点while(pa&pb) if(pa-data=pb-data)交集并入结果表中。 pc-next=pa;pc=pa;pa=pa-next; u=pb;pb=pb-next; delete u; else if(pa-datadata) u=pa;pa=pa-next; delete u;else u=pb; pb=pb-next; delete u;while(pa) u=pa; pa=pa-next; delete u; 释放结点空间while(pb) u=pb; pb=pb-next; delete u;释放结点空间pc-next=null;置链表尾标记。delete Lb; 注: 本算法中也可对B表不作释放空间的处理(4)已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B 的差集(即仅由在A中出现而不在B
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号