最新湖南大学数据结构第5次作业
湖南大学数据结构实验

HUNAN UNIVERSITY数据结构实验报告题目:实验5四则运算表达式求值学生姓名谢毅学生姓名冯吉禹学生姓名吕志远学生学号20110806109学生学号20110806110学生学号20110806114专业班级信息安全1101班指导老师夏艳完成日期2013 年04 月 19日一.需求分析1、利用二叉树后序遍历来实现表达式的转换,同时可以使用实验3的结果来求解后缀表达式的值。
2、输入输出格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。
输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。
输入:21+23*(12-6)输出:21 23 12 6 -*+一.概要设计抽象数据类型1.使用二叉树来实现2.本程序包含四个基本模块①主程序模块:建树的过程②没有括号时的输入③有括号时的输入○4后序输出三﹑算法(C++)物理数据类型建树的时候对于优先级比较高的符号最为子结点插入,对于优先级比较低的则作为父结点插入,数据直接插入在字符的左右子结点位置。
/*问题描述四则运算表达式求值,将四则运算表达式用中缀表达式,然后转换为后缀表达式,并计算结果。
基本要求使用二叉树来实现。
实现提示利用二叉树后序遍历来实现表达式的转换,同时可以使用实验3的结果来求解后缀表达式的值。
输入输出格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。
输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。
*/#include<iostream.h>#include <stdio.h>/*二叉树的节点类*/class Node{public:int num;//元素char c;//操作符Node* lc;//左指针Node* rc;//右指针Node* pa;//父指针Node(int num,Node* lc=NULL,Node* rc=NULL){this->num=num;this->lc=lc;this->rc=rc;}Node(char c,Node* lc=NULL,Node* rc=NULL){this->c=c;this->lc=lc;this->rc=rc;}bool isLeaf(){return (lc==NULL)&&(rc==NULL);}};void Nomal(char &t,char &c,Node* &one,Node* &two);//正常输入void UNomal(char &t,char &c,Node* &one,Node* &two);//带括号输入void BHVisit(Node* root);/*二叉树类*/class TwoTree{private:Node* root;//根节点Node* present;//当前表达式节点public:TwoTree(){root=NULL;present=root;}Node* getroot(){return root;}bool gt(Node* two,Node* present)//比较优先级的函数{char ct=two->c;char cp=present->c;if(ct=='*'||ct=='/')if(cp=='+'||cp=='-')return true;return false;}void insert(Node* one,Node* two=NULL)//向插入的方法{cout<<" 要插入了 "<<one->num<<" "<<two->c<<endl;if(root==NULL){root=two;root->lc=one;one->pa=root;present=root;return;}if(two->c=='\n'){present->rc=one;one->pa=present;return;}if(gt(two,present))//如果输入的操作符的优先等级大于当前指针的优先级{two->lc=one;one->pa=two;present->rc=two;two->pa=present;present=two;return;}present->rc=one;while(!gt(two,present)&&present!=root)//如果输入的操作符的优先等级不大于当前指针的优先级{present=present->pa;//指向父节点}if(gt(two,present))//如果输入的操作符的优先等级大于当前指针的优先级{two->lc=present->rc;present->rc->pa=two;present->rc=two;two->pa=present;present=two;return;}else{two->lc=present;present->pa=two;root=two;present=two;}}};void main(){TwoTree tt;Node* root;Node* one;Node* two;char c,t;int index=0;cout<<"请输入一个中缀表达式"<<endl;while(1){t=getchar();cout<<t<<endl;if(t!='(')Nomal(t,c,one,two);elseUNomal(t,c,one,two);tt.insert(one,two);if(c=='\n')break;}root=tt.getroot();BHVisit(root);return;}void Nomal(char &t,char &c,Node* &one,Node* &two) {int num;num=t-'0';cout<<num<<"--------"<<endl;c=getchar();one=new Node(num);two=new Node(c);}void UNomal(char &t,char &c,Node* &one,Node* &two) {int num;TwoTree ttp;while(1){t=getchar();num=t-'0';cout<<num<<"+++++++++++"<<t<<endl;c=getchar();if(c==')'){char cp='\n';c=getchar();one=new Node(num);two=new Node(cp);ttp.insert(one,two);break;}one=new Node(num);two=new Node(c);ttp.insert(one,two);}one=ttp.getroot();two=new Node(c);}void BHVisit(Node* root)//后序遍历函数{if(root==NULL)return;BHVisit(root->lc);BHVisit(root->rc);if(root->isLeaf())cout<<root->num<<" ";elsecout<<root->c<<" ";}六.算法的时间复杂度:整个程序的时间复杂度是O(n).七.实验心得谢毅:本次实验相对上次实验来说难度提升比较大,刚开始的时候觉得无从下手,后来翻阅了书上的关于树的内容,并且和同学们经过了讨论,终于想出了这次实验的建树方式。
2022年湖南大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)

