您好,欢迎来到图艺博知识网。
搜索
您的当前位置:首页南邮数据结构B期末试卷

南邮数据结构B期末试卷

来源:图艺博知识网
--

数 据 结 构B 期末试卷

二 三 四 五 六

班级 学号 姓名 得分

题号 分数 一 一、解答题:(共82分)

1、下列程序段或函数的时间复杂度。(10%)

(1) for (int k=0;kfor (int j=0;j(3) int Prime(int n) (4)k=1; x=0;

{ int k=2 , x=(int)sqrt(n) ; do {

while (k<=x) { x++; k*=2; if (n % k= =0) break; }

k++; } while (kif (k>x) return 1; else return 0; }

2、有A、B、C、D四个元素依次入栈,即入栈序列唯一,问共能得到多少种出栈序列?能否得到以下四种出栈序列:ABCD、BDAC、CBDA、DBAC。对能得到的序列,请写出Push、Pop序列;对不能得到的序列,请说明理由。(6%)

3、矩阵Am*n以行优先方式从1000H处开始存放,元素类型未知,已知:A[2][3]存放在1011H处,A[1][1]存放在1005H处,求元素A[2][0]的存放位置。(6%)

1

--

4、根据下图所示的树回答问题:(共13%) (1)画出该树等效的二叉树。 (3%)

等效的二叉树

A B C D E F G H I J K L

(2)、写出对该树进行先序、后序遍历的结点序列。(4%)

(3)用带右链的先序表示法来存储此树,填写下表。(6%)

下标 0 1 2 3 4 5 6 7 8

sibling ltag

element 9 10 11 5、假设用于通讯的电文仅由 {ABCDEFGH} 8个字母组成,字母在电文中出现的频率分别为0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10。请画出哈夫曼树并在树中标明编码情况,给出这8个字母的哈夫曼编码,最后求出WPL。(9%)

2

--

6、对下图,要求:(共13%)

1 6 3 5 7 4 4 5 7 3 4 5 2 5 5 8 8 3 5 6 6 (1)画出它的邻接表。(3%)

(2)写出从顶点1到顶点8的四条路径长度为3的简单路径。(2%)

(3)分别写出从顶点1出发根据(1)所示的邻接表用深度优先搜索和广度优先搜索遍历图得到的顶点序列。(4%)

3

--

(4)求出它的一棵最小代价生成树(方法任选),其代价是多少?你所求出的最小代价生成树是唯一的吗?(4%)

7、 一项工程P由P1,P2,P3,P4,P5,P6六个子工程组成,这些工程之间有下列关系:P1>P2, P1>P3, P1>P4, P2>P3, P2>P5, P3>P6, P4>P6, P5>P6。其中符号“>”表示先于关系,例如P1>P2表示只有在工程P1完成之后才能进行P2的工作。请:(7%) (1) 画出该工程的AOV网

(2) 给出工程P的其中四种可能的施工顺序。

8、按如下关键字序列(60,88,107,15,8,23,100)从空树开始建立一棵AVL搜索树,画出建树的步骤以及调整平衡的过程(6%)

4

--

9、设散列表ht[13],散列函数h(key)=key % 13。采用二次探查法解决冲突,试用关键字值序列:{56,78,14,27,41,70,51,66,24,50,36}建立散列表。(6%) i 0 1 2 3 4 5 6 7 8 9 10 11 12 ht[i]

10、元素序列:{55,71,12,98,4,70,51 } ,请写出用冒泡排序法和2路合并排序法进行排序的各趟排序结果。(6%)

冒泡排序法 2路合并排序法

二、算法填空:(8%)

以下算法实现二叉搜索树的删除,根据给定的关键字k,找到待删除元素后将元素值通过参数e返回,若成功删除则返回true;找不到待删除元素则返回false. template

________ BSTree::Delete (const K &k , E & e) {

BTNode *p=root,*q=0; while ( p && p->element!=k ) {

q=p;

if (kelement) p=p->lchild; else ___________________; } if (!p) {

cerr<<”No element with key k\\n”;

5

--

____________; }

e=p->element;

while (p->lchild && p->rchild) {

BTNode *s=p->rchild, *r=p; while ( s->lchild ) {

_________; s=s->lchild; }

_________________ ; p=s; q=r; }

BTNode *c;

if (p->lchild) c=p->lchild; else ______________ ;

if ( ___________ ) root=c; else if ( p= =q->lchild ) q->lchild=c;

else q->rchild=c; _______________; return true; }

三、算法设计(10%)

编程实现将两个按元素递增排序的单向循环链表合并成一个单向循环链表,合并后元素仍递增有序,注意:不允许再增加新的结点,相同元素只保留一份。该算法为SingleList类的成员函数Merge,该函数的作用是将形参r代表的单向循环链表合并到当前单向循环链表中,合并后的结果存于当前单循环链表。 template class SingleList; template class Node{ private: T data;

Node *link;

friend class SingleList; };

template

class SingleList:public LinearList {public:

void Merge(const SingleList &r); …………. private:

Node *first; …….

6

--

};

例:合并前: this->first-> 2 34 108

r.first->

2 23 78 合并后: this->first-> 2 23 34 78 108

r.first->

算法实现:

template

void SingleList::Merge(const SingleList &r) {

7

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务