收藏 分享(赏)

东南大学十套数据结构试题及答案.doc

上传人:cjc2202537 文档编号:5527601 上传时间:2019-03-06 格式:DOC 页数:23 大小:459KB
下载 相关 举报
东南大学十套数据结构试题及答案.doc_第1页
第1页 / 共23页
东南大学十套数据结构试题及答案.doc_第2页
第2页 / 共23页
东南大学十套数据结构试题及答案.doc_第3页
第3页 / 共23页
东南大学十套数据结构试题及答案.doc_第4页
第4页 / 共23页
东南大学十套数据结构试题及答案.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、数据结构试卷(一)三、计算题(每题 6 分,共 24 分)1. 在如下数组 A 中链接存储了一个线性表,表头指针为 A 0.next,试写出该线性表。A 0 1 2 3 4 5 6 7 data 60 50 78 90 34 40next 3 5 7 2 0 4 12. 请画出下图的邻接矩阵和邻接表。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)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25;用克鲁斯卡尔算法得到最小生成树,

2、试写出在最小生成树中依次得到的各条边。4. 画出向小根堆中加入数据 4, 2, 5, 8, 3 时,每加入一个数据后堆的变化。四、阅读算法(每题 7 分,共 14 分)1. LinkList mynote(LinkList L)/L 是不带头结点的单链表的头指针if(LABC (BT-right);coutdatadata)item=BST-data;/查找成功return _;else if(itemdata)return Find(_,item);else return Find(_,item);/if六、编写算法(共 8 分)统计出单链表 HL 中结点的值等于给定值 X 的结点数。int

3、 CountX(LNode* HL,ElemType x)数据结构试卷(二)三、应用题(36 分)1 设一组初始记录关键字序列为(45,80,48,40,22,78),则分别给出第 4 趟简单选择排序和第 4 趟直接插入排序后的结果。2 设指针变量 p 指向双向链表中结点 A,指针变量 q 指向被插入结点 B,要求给出在结点A 的后面插入结点 B 的操作序列(设双向链表中结点的两个指针域分别为 llink 和rlink) 。3 设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字 62 时的比较次数并计算出查找成功时的平

4、均查找长度。4 设一棵树 T 中边的集合为(A,B),(A,C),(A,D),(B,E),(C,F),(C,G) ,要求用孩子兄弟表示法(二叉链表)表示出该树的存储结构并将该树转化成对应的二叉树。5 设有无向图 G,要求给出用普里姆算法构造最小生成树所走过的边的集合。6 设有一组初始记录关键字为(45,80,48,40,22,78),要求构造一棵二叉排序树并给出构造过程。四、算法设计题(16 分) 1 设有一组初始记录关键字序列(K 1,K 2,K n) ,要求设计一个算法能够在 O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于 Ki,右半部分的每个关键字均大于等于