2022年湖南大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、已知广义表LS=((a,b,c),(d,e,f)),用head和tail数取出LS中原子e 的运算是()。
A.head(tail(LS))B.tail(head(LS))C.head(tail(head(tail(LS))))D.head(tail(tail(head(LS))))2、下述文件中适合于磁带存储的是()。
A.顺序文件B.索引文件C.哈希文件D.多关键字文件3、连续存储设计时,存储单元的地址()。
A.一定连续B.一定不连续C.不一定连续D.部分连续,部分不连续4、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V75、下列关于AOE网的叙述中,不正确的是()。
A.关键活动不按期完成就会影响整个工程的完成时间B.任何一个关键活动提前完成,那么整个工程将会提前完成C.所有的关键活动提前完成,那么整个工程将会提前完成D.某些关键活动若提前完成,那么整个工程将会提前完成6、已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s!=t)时,i=j=5,则下次开始匹配时,i和j的值分别()。
A.i=1,j=0 B.i=5,j=0 C.i=5,j=2 D.i=6,j=27、下列选项中,不能构成折半查找中关键字比较序列的是()。
数据结构与算法期末试卷(湖南大学)-附答案

) 个结点的左、右孩子中,其左孩子编号小于右孩子编号。则可采用(? )次序的遍历实现
学号:
编号。
(A)先序 (B)中序 (C)后序 (D)从根开始的层次遍历
6.若线性表中采用二分查找法查找元素,该线性表应该( )。
湖
(A)元素按值有序
(B)采用顺序存储结构
南
(C)元素按值有序,且采用顺序存储结构(D)元素按值有序,且采用链式存储结构
答 案
用 Prim 算法得到最小生成树,试写出在最小生成树中依次得到的各条边。
不
得 超
四、算法设计。(每题 10 分,共 30 分)
过
1.统计出单链表 L 中结点的值等于给定值 X 的结点数。
此 线
int CountX(LNode* L, ElemType x)
)
2.将下面的二分查找算法填写完整。
int Binsch(ElemType A[],int low,int high,KeyType K)
1.下面给出了一段程序,该程序的时间复杂度为
。
int sum (int n) /*n 为一个正整数*/
{
int sum=0, i, j;
for (i=1;i<=n;i++)
{
p=i;
for (j=1;j<=i;j++) p*=j;
sum+=p;
}
return (sum);
} 2. 向一个长度为 n 的顺序表的第 i 个元素(1≤i≤n+1)之前插入一个元素时,需向后移动
答 案
(A)空或只有一个结点
(B)高度等于其结点数
不
(C)任一结点无左孩子
数据结构第五章自测题及解答

