工大数据结构第三章作业

工大数据结构第三章作业
工大数据结构第三章作业

工大数据结构第三章作业

————————————————————————————————作者:————————————————————————————————日期:

数据结构与算法上机作业第三章树

一、选择题

1、在一棵树中,如果结点A有3个兄弟,B是A的双亲,则B的度为D

?A.1 B.2?C. 3?D.4

2、深度为h的完全二叉树至少有D个结点,至多有B个结点

?A. 2h??B. 2h-1?C. 2h+1 D.2h-1

2^(h-1)-1 +1=2^(h-1)

前(n-1)层满,第h层只有一结点

3、具有n个结点的满二叉树有C个叶结点。

A.n/2 B.(n-1)/2?C. (n+1)/2?D.n/2+1

因为二叉树中,有这样一个性质,如果其终端结点数(也就是叶子节点)的个数为n1,度为2的结点数为n2,则n1=n2+1;?假设叶子节点有x个,则度为2的个数为x-1:

所以:2x-1=n;所以x = (n+1)/2 (满二叉树)

所以叶子节点个数为:(n+1)/2

非终端结点为:(n+1)/2-1

4、一棵具有25个叶结点的完全二叉树最多有B个结点。

A. 48??

B. 49?C.50 ?D. 51

5、已知二叉树的先根遍历序列是ABCDEF,中根遍历序列是CBAEDF,则后根遍历序列是A。

?A. CBEFDA??B.FEDCBA??C. CBEDFA D. 不定

6、具有10个叶结点的二叉树中有B个度为2的结点。

A.8??B.9 C. 10 ?D. 11

7、一棵非空二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足C。

A.所有非叶结点均无左孩子? B.所有非叶结点均无右孩子

C. 只有一个叶子结点??D.A和B同时成立

8、在线索二叉树中,t所指结点没有左子树的充要条件是B。

?A. t->left=NULL???B. t->ltag=TRUE?

C. t->ltag=TRUE且t->left=NULL?

D. 以上都不对

9、n个结点的线索二叉树上含有的线索数为C。

A.2n B.n-1 ?C. n+1 D.n

n-1表示结点的左右子树,其余n-1指针为空

线索取代原来的空链

10、二叉树按照某种顺序线索化后,任一结点都有指向其前驱和后继的线索,这种说法B。

A.正确?B.错误 C.不确定? D. 都有可能

11、具有n(n>1)个结点的完全二叉树中,结点i(2i>n)的左孩子结点是D。

?A. 2i B.2i+1 C.2i-1 D. 不存在

12、具有64个结点的完全二叉树的深度为C。

A.5???B.6??C.7???D. 8

13、将一颗有100个结点的完全二叉树从上到下、从左到右一次对结点进行编号,根结点的编号为1,则编号为45的结点的右孩子的编号为C。

?A. 46??B. 47 C. 90 D.91

2i举个简单的例子就可以看出来,比如7个节点时(也就是三层时),编号为1的左子树编号是2,编号2的左子树是4,编号3的左子树编号为6。。。。以此就可以看出来。

左结点是2i,右结点才是2i+1

14、在结点数为n的堆中插入一个结点时,复杂度为C。

A. O(n)?B. O(n2) ?C. O(log2n) D. O(log n2)

15、两个二叉树是等价的,则它们满足D。

A.它们都为空???B.它们的左右子树都具有相同的结构

?C.它们对应的结点包含相同的信息??D. A、B和C

16、包含n个元素的堆的高度为 C 。(符号「a表示取不小a最小整数)

A.n??B. 「log2n C. 「log2(n+1)?D. n+1

17、以下说法错误的是B。

?A. 存在这样的二叉树,对其采用任何次序的遍历其结点访问序列均相同

?B.二叉树是树的特殊情形

C. 由树转换成二叉树,其根结点的右子树总是空的

D. 在二叉树中只有一棵子树的情形下,也要指出是左子树还是右子树

18、设F是一个森林,B是由F变换得到的二叉树。若F中有n个非终端结点,则B中没有右孩子的结点有C个。

A. n-1 ?

B. n??

C. n+1

D. n+2

19、将一棵树T转换为二叉树B,则T的后根序列是B的B。

A. 先根序列??B. 中根序列 C.后根序列??D. 层次序列

20、将一棵树转换为二叉树后,这颗二叉树的形态是 A 。

?A. 唯一的,根结点没有左孩子B. 唯一的,根结点没有右孩子

?C.有多种,根结点都没有左孩子D.有多种,根结点都没有右孩子

树转换成二叉树,根节点是没有右孩子的,这由转换规则应该不难理解,且转换规则是唯一的,所以转换成的二叉树是唯一的

21、设树T的度为4,其中度为1, 2, 3, 4的结点个数分别为4, 2, 1, 1,则T中的叶结点的个数为 D 。

A. 5 ?

B. 6

C.7

D. 8

22、设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为M1, M2,M3。与森林F对应的二叉树根结点的右子树上的结点个数为D。

A. M1-1?B.M1+M2? C. M2??D.M2+M3

23、若以二叉树的任一结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是C。

