收藏 分享(赏)

数据结构试题合集.doc

上传人:hwpkd79526 文档编号:9286731 上传时间:2019-07-31 格式:DOC 页数:79 大小:1.63MB
下载 相关 举报
数据结构试题合集.doc_第1页
第1页 / 共79页
数据结构试题合集.doc_第2页
第2页 / 共79页
数据结构试题合集.doc_第3页
第3页 / 共79页
数据结构试题合集.doc_第4页
第4页 / 共79页
数据结构试题合集.doc_第5页
第5页 / 共79页
点击查看更多>>
资源描述

1、 数据结构试题(B)姓名_ 学号_ 班级_ 分数_一 选择填空(每空 1 分,共 20 分) 1 设有 100 个结点,用二分方法查找时,最大的比较次数是_。(A) 25 (B) 50 (C) 10 (D) 72 若线性表最常用的操作是存取第 i 个元素及其前趋的值,则采用_存储方式节省时间。(A)单链表 (B)双向链表 (C)单循环链表 (D)顺序表 3 已知数据表 A 中每个元素距其最终位置不远,则采用_排序算法最省时间。(A)堆排序 (B)插入排序 (C)直接选择排序 (D)快速排序 4 n 个顶点的无向图的的邻接表中结点总数最多有_个。(A) 2n (B) n (C) n/2 (D)

2、n(n-1) 5 设连通图 G 的顶点数为 n,则 G 的生成树的边数为_。(A) n-1 (B) n (C) 2n (D) 2n-1 6 在建立邻接表或逆邻接表时,若输入的顶点信息即为顶点的编号,则建立图的算法的时间复杂度为_。(A) O(n+e) (B) O(n2) (C) O(ne) (D) O(n3) 7 快速排序算法在最好情况下的时间复杂度为_。(A) O(n) (B) O(n2) (C) O(nlog2n) (D) O(log2n)8 以知一棵二叉树的前序和中序序列分别为 ABDEGCFH 和 DBGEACHF 则该二叉树的后序序列为 _。(A) GEDHFBCA (B) DGEB

3、HFCA (C) ABCDEFGH (D) ACBFEDHG 9 线索二叉树中指向某结点的指针为 D,该结点没有左孩子的条件是_。(A) D-Lchild=NULL (B) D-Rchild=NULL(C) D-Ltag=0 (D) D-Ltag=110 下列算法中,某一轮结束后未必能选出一个元素放在其最终位置上 的是_。(A)堆排序 (B)冒泡排序 (C)直接插入排序 (D)快速排序 11 将新元素插入到链式队列中时,新元素只能插入到_。A 链头 B 链尾 C 链中 D 第 i 个位置 (i=1 且 i=0)个 _的有限序列。A 字符 B 表元素 C 数据元素 D 数据项15 从逻辑上,可以

4、将数据结构分为_两类。A 动态表和静态表 B 顺序结构和链式结构C 线性结构和非线性结构 D 动态结构和静态结构16 设无向图的顶点个数为 n,则该图最多有_条边。A n-1 B n(n-1)/2 C n(n+1)/2 D n17 稀疏矩阵的压缩存储可以采用_方式。A 三元组表 B 哈希表 C 双向链表 D 邻接表18 深度为 5 的满二叉树有_个结点。A 32 B 15 C 31 D 16 19 二分(折半)查找有序表(2,3,5,10,12,20,30,32,40,45 ),若查找元素 30,则被比较的依次 为_。A 20,32,30 B 12,32,20,30 C 12,32,30 D

