收藏 分享(赏)

数据结构练习题2new.doc

上传人:dreamzhangning 文档编号:2606468 上传时间:2018-09-23 格式:DOC 页数:31 大小:152.50KB
下载 相关 举报
数据结构练习题2new.doc_第1页
第1页 / 共31页
数据结构练习题2new.doc_第2页
第2页 / 共31页
数据结构练习题2new.doc_第3页
第3页 / 共31页
数据结构练习题2new.doc_第4页
第4页 / 共31页
数据结构练习题2new.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、练习题一、 填空题1、_数据项_是数据的最小单位,_数据元素_是讨论数据结构时涉及的最小数据单位。2、设一棵完全二叉树具有 100 个结点,则此完全二叉树有 49 个度为 2 的结点。3、在用于表示有向图的邻接矩阵中,对第 i 列的元素进行累加,可得到第 i 个顶点的_入_度。4、已知一棵度为 3 的树有 2 个度为 1 的结点,3 个度为 2的结点,4 个度为 3 的结点,则该树中有_12_ 个叶子的结点。根据二叉树性质 3 的证明过程,有n0=n2+2n3+1(n0 、n2、n3 分别为叶子结点、度为 2 的结点和度为 3 的结点的个数) 。5、有一个长度为 20 的有序表采用二分查找方法

2、进行查找,共有4个元素的查找长度为 3。6、对于双向链表,在两个结点之间插入一个新结点需要修改的指针共_4_个。删除一个结点需要修改的指针共_2_个。7、已知广义表 LS=(a,(b,c,d),e),它的深度是_2_,长度是_3_。8、循环队列的引入是为了克服_假溢出_。9、表达式 a*(b+c)-d/f 的后缀表达式是_abc+*df/-_。10、数据结构中评价算法的两个重要指标是 时间和空间复杂度 。11、设 r 指向单链表的最后一个结点,要在最后一个结点之后插入 s 所指的结点,需执行的三条语句是_r-next=s_;r=s; r-next=null;。12、设有一个空栈,栈顶指针为 1

3、000H(十六进制),现有输入序列为 1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH 之后,输出序列是_23_,而栈顶指针值是_1012_H。设栈为顺序栈,每个元素占 4 个字节。13、模式串 P=abaabcac的 next 函数值序列为_01122312_。14、任意连通图的连通分量只有一个,即是 其自身 。15、栈的特性是 后进先出 。16、串的长度是 串中所包含的字符数 。17、如果一个有向图中没有回路,则该图的全部顶点可能排成一个拓扑序列。18、在具有 n 个叶子结点的哈夫曼树中,分支结点总数为 n-1 。19、在线性表的散列存储中,装填因子

