宁波大学数据结构试题
三、简答题:(50 分)
1、 已知二叉树 T 如右所示: (10 分)
(7) .判定一个循环队列 QU(最多元素为 m0)为满队列的条件是 A.QU->front==QU->rear C.QU->front==(QU->rear+1)%m0 B.QU->front!==QU->rear
D.QU->front!==(QU->rear+1)%m0
答案写在答题纸上
一、单选题:(每小题 2 分,10 小题,共 20 分) (1)一个向量第一个元素的存储地址是 100,每个元素的长度为 2,则第 10 个元素的地址是 _____________。 A、100 B、108 C、110 D、118
(9)、设计一个判别表达式中左右括号是否配对的算法,采用________数据结构最佳。 A.线性表的顺序存储结构 B. 队列 C. 线性表的链式存储结构 D. 栈 (10)、在单链表指针为 p 的结点之后插入指针为 s 的结点,正确的操作是________。 A.p->next=s;s->next=p->next; B. s->next=p->next;p->next=s; C.p->next=s;p->next=s->next; D. p->next=s->next;p->next=s;
宁波大学
课号:
注 意 事 项:
学年 《数据结构与算法》上机测试题
课名:数据结构与算法
学号:______________姓名:______________ 阅卷教师:__________成绩:_______________
1. 考试时间: 3 小时 2. 题目完成后以本人“学号”为目录名存放在本机的 D 盘上, 例如 “D:\074100101\” 。 3. 请勿随意重启或关闭机器! 4. 请在以下题目中任选一题作答
(2) 一个数组 a[10], 指针 p, 如果 p 指向 a,那么 *(p+1)+2 是________ A、a[3] B、a[5] C、a[2]+1 D、a[1]+2
二、填空题(每空 2 分, 共 26 分)
1. 分析下面算法(程序段) ,给出最大语句频度 { for (i=1; i<=n; i++) for (j=1; j<=i ; j++) cout<<i+j ; } ,该算法的时间复杂度是__ __。
考题一
如果将“大顶堆”的定义扩展为如下完全三叉树: (1)空树为堆; (2)根结点的值不小于所有 子树根的值,且所有子树均为堆。 要求用 C/C++编程实现采用这种三阶堆的堆排序算法。
考题二
姓名
利用静态三元组表示稀疏矩阵, 用 C/C++编程实现两个稀疏矩阵的相加运算。 输入包括两个稀 疏矩阵的大小、非零元素个数、元素值,输出为两个矩阵的和。
E
F
姓名
7 4 2 5
8
9
2
(6)假设用于通信的电文仅由 6 个字符组成,其频率分别为:11,9,13,15,29,23
为这 6 个字符设计哈夫曼编码,要求给出相应的哈夫曼树。 (7 分) 试
四、算法设计题(15 分)
1. 在一个带头结点的单链表中,查找值为 X 的结点。如果找到了,删除该结点;否则, 输出“NO! ” 。 (5 分)
(5)上图所示二叉树的前序遍历结果是_________。 A 、abcdef C、 dbaecf B、 abdcef D、 dbefca
(6).推入一个队列的数字序列是 2,1,3,4,5, 那么队列的输出数字序列是_________。 A、1,2,3,4,5; C、 1,2,4,3,5 ; B、 2,1,3,4,5; D、 2,4,3,5,1 ; 。
(2) .画出 T 对应的森林。 (4 分) 2.简述以下算法的功能(5 分) 。 Status A(LinkedList L) { //L 是无表头结点的单链表 if ( L&&->next ) { Q=L; L=L->next; P=L; While ( P->next ) P=P->next; P->next=Q; Q->next=NULL; } return OK; } //A 3.简述以下算法的功能(5 分) 。 status algo2 (Stack S,int e) { Stack T; int d; InitStack (T); while ( !StackEmpty (S) ) { Pop ( S,d); if (d!=e) Push (T,d ); } while ( !StackEmpty (S) ) { Pop ( S,d); Push ( S,d); } } 4.设给定权集 w ={2,3,4,7,8,9},试构造关于 w 的一棵哈夫曼树,并求其加权路径长 度 WPL。 (10 分) 5.已知一个单链表 L, 函数 converse 倒置链表的结点.请在空白处正确填写代码。(10 分) Struct SLNode { DateType date; ——————; };
二、填空题(每题 1 分,共 10 分)
1、在数据结构中,从逻辑上可以把数据结构分成___________ 和 2、在一个单链表中删除 p 所指结点时,应执行以下操作: (1)q=p->next; (2)p->data=p->next->data; (3)p->next=_________________; (4)_________________________; 3、一个 k 层的完全二叉树最多有_______个结点,最少有_______个结点。 ___________。
学号
Head
9
7
16
9
5 ^
第 2 页 共 2 页
宁波大学
课号:
学年 第
学期期中考试卷(2)
课名:数据结构与算法
答案写在答题纸上
学号:______________姓名:______________ 阅卷教师:__________成绩:_______________
(9) .一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足 _______。 A. 所有的结点均无左孩子 C. 只有一个叶子结点 B. 所有的结点均无右孩子 D. 是任意一棵二叉树
(20,54,69,84,71,30,78,25,93,41,7,76)
2. 写一算法,统计二叉树的结点的总个数。 提示:主要算法采用递归算法(6 分) ;要求写出与之配套的主调函数(4 分) 。
A B
D C
(5)下列函数是二叉排序树的什么算法?如果 K 值为 5,针对下图所示二叉树,运行下列算
法,输出是什么?比较几次得到结果?(4 分) Void Bstree::Search( KeyType K) { int flag = 0; BstNode *q=root, *p = NULL; while((q!=NULL)&&(flag==0)) { if(q->key==K) flag = 1; else if ( K<q->key) { p = q; q = q->lch; } else { p = q; q = q->rch; } } if(flag == 0) cout<<"\n 查找失败,无此结点!\n"; else cout<<"\n 查找成功,找到:"<<q->key<<endl; }
学号
该二叉查找树的嵌套括号表示结构为:B(A,D(C,E) ) 。
第 1 页 共 1 页
宁波大学
课号:
学年 第
学期期中考试卷(1)
课名:数据结构与算法
学号:______________姓名:______________ 阅卷教师:__________成绩:_______________
比较________个结点。 A. n B. n/2 C. (n–1 ) / 2 D. (n+1) /2
学号:______________姓名:______________ 阅卷教师:__________成绩:_______________
_______; p=p->next; ________; head->next=q; } } 6、已知关键字值序列(53, 27, 58,36,22,42,80, 77, 72,25) 。 (共 12 分,每小题 6 分) (1) .关键字值序列是否为堆?若不是则将它调整为小顶堆; (2) .按上述关键字值次序构造一棵初始状态为空的二叉排序树;
查找。 进行,删除操作在 进行。
(6)下图是一个二叉树 后序遍历的结果是 ________。 A、 C、 abcdef dbaecf B、 cfabde D、 cbfade
三、简答题:(39 分) (1) 一颗二叉树,如果前序遍历的结果是 1 2 3 4 5 6, 中序遍历的结果是 3 2 4 6 5 1. 请画出这颗二叉树. (7 分) (2):请用 Prim 算法画出下图的最小生成树的过程. (7 分)
课名:数据结构与算法
学号:______________姓名:______________ 阅卷教师:__________成绩:_______________
(3)请根据序列{100 28 6 72 130 54 180 110 138}画出二叉查找树. 如果删除元素 28,那么二叉树又是如何? (8 分) (4)什么是 B-树? 有何特点? 就下列关键字序列,建立一棵 5 阶 B-树。(6 分)
姓名
(4)下图二叉树的中序遍历结果是______。