A. 二叉排序树?B.哈夫曼树C.堆?D.线索二叉树

24、用5个权值{3, 2,4,5,1}构造的哈夫曼树的带权路径长度是B。

A. 32??

B. 33

C.34?D.15

二、填空题

1、一棵二叉树有67个结点,结点的度是0和2。问这棵二叉树中度为2的结点有33个。

2、含A,B, C三个结点的不同形态的二叉树有5棵。

3、含有4个度为2的结点和5个叶子结点的完全二叉树,有1或0个度为1的结点。

4、具有100个结点的完全二叉树的叶子结点数为50。

5、在用左右链表示的具有n个结点的二叉树中,共有2n 个指针域,其中n-1 个指针域用于指向其左右孩子,剩下的n+1个指针域是空的。

6、如果一颗完全二叉树的任意一个非终结结点的元素都不小于其左儿子结点和右儿子结点(如果有的话)的元素,则称此完全二叉树为最大堆。

7、堆是一种特殊形式的完全二叉树,对于最大堆而言,其根结点的元素的值应该是所有结点元素中最大的。

8、二叉树的复制是指按照一棵已知的二叉树复制一个副本,使两者等价。复制二叉树最长用的方法是后根遍历递归算法。

9、在定义堆时,通常采用结构体方式定义相应的二叉树,这样可以很容易实现其相关操作。

10、在构建选择树时,根据孩子结点的获胜者确定他们双亲结点所得到的选择树称为胜者树。根据孩子结点的失败者确定他们双亲结点所得到的选择树称为败者树。

11、树的表示方法包括数组、邻接表和左右链。

12、表达式(a+b*(c-d))-e/f的波兰式(前缀式)是-+a*b-cd

/ef ,逆波兰式(后缀式)是abcd-*+ef/- 。

13、设F是由T1、T2、T3三棵树组成的森林,与F对应的二叉树为B。已知T1, T2,T3的结点数分别为n1,n2和n3,则二叉树B的左子树中有n1-1个结点,二叉树B的右子树中有n2+n3个结点。

14、设二叉树的中根序列为ABCDEFG,后根序列为BDCAFGE。则该二叉树的先根序列为

EACBDGF 。该二叉树对应的森林中包含2棵树。

15、先根次序遍历森林等同于按先根遍历对应的二叉树,后根次序遍历森林等同与按中根遍历对应的二叉树。

16、一棵哈夫曼树有19个结点,则其叶子结点的个数为10。

17、设有数据WG={7,19, 2,6, 32,3, 21, 10}叶节点权重集合,则所构建哈夫曼树的高是5,带权路径长度WPL为169。

18、设有一份电文中共使用6个字符a,b, c, d, e,f,其中出现频率依次为2,3,4,7,8,19,则字符c的哈夫曼编码是001,电文编码的总长度为80 。

20、在有n个结点的哈夫曼树中,叶子结点总数为(n+1)/2,非叶结点的总数为(n -1)/2。

三、试分别画出具有4个结点的二叉树的所有不同形态。

四、已知一棵二叉树的中根序列和后根序列分别是BDCEAHFG和DECBHGFA,请画出此二叉树。

五、已知非空二叉树T,写一个算法,求度为2的结点的个数。

要求:

?1、定义二叉树的抽象数据类型和型BTREE,并定义基本操作。

2、编写函数count2(BTREET),返回度为2的节点的个数。

3、在主函数中,构建一个二叉树,并验证所编写的算法。

六、用递归方法写一个算法,求二叉树的叶子结点数int leafnum(BTREE T)。要求:

1、定义二叉树的抽象数据类型和型BTREE,并定义基本操作。

2、编写函数leafnum(BTREE T),返回树T的叶子节点的个数。在主函数中,构建一个二叉树,并验证所编写的算法。

七、画出下图所表示的二叉树的中序线索二叉树和先序线索二叉树。

八、已知二叉树的先根序列是AEFBGCDHIKJ,中根序列是EFAGBCHKIJD,画出此二叉树,并画出后序线索二叉树。

九、在中序线索二叉树中插入一个结点Q作为树中某个结点P的左孩子,试给出相应的算法。

要求:

1、定义中序线索二叉树的型THTREE以及基本操作。

2、定义函数voidLInsert(THTREE P, THTREE Q);实现题目要求的操作。

在主函数中,利用操作RInsert和LInsert构造一个线索二叉树,并中序输出二叉树的结点的元素,验证结果。

#include

#include<iomanip>

#include<cmath>

#include

#include<string>

using namespace std;

typedef intelementtype;

struct node{//节点的型

node*lchild;

node* rchild;

bool ltag;

?bool rtag;

?elementtype element;

};

typedefnode*head;//指向树根root

typedef node* tree;//指向线索树的根节点

void makeNull(head&h)//将线索二叉树置空

h->lchild=h;

h->ltag=false;

?h->rchild=h;

?h->rtag=true;

head pointTotree(head& h,tree& t)//令head指向tree,注意head指向的并不是根节点,tree指向根节点

