数据结构练习题答案.docx
- 文档编号:27206415
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:23
- 大小:119.60KB
数据结构练习题答案.docx
《数据结构练习题答案.docx》由会员分享,可在线阅读,更多相关《数据结构练习题答案.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构练习题答案
数据结构练习题答案
(仅供参考,如有问题讲解时再更正)
第一章绪论
一、单选题
1.C2.D3.B
二、填空题
1.集合结构、线性结构、树型结构、图形结构
2.1:
1、1:
N、M:
N
3.O(n)、O(m*n)
4.n、n(n+1)/2、O(n2)
5.O(n)
第二章线性表
一、单选题
1.B2.A3.C4.B5.D6.C
二、填空题
1. 数据、指针
2. (38,56,25,60,42,74)
3.O(n)、O
(1)
4. O
(1)、O(n)
5. i-1、i+1
6.p->next、a[p].next
7. 表头
8. 前驱、后继
9.表尾、表头
10.HL->next==NULL、HL->next==HL
三、应用题
1.#defineElemTypeint
#defineMaxsize100
Typedefstruct
{ElemType*list;
intsize;
}List;
(1)ElemTypeDMValue(List&L)
{ElemTypex;
x=L.list[0];//x存放最小元素
intk=0,i;//k存放最小元素的下标
if(ListEmpty(L))//判断是否为空线性表
{printf(”ListisEmpty!
”);
exit
(1);
}
for(i=1;i if(L.list[i] L.list[k]=L.list[L.size-1];//最后一个元素填补最小元素位置 L.size--;//线性表长度减1 returnx;//返回最小元素 } (2)ElemTypeDelete(List&L,inti) {ElemTypex; intj; if(i<1||i>L.size){//判断i的合法性 printf(”Indexisoutrange! ”); exit (1); } x=L.list[i-1];//保存被删除元素 for(j=i-1;j L.list[j]=L.list[j+1]; L.size--;//长度减1 returnx;//返回被删元素 } (3)voidInsert(List&L,inti,ElemTypex) {intj; if(i<1||i>L.size+1){//判断i的合法性 printf(”Indexisoutrange! ”); exit (1); } if(L.size==MaxSize){//判断线性表满 printf(””Listoverflow! ”); exit (1); } for(j=L.size-1;j>=i-1;j--)//元素后移,产生插入位置 L.list[j+1]=L.list[j]; L.list[i-1]=x;//元素插入 L.size++;//长度加1 } (4)voidDelete(List&L,ElemTypex) { inti=0; while(i if(L.list[i]==x){//删除x元素 for(intj=i+1;j L.list[j-1]=L.list[j]; L.size--; } elsei++;//寻找下一个x元素的位置 } 2.TypedefstructLnode {ElemTypedata; LNode*next; } (1)voidDelete(LNode*HL,inti) {LNode*ap,*cp; intj=1; if(i<1||HL==NULL) {//判断i的合法性或空链表 printf(”Indexisoutrange! ”); exit (1); } ap=NULL;cp=HL;//cp指向当前结点,ap指向其前驱结点 while(cp! =NULL)//查找第i个结点 {if(j==i)//找到第i个结点 break;//cp指向的结点即为第i个结点 else{//继续向后寻找 ap=cp; cp=cp->next; j++;} } if(cp==NULL){//没有找到第i个结点 printf(”Indexisoutrange! ”); exit (1); if(ap==NULL)//删除第1个结点(即i=1) HL=HL->next else ap->next=cp->next;//删除第i个结点 free(cp);//释放被删除结点的空间 } (2)voidInsert(LNode*HL,ElemTypex) { LNodeS=(LNode*)malloc(sizeof*(LNode));//申请一个新结点 if(S==NULL){//分配失败 printf(”Memoryallocationfail! ”); exit (1); } S->data=x; if(HL==NULL||x S->next=HL;//作为新表头结点插入 HL=S; return; } //查找插入位置 LNode*cp=HL->next;//用cp指向当前结点(即待查结点) LNode*ap=HL;//用ap作为指向当前结点的前驱结点指针 while(cp! =NULL) if(x else{ap=cp;cp=cp->next;}//继续查找插入位置 S->next=cp;ap->next=S;//插入新结点 } (2)ElemTypeMaxValue(LNode*HL) {ElemTypemax; if(HL==NULL){//空表 printf(”Linkedlistisempty! ”); exit (1); } max=HL->data; LNode*p=HL->next; while(p! =NULL){//寻找最大值 if(max p=p->next; } returnmax; } (3)intCount(LNode*HL,ElemTypex) { intn=0; LNode*p=HL; while(p! =NULL){ if(p->data==x)n++; p=p->next; } returnn; } 第三章栈和队列 一、单选题 1.A2.B3.C4.A5.B6.B7.D8.D 二、填空题 1. 队尾、队首 2.后进先出(LIFO)、先进先出(FIFO) 3. 栈顶指针、存储 4. 栈顶元素、栈顶指针 5. front==rear、(rear+1)%QueueMaxSize==front 6.–1、StackMaxSize-1 7.栈空、空队、队列只有一个元素 8.新结点的指针域、栈顶指针 9. 指针域、栈顶指针 10.队尾指针、存储 11. top==0 12.p->next=HS、HS=p 13.HS=HS->next 14.(front==rear)&&(front! =NULL) 三、编程题 递归算法: longFib(intn) { if(n==1||n==2)//终止递归条件 return1; else returnFib(n-1)+Fib(n-2); } 非递归算法: longFib(intn){ inta,b,c;//c代表当前项,a和b分别代表当前项前面的第2项和第1项 a=b=1; if(n==1||n==2) return1; else for(inti=3;i<=n;i++){ c=a+b;//求当前项 a=b;//产生第2项 b=c;//产生第1项 } returnc;//返回所求的第n项 } 递归算法的时间复杂度为O(2n),空间复杂度为O(n);非递归算法的时间复杂度为O(n),空间复杂度为O (1)。 第六章1树和二叉树 一、填空题 1.n-1 2.5、5 3.6 4.31、13 5.10、4、3 6.2、1、1、6 7.B、I和J 8.6 9.2i、2i+1、⎣i/2⎦ 10.16 11.5、18 12.a、f、空结点(即无右孩子结点) 13.4、2、3 14.a[2*i]、a[2*i+1]、a[i/2] 15.2i-1、2j+1 16.A[2*i+1]、a[2*i+2]、a[i/2] 17.2n、n-1、n+1 18.10、5 19.abcdef、cbaedf、cbefda、abdcef 20.abecfhijgd、abcdefghij 二、应用题 1.voidRequest(intA[],intn,inti) {intj; if(i>n){ printf(”编号为%d的结点不存在! ”,i); exit (1); } Printf(”当前结点为%d”,A[i]); j=i/2;//下标为j的结点是下标为i结点的双亲 if(j>0) printf(”双亲: %d”,A[j]); else printf(”树根没有双亲结点! ”); if(2*i printf(”左孩子: %d”,A[2*i]); printf(”左孩子: %d”,A[2*i+1]); } elseif(2*i==n){ printf(”左孩子: %d”,A[2*i]); printf(”无右孩子! ”); } else printf(”无孩子! ”); } 2.voidCount(BTreeNode*BT,int&C1,int&C2) { if(BT! =NULL) { C1++;//统计所有结点数 if(BT->left==NULL&&BT->right==NULL) C2++;//统计叶子结点数 Count(BT->left,C1,C2); Count(BT->right,C1,C2); } } 3. (1)abecfgkdhilmj (2)abcdefghijklm 第六章2二叉树的应用 一、一、单选题 1.C2.B3.D4.C5.A6.D 二、填空题 1.小于、大于等于 2.按升序排列的有序序列 3.找到、左子树、右子树 4.2i+1、2i+2 5.最小值、最大值 6.堆尾、堆顶、向下 三、应用题 1. 2. 初态堆: (12,15,40,38,26,52,48,64) 删除第1个元素后堆: (15,26,40,38,64,52,48) 删除第2个元素后堆: (26,38,40,48,64,52) 删除第3个元素后堆: (38,48,40,52,64) 删除第4个元素后堆: (40,48,64,52) 3.哈夫曼树: a: 1010b: 001c: 000d: 1011e: 100f: 11g: 01 WPL=6*4+4*4+14*3+16*3++12*3+20*2+28*2=262 编码平均长度为: (4*2+3*3+2*2)/7=3 四、算法设计 1.boolFind(BTreeNode*BST,ElemType&item) { while(BST! =NULL) { if(item==BT->data){//找到 item=BST->data; returntrue; } elseif(item elseBST=BST->right;//转右子树查找 } returnfalse;//没有找到 } 2.(i-1)/2 HBT.heap[i]=HBT.heap[j] i=j 第七章图 一、填空题 1、2 2、n(n-1)/2、n(n-1) 3、n-1 4、邻接矩阵、邻接表、十字链表和邻接多重表 5、n*n(或n行n列) 6、e、2e 7、出边、入边 8、e、e 9、O(n)、O(e)、O(e) 10、O(n2)、O(n)+O(e)、O(e)+O(n) 11、O(n2)、O(e) 12、、 13、ABCDE、ABCED 14、20 15、(0,1)5,(1,3)3,(3,2)6,(1,4)8 16、(1,3)3,(0,1)5,(3,2)6,(1,4)8 17、链栈 18、n、n-1 二、应用题 1. (1)采用邻接矩阵表示得到的顶点序列如下表所示: 图 深度优先序列 广度优先序列 G4 0128345679 0142738659 G5 012584736 013426758 (2)采用邻接表表示得到的顶点序列如下表所示: 图 深度优先序列 广度优先序列 G4 0438956712 0413728695 G5 047583612 043175628 2.唯一的一种拓扑序列为: 1402357689 3,4答案参见课件 第八章查找 一、填空题 1、(n+1)/2、O(n) 2、见p221公式ASL=…、O(log2n) 3、37/12 4、顺序、有序 5、1、3 6、二叉排序树、二叉平衡树 7、6、31、19 8、索引、开始地址 9、(12,63,36)、(55,40,82)、(23,74) 10、3、3、2 11、散列 12、链接 13、开放定址、链地址 14、3、2 二、应用题 1. (1)顺序查找: ASL=(1+2+3+…+25)/25=13 (2)二分查找: ASL=(1+2*2+4*3+8*4+10*5)/25=99/25=3.96 (参见上图的二分查找树) 2.散列函数: H(K)=k%m其中依题意得m=13 H(32)=32%13=6 H(75)=75%13=10 H(29)=29%13=3 H(63)=63%13=11 H(48)=48%13=9 H(94)=94%13=3(冲突) 设d0=H(K)=H(94)=3 d1=(d0+1)%m=(3+1)%13=4 H(25)=25%13=12 H(46)=46%13=7 H(18)=18%13=5 H(70)=70%13=5(冲突) 设d0=H(K)=H(70)=5 d1=(d0+1)%m=(5+1)%13=6(冲突) d2=(d1+1)%m=(6+1)%13=7(冲突) d3=(d2+1)%m=(7+1)%13=8 ASL=(8*1+1*2+1*4)/10=1.4 3.散列函数: H(K)=k%m其中依题意得m=11 H(32)=32%11=10 H(75)=75%11=9 H(29)=29%11=7 H(63)=63%11=8 H(48)=48%11=4 H(94)=94%11=6 H(25)=25%11=3 H(46)=46%11=2 H(18)=18%11=7 H(70)=70%11=4 ASL=(8*1+2*2)/10=1.2 三、算法设计 递归算法: intBinsch(ElemTypeA[],intlow,inthigh,KeyTypeK){ if(low<=hight){ intmid=(low+high)/2; if(K==A[mid].key) returnmid;//查找成功,返回元素的下标
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 练习题 答案