湖南科技大学数据结构综合应用题

1.简述栈的基本操作

2.给定权值组W={1,3,78,14,20,28},建立哈夫曼树。 3.试求下面的网络的最小生成树

4.对一组关键字49,7,50,5,94,16,90,29,71,使用希尔排序,写出对31=d 时的一趟排序的结果。 1-4题答案:

1、栈的基本操作有:

栈的建立,判栈满,判栈空,压栈,退栈和取栈顶元素等。 2、

3、 4、

5.写出队列的基本操作。

6.对下面的二叉树

(1) 其中序遍历序列为

(2)其后序遍历序列为

7.给定一组关键字序列12,7,51,32,23,试构造一棵查找树。

8.对一组关键字49,7,50,5,94,16,90,29,71,使用快速排序,试给出第一次划分过程。

5-8题答案:

5.队列的基本操作有:

6B →D →A →E →C →156

10569

138

101 a b d h c 5 e

g 14478

6628

38201418

4

1

313

2456569

8

649575094169029715716492950909471

6.(1)中序遍历序列:d g b a e c h f

(2)后序遍历序列:g d b e h f c a

7.

12

751

32

23

8.49 7 50 5 94 16 90 29 71 ↑head ↑tail

49 7 50 5 94 16 90 29 71

↑head ↑tail

29 7 50 5 94 16 90 49 71

↑head ↑tail

29 7 49 5 94 16 90 50 71

↑head ↑tail

29 7 16 5 94 49 90 50 71

↑head ↑tail

29 7 16 5 49 94 90 50 71

head↑↑tail

9.

// 设元素的类型为T, aList是存储顺序表的数组, maxSize是其最大长度;

// p为新元素value的插入位置,插入成功则返回true,否则返回false

template bool arrList :: insert (const int p, const T value) { int i;

if (curLen >= maxSize) { // 检查顺序表是否溢出

cout << "The list is overflow"<

}

if (p < 0 || p > curLen) { // 检查插入位置是否合法

cout << "Insertion point is illegal"<

}

for (i = curLen; i > p; i--)

aList[i] = aList[i-1]; // 从表尾curLen -1起往右移动直到p aList[p] = value; // 位置p处插入新元素

curLen++; // 表的实际长度增1

return true;

}

10.图如下,请画出

11.

一份电文中共使用的字符有A ,B ,C ,D ,

E ,它们出现的频率依次为4

,7,

5,2

,9。试画出其对

应的

Huffman 树

12.用拉链法建立Hash 表,Hash 函数为H(key)=key mod 11,Hash 表长度为10,现有一组关键字(

61,

18,

30

,72,

13,24,12,11),请画出相应的Hash 表。

13

9-13题答案:

10、

11、

12、

61 mod 11=6 18 mod 11=7 30 mod 11=7 72 mod 11=6 13 mod 11=2 24 mod 11=1 12 mod 11=1 11 mod 11=0

13、树转化为二叉树的方法如下:

①将树中的各兄弟之间加一条连线。

14、画出具有三个结点的二叉树的所有形态。

15、图如右,请画出prim 算法构造最小生成树的过程。

16、对于如下无向图,请画出其深度优先搜索和广度优先搜索生成的树(画出一棵即可)。

17、用线性探测法建立Hash 表,Hash 函数为H(key)=key mod 11,Hash 表长度为10,现有一组关键字(61,

18,30,72,13,24),请画出相应的Hash 表。

18、// 设元素的类型为T ;aList 是存储顺序表的数组; p 为即将删除元素的位置 // 删除成功则返回true ,否则返回false

template // 顺序表的元素类型为T bool arrList :: delete(const int p) { int i; if (curLen <= 0 ) { // 检查顺序表是否为空 3 6 4 1 2 5 3 6 4 1

2

5

if (p < 0 || p > curLen-1) { // 检查删除位置是否合法

cout << "deletion is illegal\n"<

return false ;

}

for (i = p; i < curLen-1; i++)

aList[i] = aList[i+1]; // 从位置p开始每个元素左移直到curLen curLen--; // 表的实际长度减1

return true;

}

14-18题答案:

14、

15、16

设从结点1出发开始深度优先搜索,得到如下一棵深度优先生成树:

设从结点1出发开始广度优先搜索,得到如下一棵广度优先生成树:

17、

18 mod 11=7 30 mod 11=8

72 mod 11=6→7→8→9 13 mod 11=2 24 mod 11=2→3

19.设一棵二叉树的先序遍历序列为: A B D F C E G H

中序遍历序列为: B F D A G E H C (1

)画出这棵二叉树。(5分)

(2)画出这棵二叉树的后序线索树。(5分)

(3)画出由这棵二叉树转换成的树(或森林)。(5分)

20.设有正文AADBAACACCDACACAAD,字符集为A,B,C,D,设计一套二进制编码,使得上述正文的编码最短。(要求画出Huffman 树并写出编码)(15分)

21.已知一个无向图如下图所示,用Kruskal 算法生成最小树(假设以①为起点,要求画出构造过程)。(10分)

22.对于以下的图,写出它的四个不同的拓扑有序序列。(10分)

23.采用哈希函数H(k)=3*k mod 13并用线性探测开放地址法处理冲突,在数列地址空间[0..12]中对关键字序列22,41,53,46,30,13,1,67,51。

(1)构造哈希表(画示意图);(5分)

(2)求装填因子;(1分)

(3)等概率下成功的和不成功的平均查找长度。(4分)

24.数据结构与数据类型有什么区别?

24.“数据结构”这一术语有两种含义,一是作为一门课程的名称;二是作为一个科学的概念。作为科学概念,目前尚无公认定义,一般认为,讨论数据结构要包括三个方面,一是数据的逻辑结构,二是数据的存储结构,三是对数据进行的操作(运算)。而数据类型是值的集合和操作的集合,可以看作是已实现了的数据结构,后者是前者的一种简化情况。

25.将算术表达式((a+b)+c*(d+e)+f)*(g+h)转化为二叉树。

25.该算术表达式转化的二叉树如右图所示。

26.将下列由三棵树组成的森林转换为二叉树。(只要求给出转换结果)

H

G

D

A

C

J

I

B

F

E

KO

27. 设一棵二叉树的先序、中序遍历序列分别为

先序遍历序列: A B D F C E G H 中序遍历序列: B F D A G E H C (1)画出这棵二叉树。

(2)画出这棵二叉树的后序线索树。 (3)将这棵二叉树转换成对应的树(或森林)。 27.

28. 已知下列字符A 、B 、C 、D 、E 、F 、G 的权值分别为3、12、7、4、2、8,11,试填写出其对应哈夫曼树HT 的存储结构的初态和终态。

29. 对有五个结点{ A,B, C, D, E}的图的邻接矩阵,

⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞05001020060010301000 (1).画出逻辑图 ; (2).画出图的十字链表存储; (3).基于邻接矩阵写出图的深度、广度优先遍历序列;

. 30.一带权无向图的邻接矩阵如下图 ,试画出它的一棵最小生成树。