一、概念题(每空1分,共53分)1.树(及一切树形结构)是一种“________”结构。
在树上,________结点没有直接前趋。
对树上任一结点X来说,X是它的任一子树的根结点惟一的________。
2.由3个结点所构成的二叉树有种形态。
3.一棵深度为6的满二叉树有个分支结点和个叶子。
4.一棵具有257个结点的完全二叉树,它的深度为。
5.二叉树第i(i>=1)层上至多有______个结点;深度为k(k>=1)的二叉树至多有______个结点。
6.对任何二叉树,若度为2的节点数为n2,则叶子数n0=______。
7.满二叉树上各层的节点数已达到了二叉树可以容纳的______。
满二叉树也是______二叉树,但反之不然。
8.设一棵完全二叉树有700个结点,则共有个叶子结点。
9.设一棵完全二叉树具有1000个结点,则此完全二叉树有个叶子结点,有个度为2的结点,有个结点只有非空左子树,有个结点只有非空右子树。
10.一棵含有n个结点的k叉树,可能达到的最大深度为,最小深度为。
11.二叉树的基本组成部分是:根(N)、左子树(L)和右子树(R)。
因而二叉树的遍历次序有六种。
最常用的是三种:前序法(即按N L R次序),后序法(即按次序)和中序法(也称对称序法,即按L N R次序)。
这三种方法相互之间有关联。
若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是。
12.中序遍历的递归算法平均空间复杂度为。
13.二叉树通常有______存储结构和______存储结构两类存储结构。
14.如果将一棵有n个结点的完全二叉树按层编号,则对任一编号为i(1<=i<=n)的结点X有:(1)若i=1,则结点X是______;若i〉1,则X的双亲PARENT(X)的编号为______。
(2)若2i>n,则结点X无______且无______;否则,X的左孩子LCHILD(X)的编号为______。
数据结构五详细答案

习题 51.填空题(1) __________________________________________________________________________ 已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为( _______________________ )。
答案:129(2) 3 个结点可构成( ___________ )棵不同形态的二叉树。
答案: 5(3) __________________________________________________________________________ 设树的度为5,其中度为1~5 的结点数分别为6、5、4、3、2 个,则该树共有( ________________ ) 个叶子。
答案:31(4)在结点个数为n (n>1)的各棵普通树中,高度最小的树的高度是( ___________ ),它有( ____________ )个叶子结点,( ______________ )个分支结点。
高度最大的树的高度是( ____________ ),它有( ____________ )个叶子结点,( ______________ )个分支结点。
答案: 2 n-1 1 n 1 n-1( 5)深度为k 的二叉树,至多有( ______________ )个结点。
答案:2k-1(6)(7)有n 个结点并且其高度为n 的二叉树的数目是( _________________ ) 。
n-1答案:2( 8)设只包含根结点的二叉树的高度为0,则高度为k 的二叉树的最大结点数为( ___________ ),最小结点数为( ______________ ) 。
答案:2k+1-1 k+1(9)将一棵有100个结点的完全二叉树按层编号,则编号为49的结点为X,其双亲PARENT(X )的编号为()。
答案:24(10)已知一棵完全二叉树中共有______________ 768 个结点,则该树中共有( )个叶子结点。
湖南大学操作系统作业 (5)

操作系统第五次作业第八章Explain the difference between internal and external fragmentation.简述内部碎片和外部碎片的区别答:内部碎片存在于块的内部,如内存块大小为512k,而某逻辑内存要求一个200k大小的块,此时操作系统会分配给它一个大小为512k的块(由于块是内存分配的最小单元),所以会造成了312k大小的内存碎片,这部分碎片即使是空的也无法使用,称作内部碎片。
减少内部碎片可以通过减小块的大小来解决。
外部碎片是指在连续内存分配的进程装入和移出内存的过程中,空闲的内存空间被分成了较多小片段,这些小片段不连续,所以无法被连续分配,这样会造成即使碎片大小之和大于新进程所需内存,但是也无法给新进程分配的情况,这就是外部碎片。
外部碎片可以通过紧缩来解决。
Given five memory partitions of 100 KB, 500 KB, 200 KB,300 KB, and 600KB (in order), how would each of the first-fit,best-fit, and worst-fit algorithms place processes of 212 KB,417 KB, 112 KB, and 426 KB (in order) Which algorithm makes the most efficient use of memory给出100kb,500kB,200kB,300kB,600kB大小的内存空间(按顺序),对于首次适应,最佳适应和最差适应算法,要按顺序放置212kB,417kB,112kB和426kB 大小的进程会是怎样安排的哪个算法的内存利用率最高答:首次适应是每次从头开始找,直到找到第一个比当前要放置的内存大小要大的内存空间时,放置该内存。
最佳适应是每次遍历内存空间一次,找大于当前要放置的内存块大小要大的中间的最小者,放置该内存。
数据结构第5章作业参考答案