{

?h->lchild=t;

?h->rchild=h;

?h->ltag=true;

?h->rtag=true;

returnh;

//中根遍历的下一个节点

node*inNext(node*p)

{

?node*q=p->rchild;

?if(p->rtag==true)//如果有右子树,找出右子树的最左节点

??while(q->ltag==true)

??q=q->lchild;

?returnq;

//中根遍历的上一个节点

node* inPre(node* p)

{

node *q=p->lchild;

if(p->ltag==true)//如果P的左子树存在,则其前驱结点为左子树的最右结点??while(q->rtag==true)

?q=q->rchild;

returnq;//左子树的最右结点

}

//中序遍历

void thInOrder(head h)

{

?node* temp;

?temp=h;

?do{

??temp=inNext(temp);

if(temp!=h)

??cout<<temp->element<<" ";

?}while(temp!=h);

//插入右孩子

void rInsert(node*s,node* r)

node*w;

?r->rchild=s->rchild;

?r->rtag=s->rtag;

r->lchild=s;

?r->ltag=false;//新插入的节点木有左子树,所以lchild指向的是父节点

?s->rchild=r;

?s->rtag=true;//原节点的右孩子为新插入的节点

if(r->rtag==true){

?//这里是神马意思呢∑q|?Д?|p,就是如果被插节点s有右子树,

?//找出被插节点s的的next位置,即右子树中的最左节点,令其lchild指向新添加的节

点r

??//因为插入前该最左节点的lchild指向的是原来节点s

?w=inNext(r);

?w->lchild=r;

}

}

//插入左孩子

voidlInsert(node*s,node*l)

{

?node*w;

l->lchild=s->lchild;

?l->ltag=s->ltag;

l->rchild=s;

l->rtag=false;

?s->lchild=l;

?s->ltag=true;

?if(l->ltag==true){//与插入右孩子方法相似,只需把左右方向对调即可?w=inPre(l);

?w->rchild=l;

?}

}

int main()

{

?head h=newnode;

node*root=new node;

node* lc=newnode;

node* rc=new node;

?node*c=newnode;

root->element=1;

?lc->element=2;

?rc->element=3;

c->element=4;

?

?h->rchild=root;

?h->lchild=h;

?h->ltag=true;

?h->rtag=true;

root->lchild=h;

root->rchild=h;

root->ltag=false;

?root->rtag=false;

?//构造线索树213

lInsert(root,lc);

?rInsert(root,rc);

?thInOrder(h);

?cout<<endl;

//root左边插入C

lInsert(root,c);

?thInOrder(h);

return0;

十、假设现在有如下的元素:7、16、49、82、5、31、6、2、44。画出将每一个元素插入堆中以后的最大堆。

要求:

利用基本操作Insert的基本原理,先用第一个元素7构成一个二叉树,然后将第二个元素16插入该二叉树中,再将第三个元素49插入堆中,……,直到最后一个元素插入为止。上述过程要求画图完成。

十一、编写一个函数,在最大堆中查找任意元素,并分析其时间复杂度。

要求:

1、定义最大堆的型HEAP及其基本操作。

2、定义函数intFind(HEAP H,Elementtype e),查找e是否为堆的元素,如

果是,返回该元素在堆中的位置,如果不是,返回0。(提示:利用最大堆的元素特点进行查找,可降低复杂度)

在主函数中首先构建一个二叉树,然后验证所构造的函数。

typedefstryct{

intkey;

datathpe data;

数据库系统基础课后题

《数据库系统基础》课后练习题 数据库系统基础 课后练习题 哈尔滨工业大学计算机科学与技术学院

《数据库系统基础》课后练习题关系代数、关系元组演算、SQL语言 1.分别用关系代数、元组演算、SQL语句完成CAP数据库的查询。 CAP数据库有四个关系(表): Customers(cid, cname, city, discnt), 客户定义表,描述了客户的唯一标识 cid,客户名称cname,客户所在的城市city,以及该客户购买产品时所可能给予的折扣discnt Agents(aid, aname, city, percent), 代理商定义表,描述了代理商的唯一标识aid, 代理商名称aname, 代理商所在的城市city,以及该代理商销售产品时所可能给予的佣金/提成percent(以百分比形式表达) 哈尔滨工业大学计算机科学与技术学院

《数据库系统基础》课后练习题关系代数、关系元组演算、SQL语言 (1) 找出订单总价大于或者等于$1000的(ordno, pid)对 哈尔滨工业大学计算机科学与技术学院

《数据库系统基础》课后练习题关系代数、关系元组演算、SQL语言 (2) 找出所有价格在$0.50和$1.00之间的商品名字,包括边界价格 哈尔滨工业大学计算机科学与技术学院

《数据库系统基础》课后练习题关系代数、关系元组演算、SQL语言 (3) 找出订单价格低于$500的(ordno, cname)对,使用一次连接 哈尔滨工业大学计算机科学与技术学院

《数据库系统基础》课后练习题关系代数、关系元组演算、SQL语言 (4) 找出所有三月份接受的订单的(ordno, aname)对,使用一次连接 哈尔滨工业大学计算机科学与技术学院

数据结构第1章作业

第1章绪论 一、选择题 1. 算法的计算量的大小称为计算的()。 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于() A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2)这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 4.一个算法应该是()。 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 5. 下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是() (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为()两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 8.以下与数据的存储结构无关的术语是()。 A.循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构()? A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 10.以下那一个术语与数据的存储结构无关?() A.栈 B. 哈希表 C. 线索树 D. 双向链表 11.在下面的程序段中,对x的赋值语句的频度为() FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 12.程序段 FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF A[j]>A[j+1] THEN A[j]与A[j+1]对换;

数据结构第三章习题答案

第三章习题 1.按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答: ⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么? ⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。(即写出 以“S”表示进栈、以“X”表示出栈的栈操作序列)。 2.设队列中有A、B、C、D、E这5个元素,其中队首元素为A。如果对这个队列重复执行下列4步 操作: (1)输出队首元素; (2)把队首元素值插入到队尾; (3)删除队首元素; (4)再次删除队首元素。 直到队列成为空队列为止,得到输出序列: (1)A、C、E、C、C (2) A、C、E (3) A、C、E、C、C、C (4) A、C、E、C 3.给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满? 4.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操 作数栈和运算符栈的变化过程: A-B*C/D+E↑F 5.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’ 模式的字符序列。其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。 6.假设表达式由单字母变量和双目四则运算算符构成。试写一个算法,将一个通常书写形式且书写 正确的表达式转换为逆波兰式。 7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针), 试编写相应的队列初始化、入队列和出队列的算法。 8.要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 以tag为0或1来区分 头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。

数据结构第六章一二次作业

上机题 (1)编写完整程序,用先序遍历法建立二叉树的二叉链 表存储结构。输出该二叉树的先、中、后序遍历结 点访问次序以及层次遍历结点访问次序。(建议结 点数据域类型为char) // erchashu.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include typedef struct node { char data; struct node *lchild, *rchild; }*BiT, BiTNode; BiT crtBT() { char ch; BiT bt; ch=getchar(); if(ch=='#') return NULL; bt=new BiTNode(); bt->data=ch; bt->lchild=crtBT(); bt->rchild=crtBT(); return bt;

} void preorder(BiT bt) { if(bt) { printf("%c",bt->data); preorder(bt->lchild); preorder(bt->rchild); } //printf("\n"); } void midorder(BiT bt) { if(bt) { midorder(bt->lchild); printf("%c",bt->data); midorder(bt->rchild); } //printf("\n"); } void lasorder(BiT bt) { if(bt) { lasorder(bt->lchild); lasorder(bt->rchild); printf("%c",bt->data); } //printf("\n"); } int main(int argc, char* argv[]) { BiT bt; bt=crtBT(); preorder(bt); printf("\n"); midorder(bt); printf("\n"); lasorder(bt); printf("\n"); return 0; } (2)从键盘输入n个数据建立n元完全二叉树顺序存储结

HIT软件学院数据库实验1

哈尔滨工业大学 <<数据库系统>> 实验报告之一 (2014年度春季学期)

实验一交互式SQL语言 一、实验目的 ●掌握SQL语句的语法 ●着重熟悉掌握利用SQL编写Select查询的方法 ●熟悉SQLite的用法 二、实验内容 ●1) 双击打开sqlite3.exe,该程序为SQLite数据库管理系统 ●2) 利用.help查看SQLite支持的控制台系统命令。注意系统命令结尾处 没有结束符“;”

●3) 阅读.help中对.databases 命令的说明,并查看输出结果 ●4) 阅读.help中对.open命令的说明,并使用该命令创建一个数据库(名 字任意)后缀名统一为“.db3”(可以没有后缀名,但不推荐) ●5) 再次运行.databases 命令,与步骤3的输出结果对比 ●6) 阅读.help中对.tables命令的说明,并使用该命令查看当前数据库的所 有表 ●7) 创建满足要求的关系表(使用create table) ●表一 ●表名:College(存储大学的信息) ●属性:cName(字符串存储的大学名字),state(字符串格式的大学所在

州),enrollment(整数形式的大学入学学费) ●表二 ●表名:Student(存储学生的信息) ●属性:sID(整数形式的学号),sName(字符串形式的学生名字),GPA (小数形式的成绩),sizeHS(整数形式的所在高中规模) ●表三 ●表名:Apply(存储学生申请学校的信息) ●属性:sID(整数形式的学号),cName(字符串形式的大学名字),major (字符串形式的专业名字),decision(字符串形式的申请结果) ●8)利用.tables查看当前数据库中的表,对比步骤6中的运行结果 ●9) 利用如下命令,将存储在txt文件中的元组导入数据库的关系中●.separator "," ●.import dbcollege.txt College ●.import dbstudent.txt Student ●.import dbapply.txt Apply