5、Ki。2 设有两个集合 A 和集合 B,要求设计生成集合 C=AB 的算法,其中集合 A、B 和 C 用链式存储结构表示。数据结构试卷(三)二填空题1. 下列算法实现在顺序散列表中查找值为 x 的关键字,请在下划线处填上正确的语句。struct recordint key; int others;int hashsqsearch(struct record hashtable ,int k)int i,j; j=i=k % p;while (hashtablej.key!=k if (i=j) return(-1);if (_ ) return(j); else return(-1);2. 下

6、列算法实现在二叉排序树上查找关键值 k,请在下划线处填上正确的语句。typedef struct 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_;三、计算题(每题 10 分,共 30 分)1.已知二叉树的前序遍历序列是 AEFBGCDHIKJ,中序遍历序列是 EFAGBCHKIJ

7、D,画出此二叉树,并画出它的后序线索二叉树。2已知待散列的线性表为(36,15,40,63,22) ,散列用的一维地址空间为06 ,假定选用的散列函数是 H(K)= K mod 7,若发生冲突采用线性探查法处理,试:(1)计算出每一个元素的散列地址并在下图中填写出散列表: 0 1 2 3 4 5 6(2)求出在查找每一个元素概率相等情况下的平均查找长度。3已知序列(10,18,4,3,6,12,1,9,18,8)请用快速排序写出每一趟排序的结果。四、算法设计题(每题 15 分,共 30 分)1 设计在单链表中删除值相同的多余结点的算法。2 设计一个求结点 x 在二叉树中的双亲结点算法。数据结构

8、试卷(四)1 设一组初始记录关键字序列为(20,18,22,16,30,19) ,则以 20 为中轴的一趟快速排序结果为_。2 设一组初始记录关键字序列为(20,18,22,16,30,19) ,则根据这些初始关键字序列建成的初始堆为_。3 设某无向图 G 中有 n 个顶点,用邻接矩阵 A 作为该图的存储结构,则顶点 i 和顶点 j互为邻接点的条件是_。4 设无向图对应的邻接矩阵为 A,则 A 中第 i 上非 0 元素的个数_第 i 列上非 0元素的个数(填等于,大于或小于) 。5 设前序遍历某二叉树的序列为 ABCD,中序遍历该二叉树的序列为 BADC,则后序遍历该二叉树的序列为_。6 设散

9、列函数 H(k)=k mod p,解决冲突的方法为链地址法。要求在下列算法划线处填上正确的语句完成在散列表 hashtalbe 中查找关键字值等于 k 的结点,成功时返回指向关键字的指针,不成功时返回标志 0。typedef struct node int key; struct node *next; lklist; void createlkhash(lklist *hashtable )int i,k; lklist *s;for(i=0;ikey=ai;k=ai % p; s-next=hashtablek;_;三、计算题(每题 10 分,共 30 分)1、画出广义表 LS=( ) ,

10、 (e) , (a , (b , c , d )的头尾链表存储结构。2、下图所示的森林:(1) 求树(a)的先根序列和后根序列; (2) 求森林先序序列和中序序列;(3)将此森林转换为相应的二叉树;ABCDEFGHIJK(a)(b)3、设散列表的地址范围是 09 ,散列函数为 H(key)= (key 2 +2)MOD 9,并采用链表处理冲突,请画出元素 7、4、5、3、6、2、8、9 依次插入散列表的存储结构。四、算法设计题(每题 10 分,共 30 分)1 设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类

11、字符。2. 设计在链式存储结构上交换二叉树中所有结点左右子树的算法。3. 在链式存储结构上建立一棵二叉排序树。数据结构试卷(五)1. 下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句。void bubble(int rn)for(i=1;irj+1)temp=rj+1;_;rj=temp;exchange=1;if (exchange=0) return;2. 下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。struct recordint key; int others;int bisearch(struct record r , int k)int low=0

12、,mid,high=n-1;while(lowx.key) j=j-1; if (idata=k;t-lchild=t-rchild=0;else if (t-datak) bstinsert(t-lchild,k);else_;3 设指针变量 p 指向单链表中结点 A,指针变量 s 指向被插入的结点 X,则在结点 A 的后面插入结点 X 需要执行的语句序列:s-next=p-next; _;。4 设指针变量 head 指向双向链表中的头结点,指针变量 p 指向双向链表中的第一个结点,则指针变量 p 和指针变量 head 之间的关系是 p=_和 head=_(设结点中的两个指针域分别为 lli

13、nk 和 rlink) 。5 设某棵二叉树的中序遍历序列为 ABCD,后序遍历序列为 BADC,则其前序遍历序列为_。6 完全二叉树中第 5 层上最少有_个结点,最多有_个结点。7 设有向图中不存在有向边,则其对应的邻接矩阵 A 中的数组元素 Aij的值等于_。8 设一组初始记录关键字序列为(49,38,65,97,76,13,27,50),则第 4 趟直接选择排序结束后的结果为_。9 设连通图 G 中有 n 个顶点 e 条边,则对应的最小生成树上有_条边。10 设有一组初始记录关键字序列为(50,16,23,68,94,70,73),则将它们调整成初始堆只需把 16 与_相互交换即可。四、算

14、法设计题(20 分)1. 设计一个在链式存储结构上统计二叉树中结点个数的算法。2. 设计一个算法将无向图的邻接矩阵转为对应邻接表的算法。数据结构试卷(九)五、算法设计题(20 分)1 设计计算二叉树中所有结点值之和的算法。2 设计将所有奇数移到所有偶数之前的算法。3 设计判断单链表中元素是否是递增的算法。数据结构试卷(十)二、填空题(48 分,其中最后两小题各 6 分)1. 设指针变量 p 指向单链表中结点 A,则删除结点 A 的语句序列为:q=p-next;p-data=q-data;p-next=_;feee(q);2. 数据结构从逻辑上划分为三种基本类型:_、_和_。3. 设无向图 G

15、中有 n 个顶点 e 条边,则用邻接矩阵作为图的存储结构进行深度优先或广度优先遍历时的时间复杂度为_;用邻接表作为图的存储结构进行深度优先或广度优先遍历的时间复杂度为_。4. 设散列表的长度为 8,散列函数 H(k)=k % 7,用线性探测法解决冲突,则根据一组初始关键字序列(8,15,16,22,30,32)构造出的散列表的平均查找长度是_。5. 设一组初始关键字序列为(38,65,97,76,13,27,10),则第 3 趟冒泡排序结束后的结果为_。6. 设一组初始关键字序列为(38,65,97,76,13,27,10),则第 3 趟简单选择排序后的结果为_。7. 设有向图 G 中的有向边

16、的集合E=,则该图的一个拓扑序列为_。8. 下面程序段的功能是建立二叉树的算法,请在下划线处填上正确的内容。typedef struct nodeint data;struct node *lchild;_;bitree;void createbitree(bitree *if(ch=#) _;else bt=(bitree*)malloc(sizeof(bitree); bt-data=ch; _;createbitree(bt-rchild);9. 下面程序段的功能是利用从尾部插入的方法建立单链表的算法,请在下划线处填上正确的内容。typedef struct node int data;

17、 struct node *next; lklist; void lklistcreate(_ *idata);p-next=0;if(i=1)head=q=p;else q-next=p;_; 三、算法设计题(22 分)1 设计在链式存储结构上合并排序的算法。2 设计在二叉排序树上查找结点 X 的算法。3 设关键字序列(k 1,k 2,k n-1)是堆,设计算法将关键字序列(k 1,k 2,k n-1,x)调整为堆。数据结构试卷(一)参考答案三、计算题(每题 6 分,共 24 分)1. 线性表为:(78,50,40,60,34,90)2. 邻接矩阵: 010010邻接表如图 11 所示:图

18、113. 用克鲁斯卡尔算法得到的最小生成树为: (1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)204. 见图 12图 12四、读算法(每题 7 分,共 14 分)1. (1)查询链表的尾结点(2)将第一个结点链接到链表的尾部,作为新的尾结点(3)返回的线性表为(a 2,a3,an,a1) 2. 递归地后序遍历链式存储的二叉树。五、法填空(每空 2 分,共 8 分)true BST-left BST-right 六、编写算法(8 分)int CountX(LNode* HL,ElemType x) int i=0; LNode* p=HL;/i 为计

19、数器 while(p!=NULL) if (P-data=x) i+;p=p-next;/while, 出循环时 i 中的值即为 x 结点个数return i;4 44 4 422 25 5 52 28 84352834/CountX数据结构试卷(二)参考答案三、应用题1. (22,40,45,48,80,78),(40,45,48,80,22,78)2. q-llink=p; q-rlink=p-rlink; p-rlink-llink=q; p-rlink=q;3. 2,ASL=91*1+2*2+3*4+4*2)=25/94. 树的链式存储结构略,二叉树略5. E=(1,3),(1,2),

20、(3, 5),(5,6) ,(6,4)6. 略四、算法设计题1. 设有一组初始记录关键字序列(K 1,K 2,K n) ,要求设计一个算法能够在 O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于 Ki,右半部分的每个关键字均大于等于 Ki。void quickpass(int r, int s, int t)int i=s, j=t, x=rs;while(ix) j=j-1; if (inext) for(q=hb;q!=0;q=q-next) if (q-data=p-data) break;if(q!=0) t=(lklist *)malloc(sizeof(l

21、klist); t-data=p-data;t-next=hc; hc=t;数据结构试卷(三)参考答案二填空题13.j+1,hashtablej.key=k14.return(t),t=t-rchild三、计算题1 AEBFGCDHKJNUL2、H(36)=36 mod 7=1; H (22)=(1+1) mod 7=2; .冲突H(15)=15 mod 7=1;.冲突 H2(22)=(2+1) mod 7=3; H (15)=(1+1) mod 7=2;H(40)=40 mod 7=5;H(63)=63 mod 7=0;H(22)=22 mod 7=1; .冲突(1) 0 1 2 3 4 5

22、 663 36 15 22 40(2)ASL= 6.53、(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,9,10,12,18,181,3, 4,6,8,9,10,12,18,18四、算法设计题1. 设计在单链表中删除值相同的多余结点的算法。typedef int datatype;typedef struct node datatype data; struct node *next;lklist;void delredundant(lklist *f

23、or(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(q);q=s-next;else s=q,q=q-next;2. 设计一个求结点 x 在二叉树中的双亲结点算法。typedef struct node datatype data; struct node *lchild,*rchild; bitree;bitree *q20; int r=0,f=0,flag=0;void preorder(bitree *bt, char x)if (bt!=0 return;else

24、 r=(r+1)% 20; qr=bt; preorder(bt-lchild,x); preorder(bt-rchild,x); void parent(bitree *bt,char x)int i;preorder(bt,x);for(i=f+1; ilchild-data=x | qi-rchild-data) break;if (flag=0) printf(“not found xn“);else if (idata); else printf(“not parent“);数据结构试卷(四)参考答案二、填空题1. (19,18,16,20,30,22)2. (16,18,19,2

25、0,32,22)3. Aij=14. 等于5. BDCA6. hashtablei=0,hashtablek=s三、计算题1 1-100eabcdLS2 (1) ABCDEF; BDEFCA;(2) ABCDEFGHIJK; BDEFCAIJKHG 林转换为相应的二叉树;AGBCDEFHIJK3H(4)=H(5)=0,H(3)=H(6)=H(9)=2,H(8)=3,H(2)=H(7)=601234567894569827四、算法设计题1. 设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。typedef

26、char datatype;typedef struct node datatype data; struct node *next;lklist;void split(lklist *head,lklist * ha=0,hb=0,hc=0;for(p=head;p!=0;p=head)head=p-next; p-next=0;if (p-data=A ha=p;else if (p-data=0 hb=p; else p-next=hc; hc=p;2. 设计在链式存储结构上交换二叉树中所有结点左右子树的算法。typedef struct node int data; struct no

27、de *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;3. 在链式存储结构上建立一棵二叉排序树。#define n 10typedef struct nodeint key; struct node *lchild,*rchild;bitree;void bstinsert(bitree * bt-key=ke

28、y;bt-lchild=bt-rchild=0;else if (bt-keykey) bstinsert(bt-lchild,key); else bstinsert(bt-rchild,key);void createbsttree(bitree *for(i=1;ik三、应用题2. DEBCA3. E=(1,5),(5,2),(5,3),(3,4),W=104. ASL=(1*1+2*2+3*4)/7=17/75. ASL1=7/6,ASL2=4/3四、算法设计题1. 设计判断两个二叉树是否相同的算法。typedef struct node datatype data; struct n

29、ode *lchild,*rchild; bitree;int judgebitree(bitree *bt1,bitree *bt2)if (bt1=0 else if (bt1=0 | bt2=0 |bt1-data!=bt2-data) return(0);else return(judgebitree(bt1-lchild,bt2-lchild)*judgebitree(bt1-rchild,bt2-rchild);2. 设计两个有序单链表的合并排序算法。void mergelklist(lklist *ha,lklist *hb,lklist *while(ha!=0 else s-

30、next=ha; s=ha;ha=ha-next;else if(s=0) hc=s=hb; else s-next=hb; s=hb;hb=hb-next;if(ha=0) s-next=hb; else s-next=ha;数据结构试卷(六)参考答案四、算法设计题1. 设计在顺序有序表中实现二分查找的算法。struct record int key; int others;int bisearch(struct record r , int k)int low=0,mid,high=n-1;while(lowk) high=mid-1; else low=mid+1;return(0);2

31、. 设计判断二叉树是否为二叉排序树的算法。int minnum=-32768,flag=1;typedef struct nodeint key; struct node *lchild,*rchild;bitree;void inorder(bitree *bt)if (bt!=0) inorder(bt-lchild); if(minnumbt-key)flag=0; minnum=bt-key;inorder(bt-rchild);3. 在链式存储结构上设计直接插入排序算法void straightinsertsort(lklist * int t;if (head=0 | head-n

32、ext=0) return;else for(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;数据结构试卷(七)参考答案三填空题1. inext=0) return;for(q=head; q!=0;q=q-next)min=q-data; s=q;for(p=q-next; p!=0;

33、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. 设计在顺序存储结构上实现求子串算法。void substring(char s , long start, long count, char t )long i,j,length=strlen(s);if (startlength) printf(“The copy position is wrong“);else if (start+count-1length) printf(“Too characters to be cop

34、ied“);else for(i=start-1,j=0; ikey=x) return; else if (bt-keyx) level(bt-lchild,x); else level(bt-rchild,x);数据结构试卷(八)参考答案三、填空题1. (49,13,27,50,76, 38,65,97)2. t=(bitree *)malloc(sizeof(bitree),bstinsert(t-rchild,k)3. p-next=s4. head-rlink,p-llink5. CABD6. 1,167. 08. (13,27,38,50,76, 49,65,97)9. n-110

35、. 50四、算法设计题1. 设计一个在链式存储结构上统计二叉树中结点个数的算法。void countnode(bitree *bt,int countnode(bt-lchild,count); countnode(bt-rchild,count);2. 设计一个算法将无向图的邻接矩阵转为对应邻接表的算法。typedef struct int vertexm; int edgemm;gadjmatrix;typedef struct node1int info;int adjvertex; struct node1 *nextarc;glinklistnode;typedef struct n

36、ode2int vertexinfo;glinklistnode *firstarc;glinkheadnode;void adjmatrixtoadjlist(gadjmatrix g1 ,glinkheadnode g2 )int i,j; glinklistnode *p;for(i=0;iadjvertex=j;p-nextarc=gi.firstarc; gi.firstarc=p;p=(glinklistnode *)malloc(sizeof(glinklistnode);p-adjvertex=i;p-nextarc=gj.firstarc; gj.firstarc=p;数据结

37、构试卷(九)参考答案四、算法设计题1 设计计算二叉树中所有结点值之和的算法。void sum(bitree *bt,int sum(bt-lchild,s); sum(bt-rchild,s);2 设计将所有奇数移到所有偶数之前的算法。void quickpass(int r, int s, int t)int i=s,j=t,x=rs;while(inext=0) return(1);elsefor(q=head,p=head-next; p!=0; q=p,p=p-next)if(q-datap-data) return(0);return(1);数据结构试卷(十)参考答案二、填空题1.

38、q-next2. 线性结构,树型结构,图型结构3. O(n2), O(n+e)4. 8/35. (38,13,27,10,65, 76,97)6. (10,13,27,76,65, 97,38)7. 1246538. struct node *rchild,bt=0,createbitree(bt-lchild)9. lklist,q=p三、算法设计题1. 设计在链式存储结构上合并排序的算法。void mergelklist(lklist *ha,lklist *hb,lklist *while(ha!=0 else s-next=ha; s=ha;ha=ha-next;else if(s=0

39、) hc=s=hb; else s-next=hb; s=hb;hb=hb-next;if(ha=0) s-next=hb; else s-next=ha;2. 设计在二叉排序树上查找结点 X 的算法。bitree *bstsearch1(bitree *t, int key)bitree *p=t;while(p!=0) if (p-key=key) return(p);else if (p-keykey)p=p-lchild; else p=p-rchild;return(0);3. 设关键字序列(k 1,k 2,k n-1)是堆,设计算法将关键字序列(k 1,k 2,k n-1,x)调整为堆。void adjustheap(int r ,int n)int j=n,i=j/2,temp=rj-1;while (i=1) if (temp=ri-1)break; elserj-1=ri-1; j=i; i=i/2;rj-1=temp;

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

当前位置:首页 > 中等教育 > 试题课件

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


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

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

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