5、32,40,4520 算法应具的特点不包括_。A 确定性 B 可行性 C 一一对应性 D 有输入、输出二 问题求解(每小题 6 分,共 24 分)1 给定下列网络 G:1)求最小生成树,画出逻辑图;2)画出 G 的邻接矩阵和邻接表。2 已知下图为一棵二叉排序数,各结点的值依次为 19,请标出各结点的值。 3 如何对有向图中的顶点号重新安排可使得该图的邻接矩阵中所有的 1 都集中到对角线以上?试举一例加以说明。4 找出所有二叉树,其结点在下述两种次序之下,恰好都以同样的顺序出现:a) 前序和中序;b) 前序和后序三 简述下述算法的功能(每小题 6 分,共 18 分)(1)void a1 ( st

6、ack n = 0 ;while ( ! stackempty(s) ) n+ ;pop ( s, an) ;for ( i = 1; inext) q=head ;head=head-hext;p=head ;while (p-next) p=p-next ;p-next=q ;q-next=NULL ;四、算法设计(每题 19 分,共 38 分)1 设 Hash 函数为 H(K)=K%14,K 为关键字,%为取模运算,用线性探测再散列处理冲突,在地址范围015 的散列区中,试用关键字序列(19,27,26,28,29,40,64,21,15,12,42,41)构造 Hash 表,要求:(1

7、)画出该 Hash 表的存储结构图(2)若查找关键字 40,必须依次与表中哪些关键字比较大小?(3)设每个关键字查找概率相等,试求查找成功时的 ASL。2 试设计一个非递归算法把二叉树的叶结点按从左到右的顺序连成一个单链表,二叉树用二叉链表存储,链接时叶子结点的 rchild 域用做单链表的指针。 算法所涉及的结构如下:typedef struct bnodeelementype info ;struct bnode *lchild, * rchild ; bnode, bitree ; / 结点类型和指向二叉树的指针的类型typedef struct seqstack bitree data

8、 maxsize ; / 栈的最大容量为 maxsize int top ; seqstack ; / 定义顺序栈类型参 考 答 案一 选择填空 1D 2D 3B 4D 5A 6A 7C 8B 9D 10C11B 12C 13D 14C 15C 16B 17A 18C 19B 20C二 问题求解 A B C E FA 0 12 0 4 0B 12 0 20 8 9C 0 20 0 0 0E 4 8 0 0 6F 0 9 0 6 0 23 使得有向图中每条边始顶点的编号小于终顶点的编号。4 前序和中序 空树和具有所有的左链为空的二叉树。前序和后序 具有 0 个或 1 个结点的二叉树。51 942

9、3678A B CE F20468000100110T 1211 13三 简述下述算法的功能1 借用数组 a 将栈中的元素逆置2 借用栈 t 删除栈 s 中所有值为 e 的元素3 当单链表的长度大于等于 2 时,删除表中第一个 结点并将它插入到表尾。四、1 define max 12000typedef struct node int data;int next;node, slinklistmax;hash (slinklist HT, int r)int i, j, k, n;for (i=0; ilchild = NULL; p-rchild = NULL;h_leaf = p;if (

10、t) / 当二叉树非空时 s.top = 0; s.datas.top = t;/ 初始化,根结点进栈while (s.top !=0) /当栈非空时重复执行 t = s.data s.top; s.top -; / 退栈if (t-lchild = NULL p = p-rchild; / 指针 p 向后流动else / 非叶子结点继续扫描 if (t-lchild != NULL) / 若左子树非空,则进栈 s.top+; s.data s.top = t-lchild;if (t-rchild != NULL) / 若右子树非空,则进栈 s.top +; s.data s.top = t

11、-rchild; 一选择题(每个 2 分,共 20 分)1 下列关于数据结构的叙述中,正确的是 ( )A)数组是同类型值的集合B)递归算法的程序结构比迭代算法的程序结构更为精炼C)树是一种线性结构D)用一维数组存储二叉树,总是以先序遍历的顺序存储各结点2 用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是( )A)94、32、40、90、80、46、21、69 B)32、40、21、46、69、94、90、80C)21、32、46、40、80、69、90、94 D)90、69、80、46、21、32、94、403 如果要求一个线性表既能较快地查找,又能适应动态变化的要求

12、,则可采用的方法是( )A)分块法 B)顺序法 C)二叉排序树 D)索引表查找4 以下关于广义表的叙述中,正确的是 ( )A) 广义表是 0 个或多个单元素或子表组成的有限序列B) 广义表至少有一个元素是子表C) 广义表不可以是自身的子表D) 广义表不能为空表5 在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值 25,所需的关键码比较次数为A) 2 B) 3 C) 4 D) 56 高度为 d(d0)的二叉树至少有_个结点( )A) d+1 B) 2dC).d D).d-17 下面有关散列表的叙述中,正确的是( )A) 散列查找的时间与规模 n 成正