完整版数据结构习题集第3章栈和队列

第3章栈和队列 一、选择题 1.栈结构通常采用的两种存储结构是(A )。 A、顺序存储结构和链表存储结构 B、散列和索引方式 C、链表存储结构和数组 D、线性链表结构和非线性存储结构 2.设栈ST 用顺序存储结构表示,则栈ST 为空的条件是( B ) A、ST.top-ST.base<>0 B、ST.top-ST.base==0 C、ST.top-ST.base<>n D、ST.top-ST.base==n 3.向一个栈顶指针为HS 的链栈中插入一个s 结点时,则执行( C ) A、HS->next=s; B、s->next=HS->next;HS->next=s; C、s->next=HS;HS=s; D、s->next=HS;HS=HS->next; 4.从一个栈顶指针为HS 的链栈中删除一个结点,用x 保存被删除结点的值,则执行( C) A 、x=HS;HS=HS->next; B 、HS=HS->next;x=HS->data; C 、x=HS->data;HS=HS->next; D 、s->next=Hs;Hs=HS->next; 5.表达式a*(b+c)-d 的后缀表达式为( B ) A、abcdd+- B、abc+*d- C、abc*+d- D、-+*abcd 6.中缀表达式A-(B+C/D)*E 的后缀形式是( D ) A、AB-C+D/E* B、ABC+D/E* C、ABCD/E*+- D、ABCD/+E*- 7.一个队列的入列序列是1,2,3,4,则队列的输出序列是( B ) A、4,3,2,1 B、1,2,3,4 C、1,4,3,2 D、3,2,4,1 8.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为空的条件是() A、Q.rear-Q.front==n B、Q.rear-Q.front-1==n C、Q.front==Q.rear D、Q.front==Q.rear+1 9.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为满的条件是() A、Q.front==Q.rear B、Q.front!=Q.rear C、Q.front==(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n 10.若在一个大小为6 的数组上实现循环队列,且当前rear 和front 的值分别为0 和3,当从 队列中删除一个元素,再加入两个元素后,rear 和front 的值分别为() A、1,5 B、2, 4 C、4,2 D、5,1 11.用单链表表示的链式队列的队头在链表的()位置 A、链头 B、链尾 C、链中 12.判定一个链队列Q(最多元素为n 个)为空的条件是() A、Q.front==Q.rear B、Q.front!=Q.rear C、Q.front==(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n 13.在链队列Q 中,插入s 所指结点需顺序执行的指令是() A 、Q.front->next=s;f=s; B 、Q.rear->next=s;Q.rear=s;

数据结构课程作业

数据结构课程作业_A 交卷时间:2017-08-09 10:08:51 一、单选题 1. (7分)设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置脚注(10)表示用10进制表示。 A. 688 B. 678 C. 692 D. 696 纠错 得分: 7 知识点:第五章 展开解析 答案 C 解析第五章第二节综合题目 2. (7分)若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( ) A. 1,2,3 B. 9,5,2,3 C. 9,5,3 D. 9,4,2,3 纠错 得分: 0 知识点:第九章 展开解析 答案 D 解析第九章第一节有序表的查找

(7分)设某完全无向图中有n个顶点,则该完全无向图中有()条边。 A. n(n-1)/2 B. n(n-1) C. n2 D. n2-1 纠错 得分: 7 知识点:第七章 展开解析 答案 A 解析第七章第一节综合题目 4. (7分)若在任意一棵二叉树中,有n0个叶子结点,有n2个度为2的结点,则:n0=_____ A. n2+1 B. n2-1 C. n2+2 D. n2-2 纠错 得分: 7 知识点:第六章 展开解析 答案 A 解析第六章第二节二叉树的性质 5. (7分)栈的插入和删除操作在()进行。 A. 栈顶 B. 栈底 C. 任意位置 D. 指定位置

得分: 7 知识点:第三章 展开解析 答案 A 解析第三章第一节栈的表示和实现 6. (7分)设有序表中有1000个元素,则用二分查找查找元素X最多需要比较()次。 A. 25 B. 10 C. 7 D. 1 纠错 得分: 7 知识点:第九章 展开解析 答案 B 解析第九章第一节有序表的查找 7. (7分)设某棵二叉树的高度为10,则该二叉树上叶子结点最多有()。 A. 20 B. 256 C. 512 D. 1024 纠错 得分: 7 知识点:第六章 展开解析 答案 C 解析第六章第六节二叉树的性质

数据结构作业第1章

第1章绪论 1. 填空 (1)()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 (2)()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。 (3)从逻辑关系上讲,数据结构主要分为()、()、()和()。 (4)数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。 (5)算法具有五个特性,分别是()、()、()、()、()。 (6)在一般情况下,一个算法的时间复杂度是()的函数。 (7)设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。 2. 选择题 ⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链式存储结构中的数据元素之间的逻辑关系是由()表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 ⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。则表示该遗产继承关系的最合适的数据结构应该是()。 A 树 B 图 C 线性表 D 集合 ⑶算法指的是()。 A 对特定问题求解步骤的一种描述,是指令的有限序列。 B 计算机程序 C 解决问题的计算方法 D 数据处理 ⑷下面()不是算法所必须具备的特性。 A 有穷性 B 确切性 C 高效性 D 可行性 ⑸算法分析的目的是(),算法分析的两个主要方面是()。 A 找出数据结构的合理性 B 研究算法中输入和输出的关系 C 分析算法的效率以求改进 D 分析算法的易读性和文档性 E 空间性能和时间性能 F 正确性和简明性 G 可读性和文档性H 数据复杂性和程序复杂性 3. 判断题 (1)算法的时间复杂度都要通过算法中的基本语句的执行次数来确定。 (2)每种数据结构都具备三个基本操作:插入、删除和查找。 (3)逻辑结构与数据元素本身的内容和形式无关。 (4)基于某种逻辑结构之上的基本操作,其实现是唯一的。 4. 分析以下各程序段,并用大O记号表示其执行时间。

数据结构作业及答案

第一章绪论 一、选择题 1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 2 A.结构 B.关系 C.运算 D.算法 2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。 1 A.算法 B.数据元素 C.数据操作 D.逻辑结构 2 A.操作 B.映像 C.存储 D.关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。A.随机存取 B.顺序存取 C.索引存取 D.散列存取 5.算法分析的目的是1,算法分析的两个主要方面其一是指2,其二是指正确性和简单性。1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2 A.空间复杂度和时间复杂度 B.研究算法中的输入和输出的关系 C.可读性和文档性 D.数据复杂性和程序复杂性k 6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。 1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。A.正确 B.不正确 8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。 A.必须连续的 B.部分地址必须连续的 C.一定是不续的D连续不连续都可以 9.以下的叙述中,正确的是。A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。A.正确B.不正确 二、填空题1.数据逻辑结构包括三种类型、和,树形结构和图形结构合称为。2.在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。3.算法的五个重要特性是、、、、。 4.下面程序段的时间复杂度是。 for( i = 0; i < n; i++) for( j = 0; j < m; j++) A[i][j] = 0; 5.下面程序段的时间复杂度是。 i = s = 0; while ( s < n) { i ++; /* i = i +1*/ s += i; /* s = s + i*/ } 6.下面程序段的时间复杂度是。 s = 0; for( i = 0; i < n; i++) for( j = 0; j < n; j++) s += B[i][j]; sum = s; 7.下面程序段的时间复杂度是。 i = 1; while ( i <= n ) i = i * 3;

数据结构第六章树和二叉树习题及答案

习题六树和二叉树 一、单项选择题 1.以下说法错误的是() A. 树形结构的特点是一个结点可以有多个直接前趋 B. 线性结构中的一个结点至多只有一个直接后继 C. 树形结构可以表达(组织)更复杂的数据 D. 树(及一切树形结构)是一种”分支层次”结构 E. 任何只含一个结点的集合是一棵树 2. 下列说法中正确的是() A. 任何一棵二叉树中至少有一个结点的度为2 B. 任何一棵二叉树中每个结点的度都为2 C. 任何一棵二叉树中的度肯定等于2 D. 任何一棵二叉树中的度可以小于2 3. 讨论树、森林和二叉树的关系,目的是为了() A. 借助二叉树上的运算方法去实现对树的一些运算 B. 将树、森林按二叉树的存储方式进行存储 C. 将树、森林转换成二叉树 D. 体现一种技巧,没有什么实际意义4.树最适合用来表示() A. 有序数据元素 B .无序数据元素 C.元素之间具有分支层次关系的数据 D .元素之间无联系的数据 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B .11 C .15 D .不确定 6. 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1, M2和M3与森林F 对应的二叉树根结点的右子树上的结点个数是()。 A.M1 B .M1+M2 C .M3 D .M2+M3 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是() A.250 B .500 C .254 D .505 E .以上答案都不对 8. 设给定权值总数有n 个,其哈夫曼树的结点总数为() A. 不确定 B . 2n C . 2n+1 D . 2n-1 9.二叉树的第I 层上最多含有结点数为() I I-1 I-1 I A.2I B .2 I-1 -1 C .2 I-1 D .2 I -1 10.一棵二叉树高度为h, 所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2h B .2h-1 C .2h+1 D .h+1 11. 利用二叉链表存储树,则根结点的右指针是()。 A.指向最左孩子 B .指向最右孩子 C .空D .非空 12.已知一棵二叉树的前序遍历结果为为()。 A.CBEFDA B .FEDCBA 13.已知某二叉树的后序遍历序列是()。 ABCDEF中序遍历结果 为 C .CBEDFA D dabec, 中序遍历序列是 CBAEDF则后序遍历的结 果 .不定 debac , 它的前序遍历是

数据结构第一章课后习题与答案

第 1 章 绪 论 (2005-07-14) - 第 1 章 绪 论 课后习题讲解 1. 填空 ⑴( )是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 【解答】数据元素 ⑵( )是数据的最小单位,( )是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的是数据元素以及数据元素之间的关系。 ⑶ 从逻辑关系上讲,数据结构主要分为( )、( )、( )和( )。 【解答】集合,线性结构,树结构,图结构 ⑷ 数据的存储结构主要有( )和( )两种基本方法,不论哪种存储结构,都要存储两方面的内容:( )和()。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系 ⑸ 算法具有五个特性,分别是( )、( )、( )、( )、( )。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹ 算法的描述方法通常有( )、( )、( )和( )四种,其中,( )被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺ 在一般情况下,一个算法的时间复杂度是( )的函数。 【解答】问题规模 ⑻ 设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为( ),若为 n*log25n,则表示成数量级的形式为( )。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。

2. 选择题 ⑴ 顺序存储结构中数据元素之间的逻辑关系是由( )表示的,链接存储结构中的数据元素之间的逻辑关系是由( )表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。 ⑵ 假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。则表示该遗产继承关系的最合适的数据结构应该是( )。 A 树 B 图 C 线性表 D 集合 【解答】B 【分析】将丈夫、妻子和子女分别作为数据元素,根据题意画出逻辑结构图。 ⑶ 算法指的是( )。 A 对特定问题求解步骤的一种描述,是指令的有限序列。 B 计算机程序 C 解决问题的计算方法 D 数据处理 【解答】A 【分析】计算机程序是对算法的具体实现;简单地说,算法是解决问题的方法;数据处理是通过算法完成的。所以,只有A是算法的准确定义。 ⑷ 下面( )不是算法所必须具备的特性。 A 有穷性 B 确切性 C 高效性 D 可行性 【解答】C 【分析】高效性是好算法应具备的特性。 ⑸ 算法分析的目的是( ),算法分析的两个主要方面是( )。 A 找出数据结构的合理性 B 研究算法中输入和输出的关系 C 分析算法的效率以求改进 D 分析算法的易读性和文档性 E 空间性能和时间性能 F 正确性和简明性 G 可读性和文档性 H 数据复杂性和程序复杂性

数据结构课后习题及解析第六章汇总

第六章习题 1.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。2.对题1所得各种形态的二叉树,分别写出前序、中序和后序遍历的序列。 3.已知一棵度为k的树中有n 1个度为1的结点,n 2 个度为2的结点,……,n k 个度为k的结点, 则该树中有多少个叶子结点并证明之。 4.假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。 5.已知二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个? 6.给出满足下列条件的所有二叉树: ①前序和后序相同 ②中序和后序相同 ③前序和后序相同 7. n个结点的K叉树,若用具有k个child域的等长链结点存储树的一个结点,则空的Child 域有多少个? 8.画出与下列已知序列对应的树T: 树的先根次序访问序列为GFKDAIEBCHJ; 树的后根次序访问序列为DIAEKFCJHBG。 9.假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为: 0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10 请为这8个字母设计哈夫曼编码。 10.已知二叉树采用二叉链表存放,要求返回二叉树T的后序序列中的第一个结点指针,是否可不用递归且不用栈来完成?请简述原因. 11. 画出和下列树对应的二叉树:

12.已知二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。 13.编写递归算法:对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。 14.分别写函数完成:在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。 15.分别写出算法,实现在中序线索二叉树中查找给定结点*p在中序序列中的前驱与后继。 16.编写算法,对一棵以孩子-兄弟链表表示的树统计其叶子的个数。 17.对以孩子-兄弟链表表示的树编写计算树的深度的算法。 18.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出后序遍历非递归的算法。 19.设二叉树按二叉链表存放,写算法判别一棵二叉树是否是一棵正则二叉树。正则二叉树是指:在二叉树中不存在子树个数为1的结点。 20.计算二叉树最大宽度的算法。二叉树的最大宽度是指:二叉树所有层中结点个数的最大值。 21.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。 22. 证明:给定一棵二叉树的前序序列与中序序列,可唯一确定这棵二叉树; 给定一棵二叉树的后序序列与中序序列,可唯一确定这棵二叉树; 23. 二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。 24. 二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进行交换。 实习题 1.[问题描述] 建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中序和后序), 打印输出遍历结果。 [基本要求] 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行遍历(先序、中序、后序),然后将遍历结果打印输出。要求采用递归和非递归两种方法实现。 [测试数据] ABCффDEфGффFффф(其中ф表示空格字符) 输出结果为:先序:ABCDEGF 中序:CBEGDFA 后序:CGBFDBA 2.已知二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的竖向显示(竖向显示就是二叉树的按层显示)。

数据结构练习题第三章栈、队列和数组习题及答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性表。在栈顶 进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________ 或________。 2.栈的基本运算至少应包括________、________、________、________、________五 种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。 6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1 表示________,此时作进栈运算,则产生“________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。 int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x) {if(________________) return(0);

数据结构 第六章 图 练习题及答案详细解析(精华版)

图 1. 填空题 ⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵ 任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶ 图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列

⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk 【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。 2. 选择题 ⑴ 在一个无向图中,所有顶点的度数之和等于所有边数的()倍。 A 1/2 B 1 C 2 D 4 【解答】C 【分析】设无向图中含有n个顶点e条边,则。 ⑵ n个顶点的强连通图至少有()条边,其形状是()。 A n B n+1 C n-1 D n×(n-1) E 无回路 F 有回路 G 环状 H 树状 【解答】A,G ⑶ 含n 个顶点的连通图中的任意一条简单路径,其长度不可能超过()。 A 1 B n/2 C n-1 D n 【解答】C 【分析】若超过n-1,则路径中必存在重复的顶点。

数据结构(第二版)习题答案第3章

3.1 选择题 第3章线性表的链式存储 (1)两个有序线性表分别具有n个元素与m个元素且n≤m,现将其归并成一个有序表,其最少的比较次数是( A )。 A.n B.m C.n? 1D.m + n (2)非空的循环单链表 head 的尾结点(由 p 所指向)满足( C )。 A.p->next==NULL B.p==NULL C.p->next==head D.p==head (3)在带头结点的单链表中查找x应选择的程序体是( C )。 A.node *p=head->next; while (p && p->info!=x) p=p->next; if (p->info==x) return p else return NULL; B.node *p=head; while (p&& p->info!=x) p=p->next; return p; C.node *p=head->next; while (p&&p->info!=x) p=p->next; return p; D.node *p=head; while (p->info!=x) p=p->next ; return p; (4)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D )。 A.必须是连续的C.一定是不连续的B.部分地址必须是连续的D.连续不连续都可以 (5)在一个具有n个结点的有序单链表中插入一个新结点并保持单链表仍然有序的时间复杂度是( B )。 A.O(1) B.O(n)C.O(n2)D.O(n log2n )(6)用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时(D )。 A.仅修改队头指针 C.队头、队尾指针都要修改B.仅修改队尾指针 D.队头,队尾指针都可能要修改 (7)若从键盘输入n个元素,则建立一个有序单向链表的时间复杂度为( B )。 A.O(n)B.O(n2)C.O(n3)D.O(n× log2n)(8)下面哪个术语与数据的存储结构无关(D)。 A.顺序表B.链表C.散列表D.队列 (9)在一个单链表中,若删除 p 所指结点的后续结点,则执行( A )。 A.p->next=p->next->next; B.p=p->next; p->next=p->next->next; C.p->next=p->next; D.p =p->next->next; (10)在一个单链表中,若 p 所指结点不是最后结点,在 p 之后插入 s 所指结点,则执行( B )。 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; 3.2 设计一个算法,求一个单链表中的结点个数。 【答】:单链表存储结构定义如下(相关文件:linklist.h)

