ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:64.37KB ,
资源ID:6966751      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6966751.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构6章习题.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构6章习题.docx

1、数据结构6章习题-考试-学资学习网-押题-算法与数据结构第1-6章课堂测验(双号) 一、选择题 1、已知一个栈的进栈序列是1,2,3,n,其输出序列是p,p,p,若p=n,则121np的值。( c ) i (A) i (B) n-i (C) n-i+1 (D) 不确定 2、设n个元素进栈序列是1,2,3,n,其输出序列是p,p,p,若p=3,则p2n112的值。( c ) (A) 一定是2 (B) 一定是1 (C) 不可能是1 (D) 以上都不对 3、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( b ) A.6 B.11 C.15 D.不确定 4、在下述结论中,

2、正确的是( d ) 只有一个结点的二叉树的度为0; 二叉树的度为2; 二叉树的左右子树可任意交换; 深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。 A. B. C. D. 5、一棵树高为K的完全二叉树至少有()个结点。( a ) kk-1k-1k D.21 B.2 +1 C.2 A.2 二、简答题 1 简述下列术语:线性表,顺序表,链表。 2 线性表:最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。 顺序表:是指用一组连续的存储单元一次存储线性表中的数据元素。物理结构和逻辑结3 构都相邻。 链表:逻辑结构相邻的数据元素物理结构不一定相邻。采用指针的形式连接起来。