A BM F D (3) C

EM H

G

设顶点集合为{1,2,3,4,5,6}, 由右边的逻辑图可以看出,在{1,2,3}和{4,5,6}回路中, 各任选两条边,加上(2,4),则可构成9棵不同的最小生成树。

31. 试写出用克鲁斯卡尔(Kruskal )算法构造下图的一棵最小支撑(或生成)树的过程。

V (G )={1,2,3,4,5,6,7}

E (G )={(1,6,4),(1,7,6),(2,3,5),(2,4,8),(2,5,12),(1,2,18)}

32. 设哈希(Hash)表的地址范围为0~17,哈希函数为:H (K)=K MOD 16, K 为关键字,用线性探测再散列法处

理冲突,输入关键字序列: (10,24,32,17,31,30,46,47,40,63,49)造出哈希表,试回答下列问题: (1) 画出哈希表示意图; (2) 若查找关键字63,需要依次与哪些关键字比较?

(3) 若查找关键字60,需要依次与哪些关键字比较?

(4) 假定每个关键字的查找概率相等,求查找成功时的平均查找长度。

(1(2(3)查找关键字60,H (k )=60 MOD 16=12,散列地址12内为空,查找失败。

(4)ASL succ =23/11

ASL succ =15/10

34. 设散列函数H(k)=K mod 7,散列表的地址空间为0-6,对关键字序列{32,13,49,18,22,38,21}按链地址法处理冲突的办法构造哈希表,并指出查找各关键字要进行几次比较。

查找时,对关键字49,22,38,32,13各比较一次,对21,18各比较两次

35. 设有5个互不相同的元素a、b、c、d、e,能否通过7次比较就将其排好序?如果能,请列出其比较过程;如果不能,则说明原因。

可以做到。取a与b进行比较,c与d进行比较。设a>b,c>d(ad,则有序a>b>d;若bd>b,此时已进行了3次比较。再把另外两个元素按折半插入排序方法,插入到上述某个序列中共需4次比较,从而共需7次比较。

36. 请阅读下列算法,回答问题

PROCEDURE sort(r,n)

BEGIN

FOR i:=2 TO n DO

BEGIN

x:=r(i);r(O):=x;j:=i-1;

WHILE x.key

BEGIN

r(j+1):=r(j); j:=j-1

END;

r(j+1):=x

END

END;

问题一:这是什么类型的排序算法,该排序算法稳定吗?

问题二:设置r(O)的作用是什么?若将WHILE—DO 语句中判断条件改为x.key<=r(j).KEY,该算法将会有什么变化,是否还能正确工作?

(1)此为直接插入排序算法,该算法稳定。

(2)r[O]的作用是监视哨,免去每次检测文件是否到尾,提高了排序效率。

采用x.key<=r[j].key描述算法后,算法变为不稳定排序,但能正常工作。

37. 对给定文件(28,07,39,10,65,14,61,17,50,21)选择第一个元素28进行划分,写出其快速排序第一遍的排序过程。

初始序列:[28],07,39,10,65,14,61,17,50,21 21移动:21,07,39,10,65,14,61,17,50,[] 39移动:21,07,[],10,65,14,61,17,50,39 17移动:21,07,17,10,65,14,61,[],50,39

65移动:21,07,17,10,[],14,61,65,50,39 14移动:21,07,17,10,14,[28],61,65,50,39

38. 如果只要找出一个具有n个元素的集合的第k(1≤k≤n)个最小元素,你所学过的排序方法中哪种最适合?给出实现的思想。

在具有n个元素的集合中找第k(1≤k≤n)个最小元素,应使用快速排序方法。其基本思想如下:设n个元素的集合用一维数组表示,其第一个元素的下标为1,最后一个元素下标为n。以第一个元素为“枢轴”,经过快速排序的一次划分,找到“枢轴”的位置i,若i=k,则该位置的元素即为所求;若i>k,则在1至i-1间继续进行快速排序的划分;若i

39. 全国有10000人参加物理竞赛,只录取成绩优异的前10名,并将他们从高分到低分输出。而对落选的其他考生,不需排出名次,问此种情况下,用何种排序方法速度最快?为什么?

在内部排序方法中,一趟排序后只有简单选择排序和冒泡排序可以选出一个最大(或最小)元素,并加入到已有的有序子序列中,但要比较n-1次。选次大元素要再比较n-2次,其时间复杂度是O(n2)。从10000个元素中选10个元素不能使用这种方法。而快速排序、插入排序、归并排序、基数排序等时间性能好的排序,都要等到最后才能确定各元素位置。只有堆排序,在未结束全部排序前,可以有部分排序结果。建立堆后,堆顶元素就是最大(或最小,视大堆或小堆而定)元素,然后,调堆又选出次大(小)元素。凡要求在n个元素中选出k(k<2)个最大(或最小)元素,一般均使用堆排序。因为堆排序建堆比较次数至多不超过4n,对深度为k的堆,在调堆算法中进行的关键字的比较次数至多为2(k-1)次,且辅助空间为O(1)。

40.// 插入数据内容为value的新结点作为第i个结点

template // 线性表的元素类型为T

bool lnkList :: insert(const int i, const T value) {

Link *p, *q;

if ((p = setPos(i -1)) == NULL) { // p 是第i个结点的前驱

cout << " 非法插入点"<

return false;

}

q = new Link(value, p->next);

p->next = q;

if (p == tail) // 插入点在链尾,插入结点成为新的链尾

tail = q;

return true;

}

41.template // 线性表的元素类型为T

bool lnkList:: delete((const int i) {

Link *p, *q;

// 待删结点不存在,即给定的i大于当前链中元素个数

if ((p = setPos(i-1)) == NULL || p == tail) {

cout << " 非法删除点 " <

return false;

}

q = p->next; // q是真正待删结点

if (q == tail) { // 待删结点为尾结点,则修改尾指针

tail = p;

p->next = NULL:

delete q;

}

else if (q != NULL) { // 删除结点q 并修改链指针p->next = q->next;

delete q;

}

return true;

}

42.template

void InsertSort (Record Array[], int n) {

//Array[]为待排序数组,n为数组长度

Record TempRecord; // 临时变量

for (int i=1; i

TempRecord = Array[i];

//从i开始往前寻找记录i的正确位置

int j = i-1;

//将那些大于等于记录i的记录后移

while ((j>=0) && (TempRecord < Array[j])) {

Array[j+1] = Array[j]; j = j - 1;

}

//此时j后面就是记录i的正确位置,回填

Array[j+1] = TempRecord;

}

}

计算机专业基础综合数据结构(排序)模拟试卷2(题后含答案及解析)

计算机专业基础综合数据结构(排序)模拟试卷2(题后含答案及解 析) 题型有:1. 单项选择题 2. 综合应用题 单项选择题1-40小题,每小题2分,共80分。下列每题给出的四个选项中,只有一个选项是最符合题目要求的。 1.采用简单选择排序,比较次数与移动次数分别为( )。 A.O(n),O(log2n) B.O(log2n),O(n2) C.O(n2),O(n) D.O(nlog2n),O(n) 正确答案:C 解析:简单选择排序的关键字比较次数KCN与对象的初始排列无关。第i 趟选择具有最小关键字对象所需的比较次数总是n—i—1次(此处假定整个待排序对象序列有n个对象)。因此,总的关键字比较次数为:最坏情况是每一趟都要进行交换,总的对象移动次数为RMN=3(n一1)。知识模块:数据结构 2.就排序算法所用的辅助空间而言,堆排序、快速排序、归并排序的关系是( )。 A.堆排序<快速排序<归并排序 B.堆排序<归并排序<快速排序 C.堆排序>归并排序>快速排序 D.堆排序>快速排序>归并排序 正确答案:A 解析:此题考查的知识点为排序的空间复杂性。堆排序辅助空间为O(1),快速排序为O(log2n),归并排序为O(n)。应选A。知识模块:数据结构 3.一组记录的关键码为(25,48,16,35,79,82,23,40,36,72),其中,含有5个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为( )。 A.16,25,35,48,23,40,79,82,36,72 B.16,25,35,48,79,82,23,36,40,72 C.16,25,48,35,79,82,23,36,40,72 D.16,25,35,48,79,23,36,40,72,82 正确答案:A 解析:对于(25,48,16,35,79,82,23,40,36,72),(25,48)和(16,35)归并的结果为(16,25,35,48)。(79,82)和(23,40)归并后的结果为(23,40,

关于数据结构栈的应用题

关于数据结构栈的应用题 数据结构中的栈是一种常见的数据结构,它遵循先进后出(LIFO)的原则。栈常用于解决各种实际问题,下面我将从多个角 度给出栈的应用题的例子。 1. 括号匹配问题: 栈可以用于解决括号匹配问题。例如,给定一个包含括号的 字符串,我们可以使用栈来检查括号是否匹配。遍历字符串,当遇 到左括号时,将其压入栈中;当遇到右括号时,检查栈顶元素是否 为对应的左括号,如果是,则弹出栈顶元素,继续遍历;如果不是,则括号不匹配。最后,如果栈为空,则表示所有括号都匹配。 2. 浏览器的前进和后退功能: 浏览器的前进和后退功能可以使用栈来实现。当用户浏览网 页时,每当访问一个新页面,该页面的URL就会被压入栈中。当用 户点击后退按钮时,栈顶的URL会被弹出,用户就会返回上一个页面。当用户点击前进按钮时,可以将弹出的URL重新压入栈中,用 户就会前进到下一个页面。

3. 函数调用的追踪: 在编程中,函数的调用可以使用栈来追踪。当一个函数被调 用时,函数的相关信息(如参数、返回地址等)会被压入栈中。当 函数执行完毕后,栈顶的信息会被弹出,程序会回到调用该函数的 位置继续执行。 4. 表达式求值: 栈可以用于解决表达式求值问题。例如,给定一个包含加减 乘除运算符的表达式,我们可以使用栈来计算其结果。遍历表达式,当遇到数字时,将其压入栈中;当遇到运算符时,从栈中弹出两个 数字进行运算,并将结果压入栈中。最后,栈中剩下的数字就是表 达式的计算结果。 5. 撤销操作: 在编辑器或者文字处理软件中,撤销操作可以使用栈来实现。每当用户进行一次操作(如插入、删除、替换文本等),将该操作 的信息压入栈中。当用户点击撤销按钮时,弹出栈顶的操作信息, 将文本恢复到之前的状态。

《数据结构》应用题练习

《数据结构》应用题练习 1、将下图所示的森林转换成二叉树。 2、已知一棵二叉树的中序序列和后序序列分别如下 先序序列:A B D E C F H K G 中序序列:B E D A H F K C G 请完成:(1)画出该二叉树(2分); (2)写出该二叉树的后序序列(2分)。 3、对于一组给定的权值W={4,18,6,22,10,15},请完成: (1)建立相应的哈夫曼树; (2)计算其WPL值。 4、如下所示的有向图,回答下面问题: (1)该图是强连通的吗?若不是,给出强连通分量。 (2)请给出图的邻接矩阵 (3)请给出图的邻接表和逆邻接表。 (4) 计算各点的入度和出度 5、下图是一个带权无向图,要求: (1)画出以V1为初始顶点、按Prim算法构造最小生成树的过程;

(2)求出最小生成树的总代价; (3)Prim算法求最小生成树适用于什么情形? 6下图是一个带权无向图,要求: (1)画出以V1为初始顶点、按克鲁斯卡尔算法构造最小生成树的过程; (2)求出最小生成树的总代价; (3)克鲁斯卡尔算法求最小生成树适用于什么情形? 7、设有一组初始记录关键字为(10, 2, 26, 4, 18, 24, 21, 15, 8,) 要求: (1)构造一棵二叉排序树并给出构造过程。 (2)查找关键字2需要和哪些结点进行比较? (3)等概率查找下的ASL是多少? 8、已知哈希函数为H(key)=key%11,哈希表长度为13,用平方探测再散列的方法处理冲突。 表中已依次存放了关键字为33、23、32、54和42的5个记录: (1)现将关键字65填入哈希表,确定其存储地址(要求写出每一步的哈希地址计算表达式)。 (2)若查找关键字65的记录,需依次与哪些关键字进行比较? (3)为确保查找正确,如果删除关键字为54的记录应作何处理? 9关键码集为{47,7,29,11,16,92,22,8,3},散列表表长为m=11,散列函数为H(key)=key mod 11 ,线性探测法处理冲突。 (1)生成哈希表 (2)计算查找成功的ASL

数据结构计算题及参考答案

数据结构计算题及参考答案 数据结构计算题及参考答案 数据结构是计算机科学中的重要概念,它用于组织和管理数据。在计算机科学 的学习过程中,我们经常会遇到一些与数据结构相关的计算题。这些题目旨在 帮助我们加深对数据结构的理解,并提高我们的编程能力。在本文中,我将为 大家提供一些常见的数据结构计算题及其参考答案。 1. 栈的应用题 栈是一种具有后进先出(Last In First Out)特性的数据结构。下面是一个栈的 应用题: 题目:使用栈判断一个字符串中的括号是否匹配。 解答:我们可以遍历字符串中的每个字符,如果遇到左括号,则将其入栈;如 果遇到右括号,则判断栈顶元素是否为对应的左括号,如果是,则将栈顶元素 出栈,继续遍历下一个字符;如果不是,则说明括号不匹配。最后,如果栈为空,则说明字符串中的括号全部匹配,否则不匹配。 2. 队列的应用题 队列是一种具有先进先出(First In First Out)特性的数据结构。下面是一个队 列的应用题: 题目:使用队列模拟击鼓传花游戏。 解答:我们可以使用队列来模拟击鼓传花游戏。首先,将所有参与游戏的人依 次加入队列。然后,从队列中取出第一个人,并将其加入队尾。重复这个过程,直到传花的次数达到指定的次数。最后,队列中的最后一个人即为被淘汰的人。 3. 链表的应用题

链表是一种常见的动态数据结构,它可以在运行时动态分配内存。下面是一个链表的应用题: 题目:反转链表。 解答:我们可以使用迭代或递归的方式来反转链表。迭代的方法是从链表头开始,依次将每个节点的指针方向反转。递归的方法是先反转链表的子链表,然后将当前节点的指针指向前一个节点。最后,将链表的头节点指向反转后的链表的头节点。 4. 树的应用题 树是一种非常重要的数据结构,它具有层次结构和分支结构。下面是一个树的应用题: 题目:计算二叉树的深度。 解答:我们可以使用递归的方式来计算二叉树的深度。对于一个二叉树,它的深度等于左子树的深度和右子树的深度中的较大值加1。递归的终止条件是当节点为空时,返回0。 通过以上的计算题,我们可以更好地理解和应用数据结构。数据结构不仅仅是一种抽象的概念,它在实际编程中起到了至关重要的作用。通过解决这些计算题,我们可以提高我们的编程能力,培养我们的逻辑思维能力,并加深对数据结构的理解。 总结起来,数据结构计算题是一种锻炼编程能力和加深对数据结构理解的有效方式。通过解决栈、队列、链表和树等不同类型的计算题,我们可以更好地掌握数据结构的应用和实现。希望本文提供的计算题及其参考答案能够对大家在学习数据结构的过程中有所帮助。

数据结构应用题练习

数据结构应用题练习 一、简介 数据结构是计算机科学中的重要概念,是指数据组织、管理和存储的方式。它是计算机处理和分析数据的基础,在各个领域都有广泛的应用。本文将通过几个数据结构应用题的练习,展示数据结构在实际问题中的应用。 二、链表应用题 链表是一种常见的数据结构,在许多场景中都有广泛的应用。假设有一组学生的信息,包括学生姓名、年龄和成绩,请使用链表来存储并实现以下操作: 1. 添加学生信息 2. 删除学生信息 3. 查找学生信息 4. 修改学生信息 三、栈应用题 栈是一种后进先出(LIFO)的数据结构,在很多应用中都有不可或缺的地位。以网页浏览器的前进和后退功能为例,使用栈可以很方便地实现该功能。请描述如何使用栈来实现浏览器的前进和后退功能,并分析算法的时间复杂度。

四、队列应用题 队列是一种先进先出(FIFO)的数据结构,常用于处理排队等场景。现假设有一个任务队列,多个任务需要按照顺序执行。请使用队列来 存储任务,并实现以下操作: 1. 添加任务到队列 2. 从队列中取出并执行任务 3. 判断队列是否为空 4. 清空队列中的所有任务 五、树应用题 树是一种重要的非线性数据结构,在很多领域都有广泛应用。假设 有一组学生的信息,包括学生姓名、年龄和成绩,请使用树来存储这 些信息,并实现以下操作: 1. 添加学生信息到树中 2. 从树中查找指定学生的信息 3. 删除指定学生的信息 4. 获取树中所有学生的平均成绩 六、图应用题

图是一种用于描述事物之间关系的数据结构,在网络分析、路径规划等领域有广泛应用。假设有一张地图,其中包含若干城市和连接它们的道路,请使用图来存储地图信息,并实现以下操作: 1. 添加城市和道路到图中 2. 查找两个城市之间的最短路径 3. 删除某个城市及其相关的道路 4. 统计图中有多少个孤立的城市 七、哈希表应用题 哈希表是一种通过散列函数实现高效存储和查找的数据结构,在很多场景中都有广泛应用。假设有一组学生的信息,包括学生姓名、年龄和成绩,请使用哈希表来存储这些信息,并实现以下操作: 1. 添加学生信息到哈希表中 2. 从哈希表中查找指定学生的信息 3. 删除指定学生的信息 4. 统计哈希表中学生信息的个数 八、总结 以上是几个常见的数据结构应用题的练习,通过这些练习可以更深入地理解数据结构的应用和算法的设计。数据结构是计算机科学中非常重要的一个领域,其应用广泛且多样化。在实际问题中,合理选择

《数据结构》应用题参考习题

《数据结构》应用题参考习题数据结构是计算机科学中的一门基础课程,它主要研究数据的组织、存储和管理方式,以及不同数据结构对算法执行效率的影响。在实际 应用中,数据结构起到了至关重要的作用。本文将介绍一些《数据结构》的应用题,并给出相应的参考习题。 一、栈的应用题 1. 符号匹配问题 问题描述:给定一个字符串,在其中包含了一些圆括号"()"、方括号"[]"和花括号"{}",判断字符中的括号是否匹配。 例题:判断字符串"{[()]()}"是否匹配。 解题思路:利用栈的先进后出特点,遍历字符串中的每个字符。如 果是左括号,则入栈;如果是右括号,则判断栈顶元素是否与之匹配。 参考习题:编写一个程序,实现括号匹配的功能,并输出匹配结果。 二、队列的应用题 1. 循环队列的应用 问题描述:设计一个循环队列,实现入队、出队等基本操作。 解题思路:利用数组实现循环队列,需要设置一个队头指针front 和一个队尾指针rear。入队操作时,将元素添加到rear位置;出队操作时,返回front位置元素,并将front后移。

参考习题:实现一个循环队列,并进行相关操作的测试。 三、链表的应用题 1. 单链表反转 问题描述:给定一个单链表,将其反转。 例题:将链表1->2->3->4->5反转为5->4->3->2->1。 解题思路:利用三个指针prev、cur和next,依次遍历链表,并修 改指针指向实现链表的反转。 参考习题:编写一个程序,实现单链表反转,并输出反转后的链表。 四、树的应用题 1. 二叉树的遍历 问题描述:给定一个二叉树,实现它的前序遍历、中序遍历和后序 遍历。 解题思路:分别使用递归和迭代的方式实现二叉树的前序遍历、中 序遍历和后序遍历。 参考习题:编写一个程序,实现二叉树的前序遍历、中序遍历和后 序遍历,并输出遍历结果。 五、图的应用题 1. 图的最短路径

2024王导数据结构综合应用题

2024王导数据结构综合应用题假设2024年,王导是一位深受学生喜爱的计算机科学导师。他设 计了一道综合应用题,旨在考察学生对数据结构的应用能力。以下是 题目内容和解答。 题目: 在2024年的某个国家,有许多城市需要进行道路规划。每个城市 可以通过道路连接到其他城市,形成一个网络。现有一份城市之间的 道路连接关系表,其中包含了城市之间可以直接通行的道路及其长度。请设计一个算法,找到所有城市之间的最短路径及其长度。 解答: 为了解决这个问题,我们可以使用图的最短路径算法。以下是一种 常用的算法——Dijkstra算法。 1. 创建一个集合S,用于存放已经找到最短路径的城市,初始时为空。 2. 创建一个数组dist,用于存放每个城市到起点的最短路径长度, 初始时所有元素为无穷大。 3. 选取一个起点,设置dist[起点]为0,并将起点加入集合S。 4. 对于起点相邻的每个城市,更新其到起点的最短路径长度,并将 其加入集合S。 5. 从剩余的城市中选取一个离起点最近的城市u,将它加入集合S。

6. 对于每个城市v,如果v不在集合S中且通过u可以找到更短的 路径,则更新其最短路径长度,并将其加入集合S。 7. 重复步骤5和步骤6,直到所有城市都加入集合S。 使用Dijkstra算法可以找到起点到所有城市的最短路径及其长度。 在这里可以使用优先队列(最小堆)来存储城市和最短路径长度的对 应关系,以提高算法效率。 接下来我们以一个具体的例子来说明算法的步骤。 假设有4个城市,用数字1、2、3、4代表,它们之间的道路如下:- 城市1和城市2之间有一条长度为5的道路。 - 城市1和城市3之间有一条长度为9的道路。 - 城市2和城市3之间有一条长度为2的道路。 - 城市2和城市4之间有一条长度为6的道路。 - 城市3和城市4之间有一条长度为3的道路。 现在我们以城市1为起点,按照Dijkstra算法的步骤来求解最短路 径及其长度。 1. 初始化操作: - 集合S = {1},dist = [0, ∞, ∞, ∞],表示起点到各个城市的最短路 径长度。 2. 对于起点1的邻居城市,更新其最短路径长度:

数据结构(C语言版)复习题

一、单项选择题: 1、树形结构不具备这样的特点:() A. 每个节点可能有多个后继(子节点) B. 每个节点可能有多个前驱(父节点) C. 可能有多个内节点(非终端结点) D. 可能有多个叶子节点(终端节点) 2、二叉树与度数为2的树相同之处包括()。 A. 每个节点都有1个或2个子节点 B. 至少有一个根节点 C. 至少有一个度数为2的节点 D. 每个节点至多只有一个父节点 3、一棵完全二叉树有999 个结点,它的深度为()。 A.9 B.10 C.11 D.12 4、在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行() A. s->next=p;p->next=s; B. s->next=p->next;p->next=s; C. s->next=p->next;p=s; D. p->next=s;s->next=p; 5、对于一棵具有n个结点、度为5的树来说,() A. 树的高度至多是n-3 B. 树的高度至多是n-4 C. 树的高度至多是n D. 树的高度至多是n-5 6、在顺序队列中,元素的排列顺序()。 A. 由元素插入队列的先后顺序决定 B. 与元素值的大小有关 C. 与队首指针和队尾指针的取值有关 D. 与数组大小有关 7、串是一种特殊的线性表,其特殊性体现在()。 A.可以顺序存储 B.数据元素是一个字符 C.可以链式存储 D.数据元素可以是多个字符若 8、顺序循环队列中(数组的大小为 6),队头指示 front 和队尾指示 rear 的值分别为 3 和 0,当从队列中删除1个元素,再插入2 个元素后,front和 rear的值分别为()。 A.5 和1 B.2和4 C.1和5 D.4 和2 9、一棵完全二叉树上有1001 个结点,其中叶子结点的个数为()。 A.250 B.500 C.254 D.501 10、已知一个有向图如下图所示,则从顶点a出发进行深度优先遍历,不可能得到的DFS序 列为()。 A.adbefc B.adcefb C.adcebf D.adefbc

计算机学科专业基础综合数据结构-9

计算机学科专业基础综合数据结构-9 (总分:97.50,做题时间:90分钟) 一、综合应用题(总题数:24,分数:97.50) 假定把关键字key散列到有n个表项(从0到n-1编址)的散列表中。对于下面的每一个函数H(key)(keyr 为整数),这些函数能够当作散列函数吗?(即对于插入和查找,散列程序能正常工作吗?)如果能够,它是一个好的散列函数吗?请说明理由。设函数random(n)返回一个0到n-1之间的随机整数(包括0与n-1在内)。(分数:10.00) (1).H(key)=key/n(分数:2.50) __________________________________________________________________________________________ 正确答案:() 解析:不能当作散列函数,因为key/n可能大于n,这样就找不到适合的位置。 (2).H(key)=1(分数:2.50) __________________________________________________________________________________________ 正确答案:() 解析:能够作为散列函数,但不是一个好的散列函数,因为所有关键字都映射到同一位置,造成大量的冲突机会。 (3).H(key)=(Key+random(n))%n(分数:2.50) __________________________________________________________________________________________ 正确答案:() 解析:不能当作散列函数,因为该函数的返回值不确定,这样无法进行正常的查找。 (4).H(key)=key%p(n);其中p(n)是不大于n的最大素数(分数:2.50) __________________________________________________________________________________________ 正确答案:() 解析:能够作为散列函数,是一个好的散列函数。 对于一个长度为m=41的散列表,采用双散列法解决冲突,对于关键字k 1,k 2,k 3,若h(k 1 )=30,h(k 2 )=28,h(k 3 )=19,h 2 (k 1 )=14,h 2 (k 2 )=27,h 2 (k 3 )=35,则k 1,k 2,k 3的探测序列中前4个位置各为多少。(分数:7.50) (1).k 1的探测序列: 30 ,______,______,______;(分数:2.50) __________________________________________________________________________________________ 正确答案:() 解析:在双散列法中,求初始散列地址的散列函数为h(x),求下一个空位的增量函数为h 2 (x),一旦发生冲突,求下一个空位的公式为: H i=(h(x)+i×h 2 (x))%m,i=1,2,…,m-1 据此可得: k 1的探测序列: 30 , 3 , 17 , 31 ; (2).k 2的探测序列: 28 ,______,______,______;(分数:2.50) __________________________________________________________________________________________ 正确答案:() 解析:k 2的探测序列: 28 , 14 , 0 , 22 ; (3).k 3的探测序列:______,______,______,______;(分数:2.50) __________________________________________________________________________________________ 正确答案:() 解析:k 3的探测序列: 19 , 13 , 7 , 1 。 1.设有150个记录要存储到散列表中,要求利用双散列法解决冲突,同时要求找到新记录插入位置的平均比较次数不超过2次。试问散列表需要设计为多大?请为这个散列表设计散列函数(除留余数法)和再散列函数。 设α是散列表的装载因子,则应用双散列法解决冲突时的查找成功的平均查找长度和查找不成功的平均查

湖南科技大学数据结构综合应用题

1.简述栈的基本操作 2.给定权值组W={1,3,78,14,20,28},建立哈夫曼树。 3.试求下面的网络的最小生成树 4.对一组关键字49,7,50,5,94,16,90,29,71,使用希尔排序,写出对31=d 时的一趟排序的结果。 1-4题答案: 1、栈的基本操作有: 栈的建立,判栈满,判栈空,压栈,退栈和取栈顶元素等。 2、 3、 4、 5.写出队列的基本操作。 6.对下面的二叉树 (1) 其中序遍历序列为 (2)其后序遍历序列为 7.给定一组关键字序列12,7,51,32,23,试构造一棵查找树。 8.对一组关键字49,7,50,5,94,16,90,29,71,使用快速排序,试给出第一次划分过程。 5-8题答案: 5.队列的基本操作有: 6B →D →A →E →C →156 10569 138 101 a b d h c 5 e g 14478 6628 38201418 4 1 313 2456569 8 649575094169029715716492950909471

6.(1)中序遍历序列:d g b a e c h f (2)后序遍历序列:g d b e h f c a 7. 12 751 32 23 8.49 7 50 5 94 16 90 29 71 ↑head ↑tail 49 7 50 5 94 16 90 29 71 ↑head ↑tail 29 7 50 5 94 16 90 49 71 ↑head ↑tail 29 7 49 5 94 16 90 50 71 ↑head ↑tail 29 7 16 5 94 49 90 50 71 ↑head ↑tail 29 7 16 5 49 94 90 50 71 head↑↑tail 9. // 设元素的类型为T, aList是存储顺序表的数组, maxSize是其最大长度; // p为新元素value的插入位置,插入成功则返回true,否则返回false template bool arrList :: insert (const int p, const T value) { int i; if (curLen >= maxSize) { // 检查顺序表是否溢出 cout << "The list is overflow"< curLen) { // 检查插入位置是否合法 cout << "Insertion point is illegal"< p; i--) aList[i] = aList[i-1]; // 从表尾curLen -1起往右移动直到p aList[p] = value; // 位置p处插入新元素 curLen++; // 表的实际长度增1 return true; }

数据结构应用题练习

1、假设一棵二叉树的层序序列是ABCDEFGHIJ 和中序序列是DBGEHJACIF,请画出该树。 21、有一个完全二叉树按层次顺序存放在一维数组中,如下所示: 请指出结点P 的父结点,左子女,右子女。 3、给出下列二叉树的先序序列。 4、已知二叉树的先序遍历序列为ABCDEFGH ,中序遍历序列为CBEDFAGH ,画出二叉树。 答案:二叉树形态 A F H G D E C B (2)设一棵二叉树的先序序列: A B D F C E G H ,中序序列: B F D A G E H C ①画出这棵二叉树。 ②画出这棵二叉树的后序线索树。 ③将这棵二叉树转换成对应的树(或森林)。 A B F D ( C E H G

(1) (2) 1、已知一棵二叉树的前序序列为:A,B,D,G,J,E,H,C,F,I,K,L中序序列:D,J,G,B,E,H, A,C,K,I,L,F。 i.写出该二叉树的后序序列; ii.画出该二叉树; iii.求该二叉树的高度(假定空树的高度为-1)和度为2、度为1、及度为0的结点个数。 该二叉树的后序序列为:J,G,D,H,E,B,K,L,I,F,C,A。 该二叉树的形式如图所示: 该二叉树高度为:5。 度为2的结点的个数为:3。 度为1的结点的个数为:5。 度为0的结点个数为:4。 5、试用权集合{12,4,5,6,1,2}构造哈夫曼树,并计算哈夫曼树的带权路径长度。 答案:

2 1 5 6 1118 73 4 12 30 WPL=12*1+(4+5+6)*3+(1+2)*4=12+45+12=69 6、已知权值集合为{5,7,2,3,6,9},要求给出哈夫曼树,并计算带权路径长度WPL 。 答案:(1)树形态: 3 2 5 5 1019 9 7 6 13 32 (2)带权 路 径 长 度 : WPL=(6+7+9)*2+5*3+(2+3)*4=44+15+20=79 (3) 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。 ① 试为这8个字母设计赫夫曼编码。 ② 试设计另一种由二进制表示的等长编码方案。 ③ 对于上述实例,比较两种方案的优缺点。 解:方案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) () (11) 7 10 6 (5)

数据结构综合练习题[1]

一、选择题 1.下列程序段的时间复杂度为()。 i=0,s=0; while (snext=p->next;p->next=-s;(B) q->next=s; s->next=p; (C) p->next=s->next;s->next=p;(D) p->next=s; s->next=q; 4.设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为()。 (A) 5,3,4,6,1,2 (B) 3,2,5,6,4,1 (C) 3,1,2,5,4,6 (D) 1,5,4,6,2,3 5.设有一个10阶的下三角矩阵A(包括对角线),按照从上到下、从左到右的顺序存储到连续的55个存储单元中,每个数组元素占1个字节的存储空间,则A[5][4]地址与A[0][0]的地址之差为()。 (A) 10 (B) 19 (C) 28 (D) 55 6.设一棵m叉树中有N 1个度数为1的结点,N 2 个度数为2的结点,……,Nm个 度数为m的结点,则该树中共有()个叶子结点。 (A) ∑ =- m i i N i 1 )1 ((B) ∑ = m i i N 1 (C) ∑ = m i i N 2 (D) ∑ = - + m i i N i 2 )1 ( 1 7. 二叉排序树中左子树上所有结点的值均()根结点的值。 (A) < (B) > (C) = (D) != 8. 设一组权值集合W=(15,3,14,2,6,9,16,17),要求根据这些权值集合 构造一棵哈夫曼树,则这棵哈夫曼树的带权路径长度为()。 (A) 129 (B) 219 (C) 189 (D) 229

数据结构(本)期末综合练习(2022年6月)

数据结构(本)期末综合练习(2022年6月) 期末综合练习一 一、单项选择题 1.深度为5的完全二叉树共有20个结点,则第5层上有()个结点(根所在结点为第一层)。 A.3B.8C.5D.62.同一种逻辑结构()。 A.只能有唯一的存储结构 B.可以有不同的存储结构 C.只能表示某一种数据元素之间的关系D.以上三种说法均不正确3.已知一个图的边数为m,则该图的所有顶点的度数之和为()。 A.2mB.mC.2m+1D.m/24.链表所具备的特点是()。 A.可以随机访问任一结点B.占用连续的存储空间 C.插入删除元素的操作不需要移动元素结点D.可以通过下标对链表进行直接访问 5.数据结构中,与所使用的计算机无关的是数据的()结构。A.物理B.存储C.逻辑与物理D.逻辑6.数据的物理结构()。 A.与数据的逻辑结构无关B.仅仅包括数据元素的表示 C.只包括数据元素间关系的表示D.包括数据元素的表示和关系的表示7.链表所具备的特点是()。 A.可以随机访问任一结点B.占用连续的存储空间

C.插入删除不需要移动元素结点D.可以通过下标对链表进行直接访问8.线性结构中数据元素的位置之间存在()的关系。A.一对一B.一对多 C.多对多D.每一个元素都有一个直接前驱和一个直接后继9.线性表只要以()方式存储就能进行折半查找。 A.链接B.顺序C.关键字有序的顺序D.二叉树10.以下表中可以随机访问的是()。 A.单向链表B.双向链表C.单向循环链表D.顺序表11.散列查找的原理是()。 A.在待查记录的关键字值与该记录的存储位置之间建立确定的对应关系B.按待查记录的关键字有序的顺序方式存储 C.按关键字值的比较进行查找D.基于二分查找的方法 12.算法的时间复杂度与()有关。 A.所使用的计算机B.与计算机的操作系统 C.与算法本身D.与数据结构 13.对n个元素进行冒泡排序若某趟冒泡中只进行了()次元素间的交换,则表明 序列已经排好序。 A.1B.2C.0D.n-1 14.设有一个长度为n的顺序表,要删除第i个元素需移动元素的个数为()。A.n-i+1B.n-iC.n-i-1D.i

数据结构应用题答案2014-7-6

数据结构应用题答案 第2章线性表 1.设指针变量p指向双向链表中结点A,指针变量q指向被插入结点B,要求给出在结点A 的后面插入结点B的操作序列(设双向链表中结点的两个指针域分别为llink和rlink)。答:操作序列如下:q->rlink = p->rlink ; p->rlink = q ; q->rlink->llink = q ; q->llink = p ; 注意答案不唯一 第3章栈和队列 1.设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。 答:共计14种,分别是:1234, 1243, 1324, 1342, 1432, 2134, 2143, 2341, 2314,2431, 3214, 3241, 3421, 4321 2.如果输入序列为1,2,3,4,5,6,试问能否通过栈结构得到以下两个序列:4,3,5,6,1,2和1,3,5,4,2,6;请说明为什么不能或如何才能得到。 答:(1)不能得到4,3,5,6,1,2 ;因为1,2,3,4入栈后;4,3出栈;得到序列4,3;栈中还有1,2;5入栈后即出栈,得到序列4,3,5;6入栈后即出栈,得到序列4,3,5,6;此时,栈中还有1,2;必须2先出栈,然后1再出栈,1不可能在2之前出栈。故而得不到该序列。 (2)能得到输出顺序为1,3,5,4,2,6的序列。得到的操作如下:1入栈后即出栈,得到序列1;2,3入栈后3即出栈,得到序列1,3;4,5入栈后,5出栈,4出栈,得到序列1,3,5,4;2出栈,得到序列1,3,5,4,2;6入栈后即出栈,得到序列1,3,5,4,2,6。 3.假设正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是回文。假设一字符序列已存入计算机,请用堆栈判断其是否为回文,简述算法。 答:方法一:使用数据结构:循环队列和顺序栈。算法思路为: 1.将字符串按照用户输入的顺序分别入栈和队列 2.分别从队列和栈中取出首个字符 3.比较取出的字符,若相等,继续分别从队列和栈中取首个字符;否则跳出循环,并设置标志flag=0; 4.若队列和栈中的字符都取完,则结束,设置标志flag=1; 5.flag=1,表示字符从前往后和从后往前的序列完全匹配,该字符串属于回文 6.flag=0,表示字符从前往后和从后往前的序列不完全匹配,该字符串不属于回文 方法二:使用栈。将字符串的前一半入栈,再依次出栈,与后一半进行比较,若有不等则不是回文;若依次相等,则是回文。 注意:本题要求简答算法思路,并不要求写出具体算法。 4.试写出循环队列判空和判满的条件(队列最大容量为M)。 答:假设循环队列最大存储容量为M 判空:Q.front==Q.rear (1) 判满:(Q.rear+1)%M==Q.front (2) 评分标准:给出(1)和(2)式分别得3分,其他酌情扣分。 5.假设Q[0..10]是一个循环队列,初始状态为front=rear=0,画出做完下列操作后队列的头尾指针的状态变化情况,若不能入队,请指出其元素,并说明理由。 d,e,b,g,h入队;d,e出队;i,j,k,l,m入队;n,o,p入队 答:(图自己根据解答画出)d,e,b,g,h入队;状态1:front=0,rear=5;

数据结构应用题

一、应用题 1. 已知关键字序列为:(74,33,52,41,13,88,66,59)哈希表长为9,哈希函数为:H (k)=k %9,解决冲突用线性补偿探测法 (取Q=5),试构造哈希表,并求出等概率下查找成功的平均查找长度。 【答案】 (1)哈希表: 0 1 2 3 4 5 6 7 8 59 74 88 13 41 33 52 66 2 1 2 1 1 1 1 2 (2) ASL=(5*1+3*2)/8=11/8 2. 已知一个AOV 网如图所示。 (1)试画出它的邻接链表。(顶点号递减出现在各邻接表中) (2)试写出按照拓扑排序算法得到的拓扑序列。 V 6 V 1 V 2 V 4 V 5 V 3 【答案】 (1) 1 v 1 0 6 v 6 1 5 v 5 3 3 V 3 2 4 v 4 0 2 v 2 2 ∧ 6 5 3 ∧ 5 ∧ 5 ∧ 2 ∧ 3 2 ∧ (2)v 4,v 6,v 1,v 3,v 5,v 2 3. 已知线性表的存储结构为顺序表,阅读下列 算法,并回答问题: (1)设线性表L=(21,-7,-8,19,0,-11, 34,30,-10),写出执行f30(&L)后的L 状态; (2)简述算法f30的功能。 void f30 (SeqList *L) { int i,j; for (i=j=0;ilength; i++) if(L->data[i]>=0){ if(i!=j)L->data[j]=L->data[i]; j++; } L->length=j; } 【答案】 (1)L=(21,19,0,34,30) (2) 删除顺序表中小于0的数。 4. 已知关键字序列{34,26,47,12,63,41,22,59},利用堆排序的方法对其排序。 (1)写出在构成初始堆后关键字的排列情况。 (2)写出在堆排序的过程中输出前4个记录时,每次调整后关键字的排列情况。 【答案】 (1)初始堆:{12,26,22,34,63,41,47,59} (2)输出12后:{22,26,41,34,63,59,47} 输出22后:{26,34,41,47,63,59} 输出26后:{34,47,41,59,63} 输出34后:{41,47,63,59} 5. 请用克鲁斯卡尔算法构造下图所示网络的最小生成树。 14 v 1 v 4 v 5 v 2 v 3 V 6 10 8 18 22 12 10 16 19 20 【答案】 最小生成树如下图所示:

数据结构部分

数据结构部分 注意事项: 1、算法应说明基本思路,应对主要数据类型、变量给出说明,所写算法应结构清晰、简明易懂,应加上必要的注释。 2、算法可用(类)PASCA语言、(类)C语言等 你所熟悉的高级语言编写,但要注明语种。 一、解答下列问题[每小题4分,共16 分]: 1、[4 分]为什么要分析算法的时间复杂度? 2、[4 分]简述代码区、全局数据区、栈区、堆区在程序运行时的 作用。 3、[4 分]求模式串s='aaabC的next 及nextval 函数。 4、[4 分]证明根据森林的先序序列与中序序列可以唯一确定一个 森林。 二、综合应用题[每小题8分,共24分]: 1、[8分]推导满k叉树上的叶子结点数nO和非叶子结点数n1 之间的关系(即用k和n1表示nO)。 2、[8 分]设有正文AADBAACACCDACAC AAD,字符集为A、B、C、D,设计一套二进 制编码,使得上述正文的编码最短。 3、[8 分]画出对长度为1O 的有序表进行二分查

找时的判定树,并计算在等概率情况下查找成功的平均查找长度。 三、[15分]某超市有一批水果,按其价格从低到高的顺序构成一个单 链表,每个结点有价格、数量和指针三个域,现新进m公斤价格为 h的水果,编写一个函数修改原单链表。 四、[15分]采用链表作存储结构,编写一个采用选择排序方法进行升 序排序的函数。 五、[15分]采用二叉链表存储树,试写一算法,实现对树的层次遍 历。 六、[15分]设计一个算法,判断无向图G是否一棵树。 离散数学部分(50分) 一. (10 分)证明:-x(C(x))W(x) R(x)) , x(C(x) Q(x))二x(Q(x) R(x)) 二. (10分)设有连通的平面图G =::V, E •,共有v个结点、e条边和r个面,则有 欧拉公式v -e • r = 2成立。 三. (10分)R和S是定义在非空集合A上的关系,若R是一个等价关系,证明:S也是- 个等价关系。其中S ={ . a, b J-.C A 使:::a, c >E R, c, b >E R}。 四. (10分)在有界分配格:::代空•中,证明具有补元的那些元素组成一个子格。 五. (10分)设:::A, ” •是一个半群,e是左幺元且对A , x・A,使x“x=e , 试证明:A, “ •是群。

《数据结构》应用题参考习题

一.《树》应用题 1. 已知一棵树边的集合为{},请画出这棵树,并回答下列问题: (1)哪个是根结点? (2)哪些是叶子结点? (3)哪个是结点g的双亲? (4)哪些是结点g的祖先? (5)哪些是结点g的孩子? (6)哪些是结点e的孩子? (7)哪些是结点e的兄弟?哪些是结点f的兄弟? (8)结点b和n的层次号分别是什么? (9)树的深度是多少? (10)以结点c为根的子树深度是多少? 2. 一棵度为2的树与一棵二叉树有何区别。 3. 试分别画出具有3个结点的树和二叉树的所有不同形态? 4. 已知用一维数组存放的一棵完全二叉树:ABCDEFGHIJKL,写出该二叉树的先序、中序和后序遍历序列。

5. 一棵深度为H的满m叉树有如下性质:第H层上的结点都是叶子结点,其余各层上每个结点都有m棵非空子树,如果按层次自上至下,从左到右顺序从1开始对全部结点编号,回答下列问题: (1)各层的结点数目是多少? (2)编号为n的结点的父结点如果存在,编号是多少? (3)编号为n的结点的第i个孩子结点如果存在,编号是多少? (4)编号为n的结点有右兄弟的条件是什么?其右兄弟的编号是多少? 6. 找出所有满足下列条件的二叉树: (1)它们在先序遍历和中序遍历时,得到的遍历序列相同; (2)它们在后序遍历和中序遍历时,得到的遍历序列相同; (3)它们在先序遍历和后序遍历时,得到的遍历序列相同; 7. 假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请写出该二叉树的后序遍历序列。 8. 假设一棵二叉树的后序序列为DCEGBFHKJIA,中序序列为DCBGEAHFIJK,请写出该二叉树的后序遍历序列。 9. 给出如图1所示的森林的先根、后根遍历结点序列,然后画出该森林对应的二叉树。 10.给定一组权值(5,9,11,2,7,16),试设计相应的哈夫曼树。

数据结构综合练习题及答案.doc

数据结构(一) 一、选择题 1.组成数据的基本单位是(C )。 (A)数据项(B)数据类型(C)数据元素(D)数据变最 2.设数据结构A=(D, R),其中D={1, 2, 3, 4}, R={r}, r={, <2, 3>, <3, 4>, <4, 1>},则数据结构 人是(C )o (A)线性结构(B)树型结构(C)图型结构(D)集合 3、数组的逻辑结构不同于下列(D )的逻辑结构。 (A)线性表(B)栈(C)队列(D)树 4、二叉树中第i (i$l)层上的结点数最多有(C )个。 (A) 2i (B) 21(C) 2i_1(D) 2i-l 5、设指针变量p指向单链表结点A,则删除结点A的后继结点B需要的操作为(A )。 (A) p->next=p-〉next-〉next (B) p=p->next (C) p二p->next->next (D) p->next=p 6、设栈S和队列Q的初始状态为空,元素El、E2、E3、E4、E5和E6依次通过栈S, —个元素出栈后即进入队列Q,若6个元素出列的顺序为E2、E4、E3、E6、E5和E1,则栈S的容量至少应该是(C )。 (A) 6 (B) 4 (C) 3 (D) 2 7、将10阶对称矩阵压缩存储到一维数组A屮,则数组A的长度最少为(C )0 (A) 100 (B) 40 (C) 55 (D) 80 8、设结点A冇3个兄弟结点H.结点B为结点A的双亲结点,则结点B的度数数为(B )。 (A) 3 (B) 4 (0 5 (D) 1 9、根据二义树的定义可知二义树共有(B )种不同的形态。 (A) 4 (B) 5 (0 6 (D) 7 10、设有以下四种排序方法,则(B )的空间复杂度最人。 (A)冒泡排序(B)快速排序(C)堆排序(D)希尔排序 11、以下说法正确的是(A ) A.连通图的牛成树,是该连通图的一个极小连通子图。 B.无向图的邻接矩阵是对称的,有向图的邻接矩阵一定是不对称的。 C.任何一个有向图,其全部顶点可以排成一个拓扑序列。 0.有回路的图不能进行拓扑排序。 12、以下说法错误的是(D ) A.—般在哈夫曼树屮,权值越人的叶了离根结点越近 B.哈夫曼树中没有度数为1的分支结点 C.若初始森林中共有n裸二叉树,最终求得的哈夫曼树共有2n-l个结点 D.若初始森林中共冇n裸二叉树,进行2n-l次合并后才能剩下一棵授终的哈夫曼树 13、如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则 该图一定是(B) A.完全图 B.连通图 C.有回路 D.—棵树 14、将一棵有50个结点的完全二叉树按层编号,则对编号为25的结点x,该结点(B ) A.无左、右孩了 B.有左孩了,无右孩了 C.有右孩了,无左孩了 D.有左、右孩了 15、深度为6的二叉树最多有(B )个结点 A. 64 B. 63 C. 32 D. 31 16、一个有序顺表有255个对彖,采用顺序搜索法查表,搜索长度为(A )o A、128 B、127 C、126 D、255 17、在冇向图中每个顶点的度等于该顶点的(C )o A.入度 B.出度 C.入度与出度之和 D.入度与出度之差 18、具有n个顶点的有向无坏图最多可包含(D )条有向边。 A. n-1 B. n C. n(n-l)/2 D. n(n-l) 19、用邻接表作为有向图G的存储结构。设有n个顶点、e条弧,则拓扑排序的时间复杂度为(B )

相关主题
相关文档
最新文档