第5章树和二叉树一、单项选择题1.以下说法错误的是(B )。
A. 存在这样的二叉树,对其采用任何次序的遍历其结点访问序列均相同B. 二叉树是树的特殊情形C. 满二叉树中所有叶结点都在同一层上D. 在二叉树只有一棵子树的情况下,也要指出是左子树还是右子树2.树最适合用来表示( C)。
A.有序数据元素B.无序数据元素C.元素之间具有分支层次关系的数据D.元素之间无联系的数据3.下列叙述正确的是(C )。
A. 二叉树是度为2的有序树B. 完全二叉树一定存在度为1的结点C. 深度为k的二叉树中结点总数≤2k-1D. 对于有n个结点的二叉树,其高度为⎣log2n⎦+14.按照二叉树的定义,具有三个节点的二叉树有( C )种。
A.3B.4C.5D.65.下列叙述中正确的是(C )。
A. 二叉树是度为2的有序树B. 二叉树中的结点只有一个孩子时无左右之分C. 二叉树中每个结点最多只有两棵子树,并且有左右之分D. 二叉树若存在两个结点,则必有一个为根,另一个为左孩子6.设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为N2,则下列等式成立的是( C )。
A.N0=N1+1 B.N=Nl+N2C.N=N2+1 D.N=2N1+17.设按照从上到下、从左到右的顺序从1开始对完全二叉树进行顺序编号,则编号为i结点的左孩子结点的编号为( B )。
A. 2i+1B.2iC.i/2D.2i-18.有100个结点的完全二叉树由根开始从上到下从左到右对结点进行编号,根结点的编号为1,编号为46的结点的右孩子的编号为( C )A.50 B.92 C.93 D.869.若一棵有n个结点的树,则该树中的度之和为(C )。
A. n+1B. nC. n-1D. 不确定10.已知完全二叉树有90个结点,则整个二叉树有( B )个度为1的结点。
A 0B 1C 2D 不确定11.一棵完全二叉树上有1001个结点,其中叶子结点的个数是(C )。
《数据结构》第五章习题参考答案

