1、数据结构期末考试复习总结DOC数据结构期末考试题型及分值(1)简答题6题*5分=30分简要回答要点 (2)分析题6题*5分=30分给出结果(3)设计题1题*10分=10分设计思想及结果(4)编程题1题*10分=10分完整代码(5)综合题1题*20分=20分抽象数据类型的定义、表示、实现、算法分析定义=功能(ADT)表示=存储结构体实现=算法(基本操作)算法分析=时间、空间复杂度考试概念有:1.数据结构一、线性表(栈-队-列-串-数组-广义表-逻辑结构-存储结构-运算结构)二、非线性表(集合-树-图)2.抽象数据类型数据对象-数据关系-基本操作3.算法性质-要求(设计)-效率(度量)4.实例查找
2、:高效查找算法排序:高效的排序算法分析题考试题目参考(1)1-2-3-4-5-6顺序建BBST(2)6-5-4-3-2-1顺序建BBST简答题实例设计题:(1)(2)数据结构试卷(一)三、计算题(每题6分,共24分)1. 在如下数组A中链接存储了一个线性表,表头指针为A0.next,试写出该线性表。A01234567data605078903440next3572041线性表为:(78,50,40,60,34,90)2. 请画出下图的邻接矩阵和邻接表。3. 已知一个图的顶点集V和边集E分别为:V=1,2,3,4,5,6,7;E=(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3
3、)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25;用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。用克鲁斯卡尔算法得到的最小生成树为:(1,2)3,(4,6)4,(1,3)5,(1,4)8,(2,5)10,(4,7)204.画出向小根堆中加入数据4,2,5,8,3时,每加入一个数据后堆的变化。见图12图12图11四、阅读算法(每题7分,共14分)1. LinkListmynote(LinkListL)/L是不带头结点的单链表的头指针if(L&L-next)q=L;L=Lnext;p=L;S1:while(pn
4、ext)p=pnext;S2:pnext=q;qnext=NULL;returnL;请回答下列问题:(1)说明语句S1的功能;查询链表的尾结点(2)说明语句组S2的功能;将第一个结点链接到链表的尾部,作为新的尾结点(3)设链表表示的线性表为(a1,a2,an),写出算法执行后的返回值所表示的线性表。返回的线性表为(a2,a3,an,a1)2. voidABC(BTNode*BT)ifBTABC(BT-left);ABC(BT-right);coutdatadata)item=BST-data;/查找成功return_true_;elseif(itemdata)returnFind(_BST-l
5、eft_,item);elsereturnFind(_BST-right_,item);/if六、编写算法(共8分)统计出单链表HL中结点的值等于给定值X的结点数。intCountX(LNode*HL,ElemTypex)intCountX(LNode*HL,ElemTypex)inti=0;LNode*p=HL;/i为计数器while(p!=NULL)if(P-data=x)i+;p=p-next;/while,出循环时i中的值即为x结点个数returni;/CountX数据结构试卷(二)三、应用题(36分)1 设一组初始记录关键字序列为(45,80,48,40,22,78),则分别给出第4
6、趟简单选择排序和第4趟直接插入排序后的结果。(22,40,45,48,80,78),(40,45,48,80,22,78)2 设指针变量p指向双向链表中结点A,指针变量q指向被插入结点B,要求给出在结点A的后面插入结点B的操作序列(设双向链表中结点的两个指针域分别为llink和rlink)。q-llink=p;q-rlink=p-rlink;p-rlink-llink=q;p-rlink=q;3 设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。2,ASL=91*1+2
7、*2+3*4+4*2)=25/94 设一棵树T中边的集合为(A,B),(A,C),(A,D),(B,E),(C,F),(C,G),要求用孩子兄弟表示法(二叉链表)表示出该树的存储结构并将该树转化成对应的二叉树。树的链式存储结构略,二叉树略5 设有无向图G,要求给出用普里姆算法构造最小生成树所走过的边的集合。E=(1,3),(1,2),(3,5),(5,6),(6,4)6 设有一组初始记录关键字为(45,80,48,40,22,78),要求构造一棵二叉排序树并给出构造过程。四、算法设计题(16分)1 设有一组初始记录关键字序列(K1,K2,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线
8、性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。设有一组初始记录关键字序列(K1,K2,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。voidquickpass(intr,ints,intt)inti=s,j=t,x=rs;while(ij)while(ix)j=j-1;if(ij)ri=rj;i=i+1;while(ij&rix)i=i+1;if(inext)for(q=hb;q!=0;q=q-next)if(q-data=p-data)break;i
9、f(q!=0)t=(lklist*)malloc(sizeof(lklist);t-data=p-data;t-next=hc;hc=t;数据结构试卷(三)三、计算题(每题10分,共30分)1.已知二叉树的前序遍历序列是AEFBGCDHIKJ,中序遍历序列是EFAGBCHKIJD,画出此二叉树,并画出它的后序线索二叉树。2已知待散列的线性表为(36,15,40,63,22),散列用的一维地址空间为0.6,假定选用的散列函数是H(K)=Kmod7,若发生冲突采用线性探查法处理,试:H(36)=36mod7=1;H(22)=(1+1)mod7=2;.冲突H(15)=15mod7=1;.冲突H2(2
10、2)=(2+1)mod7=3;H(15)=(1+1)mod7=2;H(40)=40mod7=5;H(63)=63mod7=0;H(22)=22mod7=1;.冲突(1)计算出每一个元素的散列地址并在下图中填写出散列表:01234566336152240(2)求出在查找每一个元素概率相等情况下的平均查找长度。ASL=3已知序列(10,18,4,3,6,12,1,9,18,8)请用快速排序写出每一趟排序的结果。(8,9,4,3,6,1),10,(12,18,18)(1,6,4,3),8,(9),10,12,(18,18)1,(3,4,6),8,9,10,12,18,(18)1,3,(4,6),8,
11、9,10,12,18,181,3,4,6,8,9,10,12,18,18四、算法设计题(每题15分,共30分)1 设计在单链表中删除值相同的多余结点的算法。设计在单链表中删除值相同的多余结点的算法。typedefintdatatype;typedefstructnodedatatypedata;structnode*next;lklist;voiddelredundant(lklist*&head)lklist*p,*q,*s;for(p=head;p!=0;p=p-next)for(q=p-next,s=q;q!=0;)if(q-data=p-data)s-next=q-next;free(
12、q);q=s-next;elses=q,q=q-next;2 设计一个求结点x在二叉树中的双亲结点算法。设计一个求结点x在二叉树中的双亲结点算法。typedefstructnodedatatypedata;structnode*lchild,*rchild;bitree;bitree*q20;intr=0,f=0,flag=0;voidpreorder(bitree*bt,charx)if(bt!=0&flag=0)if(bt-data=x)flag=1;return;elser=(r+1)%20;qr=bt;preorder(bt-lchild,x);preorder(bt-rchild,x
13、);voidparent(bitree*bt,charx)inti;preorder(bt,x);for(i=f+1;ilchild-data=x|qi-rchild-data)break;if(flag=0)printf(notfoundxn);elseif(idata);elseprintf(notparent);数据结构试卷(四)三、计算题(每题10分,共30分)1、画出广义表LS=(),(e),(a,(b,c,d)的头尾链表存储结构。2、下图所示的森林:(1)求树(a)的先根序列和后根序列;(1)ABCDEF;BDEFCA;(2)ABCDEFGHIJK;BDEFCAIJKHG林转换为相
14、应的二叉树;(2)求森林先序序列和中序序列;ABCDEF;BDEFCA;(3)将此森林转换为相应的二叉树;(2)ABCDEFGHIJK;BDEFCAIJKHG林转换为相应的二叉树;3、设散列表的地址范围是0.9,散列函数为H(key)=(key2+2)MOD9,并采用链表处理冲突,请画出元素7、4、5、3、6、2、8、9依次插入散列表的存储结构。H(4)=H(5)=0,H(3)=H(6)=H(9)=2,H(8)=3,H(2)=H(7)=6四、算法设计题(每题10分,共30分)1 设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每
15、个单链表只包含同类字符。设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。typedefchardatatype;typedefstructnodedatatypedata;structnode*next;lklist;voidsplit(lklist*head,lklist*&ha,lklist*&hb,lklist*&hc)lklist*p;ha=0,hb=0,hc=0;for(p=head;p!=0;p=head)head=p-next;p-next=0;if(p-data=A&p-datanext
16、=ha;ha=p;elseif(p-data=0&p-datanext=hb;hb=p;elsep-next=hc;hc=p;2. 设计在链式存储结构上交换二叉树中所有结点左右子树的算法。设计在链式存储结构上交换二叉树中所有结点左右子树的算法。typedefstructnodeintdata;structnode*lchild,*rchild;bitree;voidswapbitree(bitree*bt)bitree*p;if(bt=0)return;swapbitree(bt-lchild);swapbitree(bt-rchild);p=bt-lchild;bt-lchild=bt-rc
17、hild;bt-rchild=p;3. 在链式存储结构上建立一棵二叉排序树。在链式存储结构上建立一棵二叉排序树。#definen10typedefstructnodeintkey;structnode*lchild,*rchild;bitree;voidbstinsert(bitree*&bt,intkey)if(bt=0)bt=(bitree*)malloc(sizeof(bitree);bt-key=key;bt-lchild=bt-rchild=0;elseif(bt-keykey)bstinsert(bt-lchild,key);elsebstinsert(bt-rchild,key)
18、;voidcreatebsttree(bitree*&bt)inti;for(i=1;idata!=bt2-data)return(0);elsereturn(judgebitree(bt1-lchild,bt2-lchild)*judgebitree(bt1-rchild,bt2-rchild);2 设计两个有序单链表的合并排序算法。设计两个有序单链表的合并排序算法。voidmergelklist(lklist*ha,lklist*hb,lklist*&hc)lklist*s=hc=0;while(ha!=0&hb!=0)if(ha-datadata)if(s=0)hc=s=ha;elses
19、-next=ha;s=ha;ha=ha-next;elseif(s=0)hc=s=hb;elses-next=hb;s=hb;hb=hb-next;if(ha=0)s-next=hb;elses-next=ha;数据结构试卷(六)四、算法设计题(20分)1 设计在顺序有序表中实现二分查找的算法。设计在顺序有序表中实现二分查找的算法。structrecordintkey;intothers;intbisearch(structrecordr,intk)intlow=0,mid,high=n-1;while(lowk)high=mid-1;elselow=mid+1;return(0);2 设计判
20、断二叉树是否为二叉排序树的算法。设计判断二叉树是否为二叉排序树的算法。intminnum=-32768,flag=1;typedefstructnodeintkey;structnode*lchild,*rchild;bitree;voidinorder(bitree*bt)if(bt!=0)inorder(bt-lchild);if(minnumbt-key)flag=0;minnum=bt-key;inorder(bt-rchild);3.在链式存储结构上设计直接插入排序算法在链式存储结构上设计直接插入排序算法voidstraightinsertsort(lklist*&head)lkli
21、st*s,*p,*q;intt;if(head=0|head-next=0)return;elsefor(q=head,p=head-next;p!=0;p=q-next)for(s=head;s!=q-next;s=s-next)if(s-datap-data)break;if(s=q-next)q=p;elseq-next=p-next;p-next=s-next;s-next=p;t=p-data;p-data=s-data;s-data=t;数据结构试卷(七)四、算法设计题(20分)1. 设计在链式结构上实现简单选择排序算法。设计在链式结构上实现简单选择排序算法。voidsimples
22、electsorlklist(lklist*&head)lklist*p,*q,*s;intmin,t;if(head=0|head-next=0)return;for(q=head;q!=0;q=q-next)min=q-data;s=q;for(p=q-next;p!=0;p=p-next)if(minp-data)min=p-data;s=p;if(s!=q)t=s-data;s-data=q-data;q-data=t;2. 设计在顺序存储结构上实现求子串算法。设计在顺序存储结构上实现求子串算法。voidsubstring(chars,longstart,longcount,chart
23、)longi,j,length=strlen(s);if(startlength)printf(Thecopypositioniswrong);elseif(start+count-1length)printf(Toocharacterstobecopied);elsefor(i=start-1,j=0;ikey=x)return;elseif(bt-keyx)level(bt-lchild,x);elselevel(bt-rchild,x);数据结构试卷(八)四、算法设计题(20分)1. 设计一个在链式存储结构上统计二叉树中结点个数的算法。设计一个在链式存储结构上统计二叉树中结点个数的算法。
24、voidcountnode(bitree*bt,int&count)if(bt!=0)count+;countnode(bt-lchild,count);countnode(bt-rchild,count);2. 设计一个算法将无向图的邻接矩阵转为对应邻接表的算法。设计一个算法将无向图的邻接矩阵转为对应邻接表的算法。typedefstructintvertexm;intedgemm;gadjmatrix;typedefstructnode1intinfo;intadjvertex;structnode1*nextarc;glinklistnode;typedefstructnode2intvertexinfo;glinklistnode*firstarc;glinkheadnode;voidadjmatrixtoadjlist(gadjmatrixg1,glinkheadnodeg2)inti,j;glinklistnode*p;for(i=0;i=n-1;i+)g2i.firstarc=0;for(i=0;i=n-1;i+)for(j=0;j=n-1;j+)if(g1.edgeij=1)p=(glinklistnode*)malloc(sizeof(glinklistn
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1