4、 又称为装填系数,若用 m 表示散列表的长度,n 表示待散列存储的元素的个数,则 等于_n/m_。20、排序的主要目的是为了以后对已排序的数据元素进行 查找 。21、对于一个具有 n 个结点的单链表,在已知的结点*p 后插入一个新结点的时间复杂度为_O(1)_,在给定值为x 的结点后插入一个新结点的时间复杂度为_O(n)_。22、线性表 L=(a1,a2,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是_表长的一半_。23、两个栈共享空间时栈满的条件_top2=top1+1_。24、深度为 H 的完全二叉树至少有 _ 2(H-1) _个结点;至多有_ 2

5、H-1_个结点;H 和结点总数 N 之间的关系是 H=log2N+1 _。25、在有序表 A120中,按二分查找方法进行查找,查找长度为 4 的元素的下标从小到大依次是_1368 11 13 16 19_。26、设查找表中有 100 个元素,如果用二分法查找方法查找数据元素 X,则最多需要比较_7_次就可以断定数据元素 X 是否在查找表中。27、根据初始关键字序列(17,25,3,39,12)建立的二叉排序树的高度为_3_。28、设有一个 n 阶的下三角矩阵 A,如果按照行的顺序将下三角矩阵中的元素(包括对角线上元素)存放在 n(n+1)个连续的存储单元中,则 Aij与 A00之间有_个数据元

6、素。29、 栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈,所以又把栈称为_表;队列的插入和删除运算分别在队列的两端进行,先进队列的元素必定先出队列,所以又把队列称为_表。30、 设一棵完全二叉树的顺序存储结构中存储数据元素为 ABCDEF,则该二叉树的前序遍历序列为_,中序遍历序列为_,后序遍历序列为_。31、 设一棵完全二叉树有 128 个结点,则该完全二叉树的深度为_,有_个叶子结点。32、 设有向图 G 的存储结构用邻接矩阵 A 来表示,则 A中第 i 行中所有非零元素个数之和等于顶点 i 的_,第 i 列中所有非零元素个数之和等于顶点 i的_。33、typedef stru

7、ct nodeint key; struct node *lchild; struct node *rchild;bitree;bitree *bstsearch(bitree *t, int k) if (t=0 ) return(0);else while (t!=0)if (t-key=k)_; else if (t-keyk) t=t-lchild; else_;34、 下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句。void bubble(int rn)for(i=1;irj+1)temp=rj+1;_;rj=temp;exchange=1;if (exchange=

8、0) return;35、 下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。struct recordint key; int others;int bisearch(struct record r , int k)int low=0,mid,high=n-1;while(low,则给出该图的一种拓扑排序序列_。38、设一组初始记录关键字序列为(49,38,65,97,76,13,27,50),则以 d=4 为增量的一趟希尔排序结束后的结果为_。39、设二叉排序树的高度为 h,则在该树中查找关键字 key最多需要比较_次.二、选择题1、从逻辑上可以把数据结构分为( )两大类。A

9、动态结构、静态结构 B顺序结构、链式结构 C线性结构、非线性结构 D初等结构、构造型结构2、若长度为 n 的线性表采用顺序存储结构,在其第 i 个位置插入一个新元素的算法的时间复杂度为( )(1next=p-next; p-next=s; Bp-next=s ; s-next=p-next;Cp-next=s-next; s-next=p; Ds-next=p; p-next=s-next;21、链表不具有的特点是( ) 。A插入、删除不需要移动元素 B可随机访问任一元素 C不必事先估计存储空间 D所需空间与线性长度成正比22、一个栈的输入序列为 1 2 3 4 5,则下列序列中不可能是栈的输

10、出序列的是( ) 。A. 2 3 4 1 5 B. 5 4 1 3 2 C. 2 3 1 4 5 D. 1 5 4 3 223、递归过程或函数调用时,处理参数及返回地址,要用一种称为( )的数据结构。A队列 B多维数组 C栈 D. 线性表24、设给定权值总数有 n 个,其哈夫曼树的结点总数为( ) 。A不确定 B2n C2n+1 D2n-125、若需在 O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是( ) 。A. 快速排序 B. 堆排序 C. 归并排序 D. 直接插入排序26、设有一个二维数组 Amn,假设 A00存放位置在644(10),A22存放位置在

11、 676(10),每个元素占一个空间,问 A33(10)存放在什么位置?脚注 (10)表示用 10 进制表示。A688 B678 C692 D69627、若有 18 个元素的有序表存放在一维数组 A19中,第一个元素放 A1中,现进行二分查找,则查找 A3的比较序列的下标依次为( )A. 1,2,3 B. 9,5,2,3C. 9,5,3 D. 9,4,2,328、设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字 5 为基准进行一趟快速排序的结果为( )。(A) 2,3,5,8,6 (B) 3,2,5,8,6(C) 3,2,5,6,8 (D) 2,3,6,5,829、设指针变量

12、 p 指向单链表中结点 A,若删除单链表中结点 A,则需要修改指针的操作序列为( )A q=p-next;p-data=q-data;p-next=q-next;free(q);B q=p-next;q-data=p-data;p-next=q-next;free(q);C q=p-next;p-next=q-next;free(q);D q=p-next;p-data=q-data;free(q);30、设某二叉树中度数为 0 的结点数为 N0,度数为 1 的结点数为 Nl,度数为 2 的结点数为 N2,则下列等式成立的是( )。A N0=N1+1 B. N0=Nl+N2 C. N0=N2+

13、1D. N0=2N1+l31、设一棵 m 叉树中度数为 0 的结点数为 N0,度数为 1 的结点数为 Nl,度数为 m 的结点数为 Nm,则 N0=( ) 。A. Nl+N2+Nm B. l+N2+2N3+3N4+(m-1)NmC. N2+2N3+3N4+(m-1)Nm D. 2Nl+3N2+(m+1)Nm32、设无向图 G 中的边的集合 E=(a,b),(a,e) ,(a ,c) ,(b, e),(e ,d) ,(d,f),(f ,c) ,则从顶点 a 出发进行深度优先遍历可以得到的一种顶点序列为( ) 。A. aedfcb B. acfebd C. aebcfd D. aedfbc三、判断

14、题1如果两个串含有相同的字符,则这两个串相等。 ( N )2数组可以看成线性结构的一种推广,因此可以对它进行插入、删除等运算。 ( N )3二叉树是度为 2 的树。 ( N )4在顺序表中取出第 i 个元素所花费的时间与 i 成正比。 ( N )5在栈满情况下不能作进栈运算,否则产生“上溢” 。 ( Y )6图 G 的生成树是该图的一个极小连通子图。 ( N )7所谓数据的逻辑结构指的是数据之间的逻辑关系。 (N )8二叉排序树的查找和折半查找的时间性能相同。 (N )9在执行某个排序算法过程中,出现了排序码朝着最终排序序列位置相反方向移动,则该算法是不稳定的。 (N )10一个有向图的邻接表

15、和逆邻接表中表结点的个数一定相等。 ( Y )11、双向链表中至多只有一个结点的后继指针为空。 (Y )12、在循环队列中,front 指向队列中第一个元素的前一位置,rear 指向实际的队尾元素,队列为满的条件是front=rear。 ( N )13、对链表进行插入和删除操作时,不必移动结点。 ( Y )14、栈可以作为实现程序设计语言过程调用时的一种数据结构。 ( Y )15、在一个有向图的拓朴序列中,若顶点 a 在顶点 b 之前,则图中必有一条弧 (N ) 。16、对有向图 G,如果从任一顶点出发进行一次深度优先或广度优先搜索就能访问每个顶点,则该图一定是完全图。( N ) 若 一 个

16、图 的 每 一 对 不 同 顶 点 恰 有 一 条边 相 连 , 则 称 为 完 全 图 。 17、 “顺序查找法”是指在顺序表上进行查找的方法。 ( N )18、向二叉排序树插入一个新结点时,新结点一定成为二叉排序树的一个叶子结点。 (Y )19、二分查找要求序列顺序存储且关键字序列有序。 (Y )20、二路归并时,被归并的两个子序列中的关键字个数一定要相等。 ( N )调用一次深度优先遍历可以访问到图中的所有顶点。 ( N )21分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。 (Y )22冒泡排序在初始关键字序列为逆序的情况下执行的交换次数最多。 ( Y )23满二叉树

17、一定是完全二叉树,完全二叉树不一定是满二叉树。 ( Y )24设一棵二叉树的先序序列和后序序列,则能够唯一确定出该二叉树的形状。 ( N )25层次遍历初始堆可以得到一个有序的序列。 ( N )26设一棵树 T 可以转化成二叉树 BT,则二叉树 BT 中一定没有右子树。 ( Y )27线性表的顺序存储结构比链式存储结构更好。 ( N)28中序遍历二叉排序树可以得到一个有序的序列。 ( Y )29.快速排序是排序算法中平均性能最好的一种排序。 ( N )30不论是入队列操作还是入栈操作,在顺序存储结构上都需要考虑“溢出”情况。 ( Y )31当向二叉排序树中插入一个结点,则该结点一定成为叶子结点

18、。 ( Y )32设某堆中有 n 个结点,则在该堆中插入一个新结点的时间复杂度为 O(log2n)。 ( Y )33完全二叉树中的叶子结点只可能在最后两层中出现。(Y )34哈夫曼树中没有度数为 1 的结点。 (N )BAC EDFNPGH JM OLIK35对连通图进行深度优先遍历可以访问到该图中的所有顶点。 (Y )36先序遍历一棵二叉排序树得到的结点序列不一定是有序的序列。 (Y) 37由树转化成二叉树,该二叉树的右子树不一定为空。(Y )38线性表中的所有元素都有一个前驱元素和后继元素。 ( N)39.带权无向图的最小生成树是唯一的。 ( N )四、应用题1、已知一棵二叉树的先根序列和

19、中根序列分别为ABDGHECFIJ 及 GDHBEACIJF,请画出这棵二叉树,并给出其后序序列。2、将下列由三棵树组成的森林转换为二叉树。 (只要求给出转换结果)3、已知无向图如下所示:(1) 给出从 V1 开始的广度优先遍历序列;(2) 画出它的邻接表;(3) 画出从 V1 开始深度优先遍历生成树4、假定用于通讯的电文仅有 8 个字母 C1,C2,C8 组成,各个字母在电文中出现的频率分别为5,25,3,6,10,11,36,4,请先构建一棵哈夫曼树,计算其 WPL 值,并为这 8 个字母设计相应的哈夫曼编码。5、已知一表为(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,

20、Sep,Oct,Nov,Dec),按表中顺序依次插入初始为空的二叉排序树,要求:(1)画出建立的二叉排序树(值的大小以字母顺序为准) 。(2)对该二叉排序树作中序遍历,试写出遍历序列。(3)求出在等概率情况下查找成功的平均查找长度。6、已知一个图的顶点集 V 和边集 G 分别为:V=0,1,2,3,4,5,6,7;E=(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13,(3,5)9,(3,6)10, (4,6)4,(5,7)20;按照普里姆算法从顶点 0 出发得到最小生成树,试写出在最小生成树中依次得到的各条边。_, _, _, _, _, _, _。7、已

21、知散列函数为 H(K)=K mod 11,健值序列为47,7,29,11,16,92,22,8,3哈希表长为 11,采用线性探测法处理冲突,试构造闭散列表,并计算查找成功和不成功的平均查找长度。8、已知待排序的序列为(503,87,512,61,908,170,897,275,653,462) ,试完成下列各题。(1) 根据以上序列建立一个堆(画出第一步和最后堆的结果图) ,希望先输出最小值。(2) 输出最小值后,如何得到次小值。 (并画出相应结果图)。9、下图表示一个地区的交通网,顶点表示城市,边表示连结城市间的公路,边上的权表示修建公路花费的代价。怎样选择能够沟通每个城市且总造价最省的 n

22、-1 条公路,画出一个方案。10、已知图 G=(V, E) ,其中 V=v1,v2,v3,v4,v5, E=, , , , ), ;画出这个图的图形并写出所有的拓扑序列。v2v4v1v5v3v61621 111433619186511、设有关键码序列20,35,40,15,30,25,38,请给出平衡二叉树的构造过程(只需要给出不平衡时到平衡的过程即可) 。12、已知散列函数为 H(K)=K mod 13,健值序列为13,41,15,44,06,68,12,25,38,64,19,49,采用拉链法处理冲突,试构造开散列表,并计算查找成功的平均查找长度。13、对于下列一组关键字46,58,15,

23、45,90,18,10,62,试写出快速排序每一趟的排序结果。14、在如下数组 A 中链接存储了一个线性表,表头指针为A 0.next,试写出该线性表。A 0 1 2 3 4 5 6 7 Data60 50 78 90 34 40Next3 5 7 2 0 4 1五、算法与程序设计1、阅读算法完成题目要求:(1)说出下列算法的功能。template struct Binnode T data;Binnode *prior, *next; ;bool Unknown (Binnode *first) Binnode *p,*q;p=first-next; q=first-prior;while(

24、p!=q q=q-prior; else return 0;return 1;算法功能:(2)根据下列算法和输入的数据画出生成的链表形式。template LinkList: LinkList( int n) first=new Node; Node *s; T x;first-next=NULL; for (int i=0; ix;s=new Node; s-data=x; s-next=first-next; first-next=s; 输入数据为:1 2 3 4 5 6输出结果为:(3)说出下列算法的功能,它是采用什么结构实现的。template void BiTree:Unknown

25、(BiNode *root) const int MaxSize = 100; int front = 0; int rear = 0; BiNode* QMaxSize; BiNode* q;if (root=NULL) return;elseQrear+ = root;while (front != rear)q = Qfront+; coutdatalchild != NULL) Qrear+ = q-lchild;if (q-rchild != NULL) Qrear+ = q-rchild;算法功能:(4)阅读下列算法求出调用该算法后输出结果。void AE(StackPush(S,

26、30);Push(S,40);Push(S,50);int x=Pop(S)+2*Pop(S);Push(S,x);int i,a4=5,8,12,15;for(i=0;inext; while(pp=pnext;if(p) qnext=pnext; free(p);算法的功能: 2、程序设计(1) 设有一单链表 L,结点结构为 data|next,编写算法判断该单链表 L 中的元素是否成等差关系,即:设各元素值次为 a1,a2,a3,an,判断 ai+1-ai=ai-ai-1 是否成立。若是返回 1,否则返回 0。函数说明为:int dengcha (Node *L); (2)写出二分查找的

27、非递归算法。(要求统计查找过程中元素的比较次数)函数说明为: int binsearch(int r , int n,int k);(3)设单链表以非递减有序排列,设计算法实现在单链表中删除值相同的多余结点。函数说明为:Void Linklist:purge(Node * first);(4)写出图在邻接表存储结构下广度优先的遍历算法。 函数说明为:template 函数说明为:void ALGraph :BFSTraverse(int v);(5)编写计算二叉树最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值) 。(5)int Width(BiTree bt) if (bt

28、=null) return (0); else BiTree Q;front=1;rear=1;last=1;temp=0; maxw=0; Qrear=bt; while(frontlchild!=null) Q+rear=p-lchild; if (p-rchild!=null) Q+rear=p-rchild; if (frontlast) last=rear;if(tempmaxw) maxw=temp;temp=0; return (maxw);(6)假设哈希函数为 H(key),编写用链地址法解决冲突的哈希表的插入和删除算法。void F2( HashTable ;/ 获取哈希地址

29、if(Hi=Null) s=(Linklist)malloc(sizeof(Lnode); sdata=key; snext=Hi; Hi=s; /ifelse p=Hi;/ 查找while(p if(pdata=key) exit(1);else s=(Linklist)malloc(sizeof(Lnode);/ 产生新结点,插入表头snext=Hi; Hi=s;/ else/else/F2void Delete_HS(HashTable /获得哈希地址if(Hi= =Null) exit(1);p=Hi;q=p; / p 为工作指针,q 为 p 前趋while(p p=pnext;/wh

30、ile if(!p) exit(1);if(q=Hi) /key 为第一结点Hipnext; free(p);/ ifelseqnext=pnext; free(p);/else/Delete_HS(7)设计在链式存储结构上交换二叉树中所有结点左右子树的算法。typedef struct node int data; struct node *lchild,*rchild; bitree;void swapbitree(bitree *bt)bitree *p;if(bt=0) return;swapbitree(bt-lchild); swapbitree(bt-rchild);p=bt-lchild; bt-lchild=bt-rchild; bt-rchild=p;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报