3、4 2 何时选用顺序表,何时选用链表作为线性表的存储结构合适?各自的主要优缺点是什么? 不需要经常大量的修改表或需要随机存取的情况下可以选用顺序表; 相反需要经常大量的修改表,但不是频繁的随机存取的情况下可选用链式表。 3链表所表示的元素是否有序?如有序,则有序性体现于何处?链表所表示的元素是否一定要在物理上是相邻的?有序表的有序性又如何理解? 答:有序。有序性体现在通过指针数据元素有序的相连。物理上不一定要相邻。4设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。 void ListInsert(SqList A,SqList

4、 B,SqList C) ElemType *p,*q,*s; P=&A; q=&B; s=&C; while(p.next!=NULL|q.next!=NULL) if(p.next.datafront=0; q-count=0; int EnQu(QuType *&q,ElemType x) /*进队*/ int rear; if (q-count=MaxSize) return 0; /*队满上溢出*/ else rear=(q-front+q-count+MaxSize)%MaxSize; /*求队尾位置*/ rear=(rear+1)%MaxSize; /*队尾位置进1*/ q-da

5、tarear=x; q-count+; return 1; int DeQu(QuType *&q,ElemType &x) /*出队*/ if (q-count=0) /*队空下溢出*/ return 0; else q-front=(q-front+1)%MaxSize; x=q-dataq-front; q-count-; return 1; int QuEmpty(QuType *q) /*判空*/ return(q-count=0); 1 设有一个栈,元素进栈的次序为a, b, c。问经过栈操作后可以得到哪些输出序列? ;bca ;bac;cba; abc; acb2循环队列的优点是

6、什么?如何判断它的空和满? 优点:可以克服顺序队列的“假上溢”现象,能够使存储队列的向量空间得到充分利用。 判断循环队列的空或满不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满。三是设置一计数器记录队列中元素的总数,不仅可判别空或满,还可以得到队列中元素的个数 2 设有一个静态顺序队列,向量大小为MAX,判断队列为空的条件是什么?队列满的条件是什么? 3 队列为空:front=rear。队满:rear=MAX -1或front=rear 4 (队首指针front ,一个队尾指

7、针rear) 5 5 设有一个静态循环队列,向量大小为MAX,判断队列为空的条件是什么?队列满的条件是什么? 6 循环队列为空:front=rear 。 循环队列满:(rear+1)%MAX=front。 (队首指针front ,一个队尾指针7 rear) 8 5设Q0,6是一个静态顺序队列,初始状态为front=rear=0,请画出做完下列操作后队列的头尾指针的状态变化情况,若不能入对,请指出其元素,并说明理由。 a, b, c, d入队 a, b, c出队 入队i , j , k , l , md, i出队 n, o, p, q, r入队 其中l,m,n,o,p,q,r均由于队列假溢出问题

8、无法入队 6假设Q0,5是一个循环队列,初始状态为front=rear=0,请画出做完下列操作后队列的头尾指针的状态变化情况,若不能入对,请指出其元素,并说明理由。 d, e, b, g, h入队 d, e出队 i , j , k , l , m入队 b出队 入队n, o, p, q, r 假设在树中,结点x是结点y的双亲时,用(x,y)来表示树边。已知一棵树的树边集合为 (e,i), (b,e), (b,d), (a,b), (g,j), (c,g), (c,f), (h,l), (c,h), (a,c) ,用树型表示法表示该树,并回答下列问题: 哪个是根结点? 哪些是叶子结点? 哪个是g的

9、双亲? 哪些是g的祖先? 哪些是g的孩子? 那些是e的子孙? 哪些是e的兄弟? 哪些是f的兄弟? b和n的层次各是多少? 树的深度是多少? 以结点c为根的子树的深度是多少? 根节点:a 叶子节点:i ,d , j, f , l g 的双亲节点:c g 的祖先:c , a g 的孩子:j e 的子孙:i e的兄弟:d f的兄弟:g , h b的层次:2 树的深度:4 以结点c为根的子树的深度:3 一棵深度为h的满k叉树有如下性质:第h层上的结点都是叶子结点,其余各层上每个结点都有k棵非空子树。如果按层次顺序(同层自左至右)从1开始对全部结点编号,问: 各层的结点数是多少? 编号为i的结点的双亲结

10、点(若存在)的编号是多少? 编号为i的结点的第j个孩子结点(若存在)的编号是多少? 编号为i的结点的有右兄弟的条件是什么? 其右兄弟的编号是多少? (1) 设层号为i的结点数目为m=k(i-1) (i+k-2)也就是的最大整数。(i+k-2)/k不大于(i+k-2)/k(的结点的双亲结点的编号是:i编号为(2) 与k整除的结果.以下/表示整除。 (3) 编号为i的结点的第j个孩子结点编号是:k*(i-1)+1+j; (4)编号为i的结点有右兄弟的条件是(i-1)能被k整除 右兄弟的编号是i+1. 三、算法理解 1、已知P结点是某双向链表的中间节点,画图并写出下列操作的语句序列。 (1)在P结点

11、后插入S结点。 (2)删除P结点的后继结点Q。 结点结构如下: Prior Data Next (其中Prior、Data、Next分别为前驱节点指针、数据域、后继节点指针。) 答:(1)P-Next-Prior=S; S-Next=P-Next; P-Next=S; S-Prior=P; (2) Q=P-Next; P-Next=P-Next-Next; P-Next-Prior=P; free(Q); 4、假设一棵二叉树的前序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK。请画出该树,并写出后序序列。(要求写出分析过程) 确定二叉树的结构,只需要采用递归的方式确定每棵子树的

12、根结点和左、右子树的先序、中序序列即可。先序序列的第一个结点必然是根结点,左、右子树的中序序列在二叉树的中序序列中,分别在根结点的两边;他们的先序序列在二叉树的先序序列中先后连续排列。 EBFHDAIGCKJ 个字母组成,8这H、G、F、E、D、C、B、A假设用于通讯的电文由) 分(8、7,0.21,0.06,0.320.03,字母在电文中出现的频率为 0.070.19,0.02, 8个字母哈夫曼树并设计哈夫曼编码。0.1 ,画出这3121732 写出0右1然后根据左a=1010 b=00 c=10000 d=1001 e=11 f=10001 g=01 设有如图6-27所示的二叉树。 分别用

13、顺序存储方法和链接存储方法画出该二叉树的存储结构。 写出该二叉树的先序、中序、后序遍历序列。 abcdefg00hk00mn 顺序存储结构: 链式存储结构acb?gfde?nkhm abdehkcfgmn 先序:dbhekafcmgn 中序:dhkebfmngca 后序: 和ABDGHCEFI已知一棵二叉树的先序遍历序列和中序遍历序列分别为 GDHBAECIF,请画出这棵二叉树,然后给出该树的后序遍历序列。ACBFEDIHG 后序:GHDBEIFCA 设一棵二叉树的中序遍历序列和后序遍历序列分别为BDCEAFHG和DECBHGFA , 请画出这棵二叉树,然后给出该树的先序序列。 AFBGCHD

14、E ABCDEFGH 先序遍历: 和dgbaekchif已知一棵二叉树的中序遍历序列和后序遍历序列分别为 ,请画出这棵二叉树对应的中序线索树和后序线索树。gdbkeihfca 二叉树: 中序线索树: abcdefgkhi 后序线索树:acbfdehgki 以二叉链表为存储结构,请分别写出求二叉树的结点总数及叶子结点总数的 算法。 叶子节点数:50 MAX_NODE #define *T) int search_leaves( BTNode *StackMAX_NODE ,*p=T; BTNode top=0, num=0; int (T!=NULL) if stack+top=p ; whil

15、e (top0) p=stacktop- ; if (p-Lchild=NULL&p-Rchild=NULL) num+ ; (p-Rchild!=NULL ) if stack+top=p-Rchild; (p-Lchild!=NULL ) if stack+top=p-Lchild; return(num) ; F所示的二叉树是森林所对应的二叉树,请画出森林。F6-27设图 :F森林angckbemfhd 6-28设有一棵树,如图所示。 请分别用双亲表示法、孩子表示法、孩子兄弟表示法给出该树的存储结构。 请给出该树的先序遍历序列和后序遍历序列。 请将这棵树转换成二叉树。 双亲表示法: -1

16、0a0b10c203m14d15e26h2k728g39f310n 孩子表示法:?3120a?541b?8762c?10m39?d4?e5?h6?k7?g8?f9?n10 孩子兄弟表示法:abcdmehfkng edgkhnfmcba 后序:先序:abdechkgmfn 二叉树:abcdmehfkng 树,并w设给定权值集合w=3,5,7,8,11,12 ,请构造关于的一棵huffman WPL 。求其加权路径长度 11128 753 WPL=12*2+3*4+5*4+7*3+8*2+11*2=115 中的字符构成,假设用于通信的电文是由字符集a, b, c, d, e, f, g, h0.0

17、3, 80.32, 个字符在电文中出现的概率分别为0.07, 0.19, 0.02, 0.06, 这 0.21, 0.10 。按左子树根结点的权小于等于右子树根结点的权的树(请画出对应的huffman 。次序构造) 求出每个字符的huffman编码。 0.320.190.21(e)(b)(g)0.100.060.07(h)(a)(d)0.030.02(f)(c) 然后根据左1写出0右a=1010 b=00 c=10000 d=1001 e=11 f=10001 g=01 h=1011 分析其时间复杂度。,的算法如下C=A+B阶方阵相加n、求两个3*/ #define MAX 20 /*定义最大

18、的方阶 void MatrixAdd(int n,int AMAXMAX,int BMAXMAX,int CMAXMAX) int i,j; for (i=0;in;i+) for (j=0;jn;j+) Cij=Aij+Bij; n2; 这条语句执行的频率为答:因为 Cij=Aij+Bij; 。所以其时间复杂度为0(n2) 四、算法设计题,栈1、请描述队列和堆栈的特点,并设计一个算法实现:用两个栈(栈A B)实现一个队列,请描述入队与出队的过程。所以,用两个栈A和答:栈的特点是后进先出,队列的特点是先进先出。B模拟一个队列时,A作输入栈,逐个元素压栈,以此模拟队列元素的入队。当需要出队时,将

19、栈A退栈并逐个压入栈B中,A中最先入栈的元素,在B中处于栈顶。B退栈,相当于队列的出队,实现了先进先出。显然,只有栈B为空且A也为空,才算是队列空。 算法: ElementType DeQueue(A) if(Empty(A) printf(Error!); exit(0); else return Pop(A); void EnQueue(A,ElementType x) ElementType t; while(!Empty(A) t=Pop(A); Push(B,t); Push(A,x); while(!Empty(B) t=Pop(B); Push(A,t); 2、已知长度为n的线性

20、表A采用顺序存储结构,设计一个算法删除线性表A中所有值为key的数据元素。 答:在顺序存储的线性表上删除元素通常要涉及到一系列元素的移动(删第i个元素第i+1至第n个元素要依次前移)本题要求删除线性表中所有值为key的数据元素并未要求元素间的相对位置不变,因此可以考虑设头尾两个指针(i=1,j=n)从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为 key 的数据元素位置。具体实现如下: void Delete(ElemType A int n) A是有n个元素的一维数组 本算法删除A中所有值为item的元素 i=1;j=n;设置数组低、高端指针(下标) while(ij

21、) while(ij & Ai!=key) i+; 若值不为key 左移指针 if(ij)while(ij & Aj=key) j-;若右端元素值为key指针左移 if(ij) Ai+=Aj-; 3、假设程序代码中包含三种符号:圆括号( )、方括号 和大括号 ,并且这些符号必须成对使用。请问能否用栈来判断程序中以上符号是否正确配对?若能,请分析判断方法,并写出算法代码。 ) 和、(包括( 扫描表达式:遇到左括号,答:能,判断方法:设置一个括号栈时进栈,遇到右括号时,若栈是相匹配的左括号,则出栈,否则,返回0。若表达式扫描结束,栈为空,返回1表示括号正确匹配,否则返回0。 算法代码: int correct(char exp,int n) char stMaxSize; int top=-1,i=0,tag=1; while (i-1) tag=0; /*若栈不空,则不配对*/ return(tag);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1