《数据结构》第五章习题参考答案一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、知道一颗树的先序序列和后序序列可唯一确定这颗树。
( ×)2、二叉树的左右子树可任意交换。
(×)3、任何一颗二叉树的叶子节点在先序、中序和后序遍历序列中的相对次序不发生改变。
(√)4、哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。
(√)5、用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
( ×)6、完全二叉树中,若一个结点没有左孩子,则它必是叶子结点。
( √)7、一棵树中的叶子数一定等于与其对应的二叉树的叶子数。
(×)8、度为2的树就是二叉树。
(×)二、单项选择题1.具有10个叶结点的二叉树中有( B )个度为2的结点。
A.8 B.9 C.10 D.112.树的后根遍历序列等同于该树对应的二叉树的( B )。
A. 先序序列B. 中序序列C. 后序序列3、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG 。
该二叉树根的右子树的根是:( C )A. EB. FC. GD. H04、在下述结论中,正确的是( D )。
①具有n个结点的完全二叉树的深度k必为┌log2(n+1)┐;②二叉树的度为2;③二叉树的左右子树可任意交换;④一棵深度为k(k≥1)且有2k-1个结点的二叉树称为满二叉树。
A.①②③B.②③④C.①②④D.①④5、某二叉树的后序遍历序列与先序遍历序列正好相反,则该二叉树一定是( D )。
A.空或只有一个结点B.完全二叉树C.二叉排序树D.高度等于其结点数三、填空题1、对于一棵具有n个结点的二叉树,对应二叉链接表中指针总数为__2n____个,其中___n-1_____个用于指向孩子结点,___n+1___个指针空闲着。
2、一棵深度为k(k≥1)的满二叉树有_____2k-1______个叶子结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
1、画出对下列存储于数组中的值执行buildheap后得到的最大值堆:
2
10 5 12 3 2 1 8 7 9 4
3
4
先序遍历为12 10 4 1 2 9 5 8 3 7
5
中序遍历为1 4 2 10 5 9 12 3 8 7
6
7
2、假设某字母表各个字母的权如下:
8
Q Z F M T S O E
9
2 3 10 10 10 15 20 30
10
(a)按照这个字母表,一个包含n个字母的字符串采用Huffman编码在最差情
11
况下需要多少位?怎样的串会出现最差情况?
12
13
在最差的情况下需要5*n位,当所有的字母都是Q或者Z的时候。
(b)按照这个字母表,包含n个字母的字符串采用Huffman编码在最佳情况
14
15
下需要多少位?怎样的串会出现最佳情况?
16
在最佳的情况下需要2*n位,当所有的字母都是E或者O的时候。
17
(c)按照一个字母表,一个字母平均需要多少位?
18
(2*30 + 2*20 + 3*15 + 3*10 + 3*10 + 4*10 + 5*3+ 5*2)/100 =2.7
19
∴ 2.7
20
3、编写一个算法来判断两棵树是否相同。
尽可能提高算法效率,并分析算法21
的运行时间代价。
22
template <class Elem>
23
bool Compare(GTNode<Elem>* tree1, GTNode<Elem>* tree2) {
24
GTNode<Elem> *num1, *num2;
25
if (((tree1 == NULL) && (tree2 != NULL)) ||
26
((tree2 == NULL) && (tree1 != NULL)))
27
return 0;
28
if ((t1 == NULL) && (t2 == NULL)) return 1;
29
if (tree1->val() != tree2->val()) return 0;
Num1 = tree1->left_child();
30
31
Num2 = tree2->left_child();
32
while(!((num1 == NULL) && (num2 == NULL))) {
if (!Compare(num1, num2)) return false;
33
34
if (num1 != NULL) num1 = num1->right_value();
35
if (num2 != NULL) num2 = num2->right_value();
36
}}
37
38
O(n)
39
4、编写出一个函数,以一棵树为输入,返回树的结点数目。
要求使用下面给40
出的GenTree和GTNode ADT。
41
// General tree node ADT
42
Template <class Elem> class GTNode {
43
Public:
44
GTNode (const Elem&); // Constructor
45
~GTNode ( ); // Destructor
46
Elem value ( );
47
Bool isLeaf ( );
48
GTNode * parent ( );
GTNode * right_sibling ( );
49
50
Void setValue ( Elem &);
51
Void insert_first(GTNode <Elem>* n); // Insert first child
Void insert_next(GTNode <Elem> * n); // Insert next sibling
52
53
Void remove_first ( ); // Remove first child
54
Void remove_next ( ); // Remove right sibling
55
};
56
//General tree ADT
57
Template <class Elem> class GenTree {
58
Private:
59
Void printhelp ( GTNode *) ; // Print helper function 60
Public :
61
GenTree ( ); //Constructor
62
~GenTree ( ); //Destructor
63
Void clear ( ); // Send nodes to free store
64
GTNode* root ( ); // Retrun the root
65
// Combine two subtrees
66
Void newroot (Elem& , GTNode <Elem>* ,GTNode<Elem>* );
67
Void print ( ); // print a tree
};
68
69
70
template <class Elem>
71
int gencount(GTNode<Elem>* subroot) {
72
if (subroot == NULL) return 0
73
int count = 1;
74
GTNode<Elem>* temp = rt->leftmost_child();
75
while (temp != NULL) {
76
count += gencount(temp);
77
temp = temp->right_sibling();
78
}
79
return count;
80
}
81
82
5、对下列用(6.3)式编码方法写出的树的顺序表示,画出树的形状。
83
XPC)Q)RV)M))))
84。