数据结构章习题_第1页
数据结构章习题_第2页
数据结构章习题_第3页
数据结构章习题_第4页
数据结构章习题_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

4、ile(p.next!=NULL|q.next!=NULL)if(front=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-datarear=x; q-count+; return 1; int DeQu(QuType *&q,ElemType &x)/*出队*/

5、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。问经过栈操作后可以得到哪些输出序列?cba; abc; acb;bac; bca;2循环队列的优点是什么?如何判断它的空和满?优点:可以克服顺序队列的“假上溢”现象,能够使存储队列的向量空间得到充分利用。判断循环队列的空或满不能以头尾指针是否相等来确定

6、,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满。三是设置一计数器记录队列中元素的总数,不仅可判别空或满,还可以得到队列中元素的个数2 设有一个静态顺序队列,向量大小为MAX,判断队列为空的条件是什么?队列满的条件是什么?3 队列为空:front=rear。队满:rear=MAX -1或front=rear4 (队首指针front ,一个队尾指针rear)55 设有一个静态循环队列,向量大小为MAX,判断队列为空的条件是什么?队列满的条件是什么?6 循环队列为空:front=rear 。 循环队列满:(

7、rear+1)%MAX=front。7 (队首指针front ,一个队尾指针rear)85设Q0,6是一个静态顺序队列,初始状态为front=rear=0,请画出做完下列操作后队列的头尾指针的状态变化情况,若不能入对,请指出其元素,并说明理由。a, b, c, d入队a, b, c出队i , j , k , l , m入队d, i出队n, o, p, q, r入队其中l,m,n,o,p,q,r均由于队列假溢出问题无法入队6假设Q0,5是一个循环队列,初始状态为front=rear=0,请画出做完下列操作后队列的头尾指针的状态变化情况,若不能入对,请指出其元素,并说明理由。d, e, b, g,

8、 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的双亲? 哪些是g的祖先? 哪些是g的孩子? 那些是e的子孙? 哪些是e的兄弟? 哪些是f的兄弟? b和n的层次各是多少? 树的深度是多少? 以结点c为根的子树的深度是多少?根节点:a 叶子节点:i

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

10、结点的双亲结点的编号是:(i+k-2)/k(不大于(i+k-2)/k的最大整数。也就是(i+k-2)与k整除的结果.以下/表示整除。 (3) 编号为i的结点的第j个孩子结点编号是:k*(i-1)+1+j; (4)编号为i的结点有右兄弟的条件是(i-1)能被k整除 右兄弟的编号是i+1.三、算法理解 1、已知P结点是某双向链表的中间节点,画图并写出下列操作的语句序列。(1)在P结点后插入S结点。(2)删除P结点的后继结点Q。结点结构如下:PriorDataNext (其中Prior、Data、Next分别为前驱节点指针、数据域、后继节点指针。)答:(1)P-Next-Prior=S; S-Nex

11、t=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。请画出该树,并写出后序序列。(要求写出分析过程)确定二叉树的结构,只需要采用递归的方式确定每棵子树的根结点和左、右子树的先序、中序序列即可。先序序列的第一个结点必然是根结点,左、右子树的中序序列在二叉树的中序序列中,分别在根结点的两边;他们的先序序列在二叉树的先序序列中先后连续排列。7、(8分) 假设用于通讯的电文由A、B、C、D、E

12、、F、G、H这8个字母组成,字母在电文中出现的频率为 0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.1 ,画出这8个字母哈夫曼树并设计哈夫曼编码。然后根据左0右1写出a=1010b=00c=10000d=1001e=11f=10001g=01设有如图6-27所示的二叉树。分别用顺序存储方法和链接存储方法画出该二叉树的存储结构。写出该二叉树的先序、中序、后序遍历序列。顺序存储结构:链式存储结构先序:abdehkcfgmn中序:dbhekafcmgn后序:dhkebfmngca已知一棵二叉树的先序遍历序列和中序遍历序列分别为ABDGHCEFI和GDHBAECIF,请画出

13、这棵二叉树,然后给出该树的后序遍历序列。后序:GHDBEIFCA设一棵二叉树的中序遍历序列和后序遍历序列分别为BDCEAFHG和DECBHGFA ,请画出这棵二叉树,然后给出该树的先序序列。先序遍历:ABCDEFGH已知一棵二叉树的中序遍历序列和后序遍历序列分别为dgbaekchif和gdbkeihfca,请画出这棵二叉树对应的中序线索树和后序线索树。二叉树:中序线索树:NULLNULL后序线索树:NULL以二叉链表为存储结构,请分别写出求二叉树的结点总数及叶子结点总数的算法。叶子节点数:#define MAX_NODE 50int search_leaves( BTNode *T) BTNo

14、de *StackMAX_NODE ,*p=T;int top=0, num=0;if (T!=NULL) stack+top=p ; while (top0) p=stacktop- ; if (p-Lchild=NULL&p-Rchild=NULL) num+ ; if (p-Rchild!=NULL ) stack+top=p-Rchild; if (p-Lchild!=NULL ) stack+top=p-Lchild; return(num) ;设图6-27所示的二叉树是森林F所对应的二叉树,请画出森林F。森林F:设有一棵树,如图6-28所示。请分别用双亲表示法、孩子表示法、孩子兄弟

15、表示法给出该树的存储结构。请给出该树的先序遍历序列和后序遍历序列。请将这棵树转换成二叉树。双亲表示法: 孩子表示法:孩子兄弟表示法:先序:abdechkgmfn 后序: edgkhnfmcba二叉树: 设给定权值集合w=3,5,7,8,11,12 ,请构造关于w的一棵huffman树,并求其加权路径长度WPL 。WPL=12*2+3*4+5*4+7*3+8*2+11*2=115假设用于通信的电文是由字符集a, b, c, d, e, f, g, h中的字符构成,这8个字符在电文中出现的概率分别为0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10 。请画

16、出对应的huffman树(按左子树根结点的权小于等于右子树根结点的权的次序构造)。求出每个字符的huffman编码。01100101011100 然后根据左0右1写出a=1010b=00c=10000d=1001e=11f=10001g=01h=10113、求两个n阶方阵相加C=A+B的算法如下,分析其时间复杂度。 #define MAX 20 /*定义最大的方阶*/ 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; 答:因为

17、 Cij=Aij+Bij;这条语句执行的频率为n2;所以其时间复杂度为0(n2)。四、算法设计题1、请描述队列和堆栈的特点,并设计一个算法实现:用两个栈(栈A,栈B)实现一个队列,请描述入队与出队的过程。答:栈的特点是后进先出,队列的特点是先进先出。所以,用两个栈A和B模拟一个队列时,A作输入栈,逐个元素压栈,以此模拟队列元素的入队。当需要出队时,将栈A退栈并逐个压入栈B中,A中最先入栈的元素,在B中处于栈顶。B退栈,相当于队列的出队,实现了先进先出。显然,只有栈B为空且A也为空,才算是队列空。算法:ElementType DeQueue(A)if(Empty(A)printf(Error!)

18、;exit(0);elsereturn 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的线性表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) while(ij & Ai!=key) i+; 若值不为key 左移指针 if(ij)while(ij & Aj=key) j-;若右端元素值为key指针左移 if(ij) Ai+=Aj-; 3、假设程序代码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论