(精选)数据结构 第6章作业

第六章作业 参见《数据结构题集》第6章部分P38。 1、一棵度为2的树与一棵二叉树有何区别?(题集6.2) 二叉树是颗有序树,但度为2的树则未必有序。 2、假设一棵二叉树的层序序列为ABCDEFGHIJ和中序序列为DBGEHJACIF。请画 出该树(题集6.29)。 3、假设二叉树如下,请分别写出先序、中序和后序遍历结果,并画出该二叉树 对应的森林。 答: 先序遍历:A B D G C E F H 中序遍历:D G B A E C H F 后序遍历:G D B E H F C A A B C D E F G H

4、画出与下列已知序列对应的树T。(题集6.23) 树的先根次序访问的序列为:GFKDAIEBCHJ; 树的后根次序访问的序列为:DIAEKFCJHBG。

5、请编写一个递归算法,将二叉树中所有结点的左、右子树相互交换。(题集 6.43) 6、6.43 解: // 按先序交换二叉树的左右子树 Status ExchangeBiTree(BiTree& T) { BiTree p; if(T){ p=T->lchild; T->lchild=T->rchild; T->rchild=p; ExchangeBiTree(T->lchild); ExchangeBiTree(T->rchild); } return OK; } 7、对于那些所有非叶子结点均有非空左右子树的二叉树,试问:有n个叶子结 点的树中共有多少个结点? 2n-1 8、森林与二叉树的转换。(题集6.21) 树二叉树 根根 第一个孩子左孩子 右兄弟右孩子 8、选做:请设计按层次顺序(同一层自左向右)遍历二叉树的算法。(题集6.47) typedef BiTree QElemType; #include "c:\Yin\include\Queue.h" Status LevelOrderTraverse(BiTree& T,Status (*Visit)(TElemType e)) { QElemType p; Queue q; InitQueue(q); if(T) EnQueue(q,T);

数据结构习题

《数据结构》习题集 第一章序论 思考题: 1.1简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型、抽象数据类型 作业题: 1.2设有数据结构(D,R),其中 D={d1, d2, d3, d4 } R={r1, r2} r1={ , , , , , } r2={ (d1, d2), (d1, d3), (d1, d4), (d2, d4), (d2, d3) } 试绘出其逻辑结构示意图。 1.3设n是正整数。试写出下列程序段中用记号“△”标注的语句的频度:(1) i=1; k=0; while(i<=n-1) { △k+=10*i; i++; } (2) i=1; k=0; do { △k+=10*i; i++; }while(i<=n-1) (3)i=1; k=0; do { △k+ = 10*i; i++; }while(i==n); (4) i=1; j=0; while(i+j≤n) { △if(i

(5) x=n; y=0; //n是不小于1的常数 while(x>=(y+1)*(y+1)){ △y++; } (6) x=91; y=100; while ( y>0 ) { △if(x>100) { x-=10; y--; } else x++ ; } (7) for( i=0; i

相关文档
最新文档