13、比 B) 不管是开放地址法还是拉链法,查找时间都与装填因子 有关。C) 开放地址法存在堆积现象,而拉链法不存在堆积现象。 D) 拉链法中装填因子 必须小于。8对包含 n 个关键码的散列表进行检索,平均检索长度是( )A. O( log2n )B. O( n )C. O(n log2n )D. 不直接依赖于 n9现有某个堆栈 S,按顺序 ABCD 进栈,则出栈序列中不可能存在的是( )A)DCBA B) BACD C)CABD D)BADC10如果一棵二叉树结点的前序序列是 A、B、C,后序序列是 C、B、A, 则该二叉树结点 的对称序序列( )A) 必为 A、B、C B) 必为 A、C、BC)

14、 必为 B、C、A D) 不能确定二填空题(每格 1 分,共 20 分)1. 结点在物理上的存储结构有四种,分别为_、_、_和_。2. 数据结构是指数据的组织形式,它一般包括三个方面,它们是_、_和_。3. 当待排序的序列已经或基本有序时,用快速排序方法对它进行排序,所需要的的时间复杂度为_,快速排序是_(稳定/不稳定)。4. 有一个链表,头结点为 head,链表上某个结点的指针为 p,现在已建立一个新结点 q,把 q 插入到 p 之后的二句语句为代码为_和_。5. 高度为 4 的二叉树中,结点数最多为_,最少为_。6. 由 n 个终端结点生成的一颗 Huffman 树,度为的结点有_个。7.

15、 假定一个图具有 n 个顶点和 e 条边,则采用邻接矩阵、邻接表,其应的空间复杂度分别为_和_。8. 某个循环队列,其最大个数为 m,其队首为 front,其队尾为 rear,则队列中元素的个数为_。9. 某个顺序表,表中元素的个数为 n 个,现把某个元素插入到表中某个位置 i,则最好情况要移动_(次),最坏情况要移动_次,平均移动次为_次。三分析题(每题 5 分,共 30 分)1.下面的算法是求稀疏矩阵的转置矩阵,采用三元组表示,a 表示原矩阵,b 是它的转置后稀疏矩阵的三元组表示。请完成该算法。(5 分)/下面是算法所需要的数据类型#define MaxSize 10000 /由用户定义t

16、ypedef int DataType; /由用户定义typedef struct /三元组int i,j;/非零元的行、列号DataType v; /非零元的值TriTupleNode;typedef struct /三元组表TriTupleNode dataMaxSize; /三元组表空间int m,n,t; /矩阵的行数、列数及非零元个数TriTupleTable; /下面需要完成的算法void TransMatrix(TriTupleTable *b,TriTupleTable *a) /*a,*b 是矩阵 A、B 的三元组表表示,求 A 转置为 B /TransMatrix2. 现有

17、一个字符序列需要编码,该序列只含有 a,b,c,d,e,f 六个字符,其出现的机率分别为 0.2,0.45,0.1,0.15,0.06,0.04,请用 Huffman 方法对它们进行编码,画出 Huffman 树,并求出其最短路径长度。并写出每个字符的二进制编码。要求,左子树的权值小于右子树,编码时,左子树取 0 ,右子树取。(10 分)3. 某个数组的初始状态为21,83,25,54,96,32,75,83,42是不是一个小大顶堆?如不是,则建立它的初始堆,用二叉树形表示,采用大顶堆。(分)4. 假设下面程序里的栈 S 已经初始化,经过下面这段程序处理后,屏幕上输出结果。(假设栈已经初始,且

18、栈最多可以存放100 个元素)(5 分)void Demo(SeqStack *S)int i;int x;n=0;for(i=1;irear QU-front = = m0 QU-rear QU-front 1= = m0 QU-front = = QU-rear QU-front = = QU-rear+1( )6. 链表是一种采用 存储结构存储的线性表;(A)顺序 (B)链式 (C)星式 (D)网状( )7. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址:(A)必须是连续的 (B)部分地址必须是连续的(C)一定是不连续的 (D)连续或不连续都可以( )8 线性表在 情况下适用

19、于使用链式结构实现。()需经常修改中的结点值 ()需不断对进行删除插入 ()中含有大量的结点 ()中结点结构复杂( )9. 若已知一个栈的入栈序列是 1,2,3,n,其输出序列为 p1,p2,p3,pn,若 p1=n,则 pi 为i n=i n-i+1 不确定四、简答题(10 分)1、已知如图所示的有向图,请给出该图的:(1) 每个顶点的入/出度;(2) 邻接矩阵;(3) 邻接表;(4) 逆邻接表。2、线性表具有两种存储方式,即顺序方式和链接方式。现有一个具有五个元素的线性表L=23,17,47 ,05,31,若它以链接方式存储在下列 100119 号地址空间中,每个结点由数据(占 2 个字节

20、)和指针(占 2 个字节)组成,如下所示:05 U 17 X 23 V 31 Y 47 Z 100 120其中指针 X,Y,Z 的值分别为多少?该线性表的首结点起始地址为多少?末结点的起始地址为多少?五、写出下列程序段的输出结果(栈的元素类型 SElem Type 为 char)。(1)void main( )Stack S;char x,y;InitStack(S);x=c;y=k;push(S,x); push(S,a); push(S,y);顶点 1 2 3 4 5 6入度出度pop(S,x); push(S,t); push(S,x);pop(S,x); push(S,s);while

21、(!StackEmpty(S) pop(S,y);printf(y); ;printf(x);结果:_(2)写出下列程序段的输出结果(队列中的元素类型 QElem Type 为 char)。void main( )Queue Q; Init Queue (Q);Char x=e; y=c;EnQueue (Q,h); EnQueue (Q,r); EnQueue (Q,y);DeQueue (Q,x); EnQueue (Q,x); DeQueue (Q,x); EnQueue (Q,a); while(!QueueEmpty(Q) DeQueue (Q,y);printf(y); ;Prin

22、tf(x);结果:_6.假设用于通信的电文仅由 8 个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这 8 个字母设计哈夫曼编码。使用 07 的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。五、算法设计(在下列算法的横线内填上适当的语句或表达式。)1、直接选择排序void selectsort (int R ) / 按递增序对 R 0 Rn-1 进行直接选择排序 int i, j, k, temp ;for (i=0; irear QU-front = = m0 QU-rear QU-front

23、1= = m0 QU-front = = QU-rear QU-front = = QU-rear+1( B )6. 链表是一种采用 存储结构存储的线性表;(A)顺序 (B)链式 (C)星式 (D)网状( D )7. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址:(A)必须是连续的 (B)部分地址必须是连续的(C)一定是不连续的 (D)连续或不连续都可以( B )8 线性表在 情况下适用于使用链式结构实现。()需经常修改中的结点值 ()需不断对进行删除插入 ()中含有大量的结点 ()中结点结构复杂( C )9. 若已知一个栈的入栈序列是 1,2,3,n,其输出序列为 p1,p2,p

24、3,pn,若 p1=n,则 pi 为i n=i n-i+1 不确定四、1、 略2、 答:X= 116 Y= 0 Z= 100 首址= 108 末址= 112 五、1、 答:输出为“stack”。2、 答:输出为“char”。六、解:方案 1;哈夫曼编码先将概率放大 100 倍,以方便构造哈夫曼树。w=7,19,2,6,32,3,21,10,按哈夫曼规则:【(2,3),6, (7,10)】, 19, 21, 32(100)(40) (60)19 21 32 (28)(17) (11)7 10 6 (5)2 3方案比较:方案 1 的 WPL2(0.19+0.32+0.21)+4(0.07+0.06

25、+0.10)+5(0.02+0.03)=1.44+0.92+0.25=2.61方案 2 的 WPL3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3结论:哈夫曼编码优于等长二进制编码六、阅读分析题(10 分)指出以下算法中的错误和低效(即费时)之处,并将它改写为一个既正确又高效的算法。Status DeleteK(SqList /参数不合法elsefor(count = 1; count =i+1; j-) a.elemj-1 = a.elemj;a.length - -; return OK; / DeleteK注:上题涉及的类型定义如下:# defin

26、e LIST INIT SIZE 100# define LISTINCREMENT 10typedef struct Elem Type *elem; /存储空间基址Int length; /当前长度Int listsize; /当前分配的存储容量SqList;0 1 0 1 0 119 21 32 0 10 1 0 17 10 6 0 12 3字母编号 对应编码 出现频率1 000 0.072 001 0.193 010 0.024 011 0.065 100 0.326 101 0.037 110 0.218 111 0.10字母编号 对应编码 出现频率1 1100 0.072 00 0

27、.193 11110 0.024 1110 0.065 10 0.326 11111 0.037 01 0.218 1101 0.10答:错误有两处: 参数不合法的判别条件不完整。例如表长为 10,若从第一位置(i=1)删除 10 个元素(k=10 ),要求合理但会被判为非法。合法的入口参数条件为(0 a.length ) return INFEASIBLE改为:if ( !(0=i+1; j-) a.elemj-1 = a.elemj;改为 for (j=i+1; j = a.length; j+) a.elemj-1 = a.elemj;一、填空题(每空 1 分,共 15 分)1. 向量、

28、栈和队列都是 结构,可以在向量的 位置插入和删除元素;对于栈只能在 插入和删除元素;对于队列只能在 插入和 删除元素。2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为 。不允许插入和删除运算的一端称为 。3. 数据结构是一门研究非数值计算的程序设计问题中计算机的 以及它们之间的 和运算等的学科。4. 在顺序表中插入或删除一个元素,需要平均移动 元素,具体移动的元素个数与 有关。5. 在具有 n 个单元的循环队列中,队满时共有 个元素。6. 假设在有序线性表 a20上进行折半查找,则比较一次查找成功的结点数为 1;比较两次查找成功的结点数为 ;比较四次查找成功的结点数为 ;平均查找长度为

29、 。二、判断正误(判断下列概念的正确性,并作出简要的说明。)(每小题 1 分,共 10 分)( )1. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。 ( )2. 在表结构中最常用的是线性表,栈和队列不太常用。 ( )3. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。( )4. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。 ( )5.线性表的逻辑顺序与存储顺序总是一致的 ( )6. 栈和队列是一种非线性数据结构。 ( )7. 栈和队列的存储方式既可是顺序方式,也可是链接方式。 ( )8. 两个栈共享一片连续内

30、存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。 ( )9. 队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。( )10. 一个栈的输入序列是 12345,则栈的输出序列不可能是 12345。 三、单项选择题(每小题 1 分,共 20 分)( )1数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:(A)存储结构 (B)逻辑结构 (C)顺序存储结构 (D)链式存储结构( )2. 若已知一个栈的入栈序列是 1,2,3,n,其输出序列为 p1,p2,p3,pn,若 p1=n,则 pi 为i n=i n-i+1 不确定

31、( )3. 判定一个栈 ST(最多元素为 m0)为空的条件是ST-toptop=0 ST-toptop=m0( )4 设矩阵 A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组 B 1, n(n-1)/2 中,对下三角部分中任一元素 ai,j(ij), 在一维数组 B 中下标 k 的值是:i(i-1)/2+j-1 i(i-1)/2+j i(i+1)/2+j-1 i(i+1)/2+j( )5具有 n(n0)个结点的完全二叉树的深度为 。() log 2(n) () log 2(n) () log 2(n) +1 () log2(n)+1( )6. 有 8 个结点的

32、无向连通图最少有 条边。A5 B. 6 C. 7 D. 87. 数据结构反映了数据元素之间的结构关系。链表是一种 A ,它对于数据元素的插入和删除 B 。通常查找线性表数据元素的方法有 C 和 D 两种方法,其中 C 是一种只适合于顺序存储结构但 E 的方法;而 D 是一种对顺序和链式存储结构均适用的方法。 供选择的答案:A:顺序存储线性表 非顺序存储非线性表 顺序存储非线性表 非顺序存储线性表B: 不需要移动结点,不需改变结点指针 不需要移动结点,只需改变结点指针 只需移动结点,不需改变结点指针 既需移动结点,又需改变结点指针C: 顺序查找 循环查找 条件查找 二分法查找D: 顺序查找 随机

33、查找 二分法查找 分块查找E: 效率较低的线性查找 效率较低的非线性查找 效率较高的非线性查找 效率较高的线性查找答案:A B C D E 8. 散列法存储的基本思想是根据 A 来决定 B ,碰撞(冲突)指的是 C ,处理碰撞的两类主要方法是 D 。供选择的答案A,B: 存储地址 元素的符号 元素个数 关键码值 非码属性 平均检索长度 负载因子 散列表空间 C: 两个元素具有相同序号 两个元素的关键码值不同,而非码属性相同 不同关键码值对应到相同的存储地址 负载因子过大 数据元素过多D: 线性探查法和双散列函数法 建溢出区法和不建溢出区法 除余法和折叠法 拉链法和开地址法答案:A B C D

34、9. 考虑具有如下性质的二叉树:除叶子结点外,每个结点的值都大于其左子树上的一切结点的值。并小于等于其右子树上的一切结点的值。现把 9 个数 1,2,3,8,9 填入下图所示的二叉树的 9 个结点中,并使之具有上述性质。此时,n1 的值是 A ,n2 的值是 B ,n9 的值是 C 。现欲把 放入此树并使该树保持前述性质,增加的一个结点可以放在 D 或 E 。10供选择的答案AC: 1 2 3 4 5 6 7 8 9DE: n7 下面 n8 下面 n9 下面 n6 下面 n1 与 n2 之间 n2 与 n4 之间 n6 与 n9 之间 n3 与 n6 之间 答案:A B C D E 四、简答题

35、(每小题 5 分,共 25 分)1. 说明线性表、栈与队的异同点。2. 试写出如图所示的二叉树分别按先序、中序、后序遍历时得到的结点序列nnaa,1,2,1,3. 假设正读和反读都相同的字符序列为“回文”,例如,abba和abcba 是回文,abcde 和ababab则不是回文。假设一字符序列已存入计算机,请分析用线性表、堆栈和队列等方式正确输出其回文的可能性?4. 试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好?5. 给定二叉树的两种遍历序列,分别是:前序遍历序列:D,A,C,E,B,H,F,G,I;中序遍历序列:D,C,B,E,H,A,G,I,F,试画出二叉树 B,

36、并简述由任意二叉树 B 的前序遍历序列和中序遍历序列求二叉树 B 的思想方法。五、阅读理解(每小题 5 分,共 20 分)1、已知 L 是无表头结点的单链表,且 P 结点既不是首元结点,也不是尾元结点,请写出在 P 结点后插入 S 结点的核心语句序列。2、阅读下列算法,若有错,改正之。1. 写出下列程序段的输出结果(队列中的元素类型 QElem Type 为 char)。void main( )Queue Q; Init Queue (Q);Char x=e; y=c;EnQueue (Q,h); EnQueue (Q,r); EnQueue (Q,y);DeQueue (Q,x); EnQu

37、eue (Q,x); DeQueue (Q,x); EnQueue (Q,a); while(!QueueEmpty(Q) DeQueue (Q,y);printf(y); ;Printf(x);2. 简述以下算法的功能(栈和队列的元素类型均为 int)。void algo3(Queue int d;InitStack(S);while(!QueueEmpty(Q) DeQueue (Q,d); Push(S,d);while(!StackEmpty(S) Pop(S,d); EnQueue (Q,d); 六、算法设计(每小题 5 分,共 15 分。至少要写出思路)1. 写出在顺序存储结构下将

38、线性表逆转的算法,要求使用最少的附加空间。2. 编写程序,将若干整数从键盘输入,以单链表形式存储起来,然后计算单链表中结点的个数(其中指针 P 指向该链表的第一个结点)。3. 试写一个算法,判别读入的一个以为结束符的字符序列是否是 “回文”。一、填空题(每空 1 分,共 15 分)1.向量、栈和队列都是 线性 结构,可以在向量的 任何 位置插入和删除元素;对于栈只能在 栈顶 插入和删除元素;对于队列只能在 队尾 插入和 队首 删除元素。2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为 栈顶 。不允许插入和删除运算的一端称为 栈底 。3. 数据结构是一门研究非数值计算的程序设计问题中计算

39、机的 操作对象 以及它们之间的 关系 和运算等的学科。BiTree InSucc(BiTree q)/已知 q 是指向中序线索二叉树上某个结点的指针,/本函数返回指向*q 的后继的指针。r=q-rchild;if(!r-rtag)while(!r-rtag)r=r-rchild;return r;/ISucc4. 在顺序表中插入或删除一个元素,需要平均移动 表中一半元素,具体移动的元素个数与 表长和该元素在表中的位置 有关。5. 在具有 n 个单元的循环队列中,队满时共有 n-1 个元素。8. 假设在有序线性表 a20上进行折半查找,则比较一次查找成功的结点数为 1;比较两次查找成功的结点数为

40、 2 ;比较四次查找成功的结点数为 8 ;平均查找长度为 3.7 。解:显然,平均查找长度O(log 2n)toptop=0 ST-toptop=m0( B )4、 设矩阵 A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组 B 1, n(n-1)/2 中,对下三角部分中任一元素 ai,j(ij), 在一维数组 B 中下标 k 的值是:i(i-1)/2+j-1 i(i-1)/2+j i(i+1)/2+j-1 i(i+1)/2+j( C )5具有 n(n0)个结点的完全二叉树的深度为 。() log 2(n) () log 2(n) () log 2(n) +1

41、() log2(n)+1( C )6. 有 8 个结点的无向连通图最少有 条边。A5 B. 6 C. 7 D. 8 7、 答案:A B C D E 8、 答案:A B C D 9、答案:A B C D E nnaa,2,1,2,1,四、简答题(每小题 4 分,共 20 分)1.说明线性表、栈与队的异同点。刘答:相同点:都是线性结构,都是逻辑结构的概念。都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表,只是对插入、删除运算加以限制。不同点:运算规则不同,线性表为随机存取,而栈是只允许在一端进行插入、删除运算,因而是后进先出表 LIFO;队列是只允许在一端进行插入、另一端进行

42、删除运算,因而是先进先出表 FIFO。 用途不同,堆栈用于子程调用和保护现场,队列用于多道作业处理、指令寄存及其他运算等等。2. 试写出如图所示的二叉树分别按先序、中序、后序遍历时得到的结点序列。答:DLR:A B D F J G K C E H I L MLDR: B F J D G K A C H E L I MLRD:J F K G D B H L M I E C A3.假设正读和反读都相同的字符序列为“回文”,例如,abba和abcba是回文,abcde 和ababab则不是回文。假设一字符序列已存入计算机,请分析用线性表、堆栈和队列等方式正确输出其回文的可能性?答:线性表是随机存储,

43、可以实现,靠循环变量(j-)从表尾开始打印输出;堆栈是后进先出,也可以实现,靠正序入栈、逆序出栈即可;队列是先进先出,不易实现。哪种方式最好,要具体情况具体分析。若正文在机内已是顺序存储,则直接用线性表从后往前读取即可,或将堆栈栈顶开到数组末尾,然后直接用 POP 动作实现。(但堆栈是先减后压还是)若正文是单链表形式存储,则等同于队列,需开辅助空间,可以从链首开始入栈,全部压入后再依次输出。4.试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好?答: 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。优点:存储密度大(1?

44、),存储空间利用率高。缺点:插入或删除元素时不方便。链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小(next!=Q)P=P-next;(10) P=Q;(4) S-next=P-next;P-next=S;已知 P 结点,则不必“顺藤摸瓜”,直接链接即可。(4) S-next=P-next;(1) P-next=S;2、答:这是找结点后继的程序。共有 3 处错误。注:当 rtag1 时说明内装后继指针,可直接返回,第一句无错。当 rtag0 时说明内装右孩子指针,但孩子未必是后继,需要计算。中序遍历应当先左再根再右,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报