云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数 据 结 构 习 题 集

数 据 结 构 习 题 集

  • 62 次阅读
  • 3 次下载
  • 2025/12/11 20:58:53

(4)从带有附加表头结点的循环单链表中删除其值等于x的第一个结点。 (4) 解答:status delete(HL,x) { (1) q=HL; p=HL->next;

(2) while (p!=HL) && (p->data!=x) { q=p;

p=p->next;

}

(3) if (p= =HL) error('not found'); else {q->next=p->next; free(p); }

}

(5)在单链表中指针p所指结点之前插入一个值为x的新结点。 (5) 解答:status insert(HL,p,x){

malloc(q);

q->data=p->data; q->next=p->next; p->next=q; p->data=x; }

(6)从循环单链表中查找出最小值。 (6) 解答: elemtype min(HL){ //从循环单链表HL中查找出最小值 if (HL= =nil ) {

printf('HL=nil'); return; }

min=HL->data; p=HL->next;

while (p!=HL) {

(1) if (p->datadata; (2) p=p->next; }

}

(7)根据一维数组A(1:n)中顺序存储的具有n个元素的线性表建立一个带有附加表头结 点的单链表。

(7) 解答:status create(HL,A,n) {

(1) malloc(HL); q=HL; // 产生附加表头结点 (2) for (i=1 ;I<=n ;++i) { // 完成n个元素的依次链接 malloc(p);

p->data=A(i); q->next=p; q=p;

}

(3) q->next=nil ; // 把最后一个结点的指针域置空

17

}

23.请指出下面的过程执行p(5)和p(6)时分别输出的结果。 void P(int n); { if n>0 {

p(n-2);

printf(“%d”,n);

} }

23. 解答:这是一个递归过程,n执行一次就减2,当n≤0时该过程执行结束。因此,当n=5 时,其输出结果为1、3、5;当n=6时,其输出结果为2、4、6。 24.假定用一个循环单链表表示队列(称此为循环链队),该队列只设一个队尾指针, 不设队首指针,试编写下列算法:

(1)向循环链队插入一个元素为x的结点;

(1) 解答:status insert(Rear,x){

// 假定Rear为循环链队的队尾指针,x为待插入的元素 (1) malloc(p);

p->data=x; // 建立值为x的新结点p^ (2) if( Rear=nil){

Rear=p; Rear->next=p; }

else {p->next=Rear->next;

Rear->next=p; Rear=p;

}

// 若条件成立则建立循环链队的第一个结点,否则在队尾插入p^结点 }

(2)从循环链队中删除一个结点(假定不需要保留被删除结点的值和不需要回收结点)。 (2) 解答:status delete(Rear){

if( Rear=nil ) error('underflow'); if (Rear->next= =Rear) Rear=nil;

else Rear->next=Rear->next->next;

} //Rear^.next 所指向的结点为循环链队的队首结点

25.设A(k)有如下10个元素:2,4,6,8,10,12,14,16,18,20。若对A(k)分别查找x=1,3,13,21,试跟踪下面过程的执行,并分析该程序段关于n的计算时间。 【程序段】 i=1;j=n; do

18

{

k=(i+j)/2;

if A(k)<=x i=k+1 else j=k-1 }while !(i>j);

25.解答

(1)查找x=1,n=10

┏━━━┳━┳━┳━┳━━━━┳━━━━━━━┓ ┃ ┃i ┃j ┃k ┃A(k)? X ┃ ┃ ┣━━━╋━╋━╋━╋━━━━╋━━━━━━━┫ ┃第1次┃1 ┃10┃5 ┃ 10 > 1 ┃ 新j=k-1=4 ┃ ┃第2次┃1 ┃4 ┃2 ┃ 4 > 1 ┃ 新j=k-1=1 ┃ ┃第3次┃1 ┃1 ┃1 ┃ 2 > 1 ┃ 新j=k-1=0 ┃ ┗━━━┻━┻━┻━┻━━━━┻━━━━━━━┛ 当(i=1)>(j=0)时,过程终止。未找到。

(2)查找x=3,n=10

┏━━━┳━┳━┳━┳━━━━┳━━━━━━━┓ ┃ ┃i ┃j ┃k ┃A(k)? x ┃ ┃ ┣━━━╋━╋━╋━╋━━━━╋━━━━━━━┫ ┃第1次┃1 ┃10┃5 ┃ 10 > 3 ┃ 新j=k-1=4 ┃ ┃第2次┃1 ┃4 ┃2 ┃ 4 > 3 ┃ 新j=k-1=1 ┃ ┃第3次┃1 ┃1 ┃1 ┃ 2 < 3 ┃ 新i=k+1=2 ┃ ┗━━━┻━┻━┻━┻━━━━┻━━━━━━━┛ 当(i=2)>(j=1)时,过程终止。未找到。

(3)查找x=13,n=10

┏━━━┳━┳━┳━┳━━━━┳━━━━━━━┓ ┃ ┃i ┃j ┃k ┃A(k)? x ┃ ┃ ┣━━━╋━╋━╋━╋━━━━╋━━━━━━━┫ ┃第1次┃1 ┃10┃5 ┃ 10 <13 ┃ 新i=k+1=6 ┃ ┃第2次┃6 ┃10┃8 ┃ 16 >13 ┃ 新j=k-1=7 ┃ ┃第3次┃6 ┃7 ┃6 ┃ 12 <13 ┃ 新i=k+1=7 ┃ ┃第4次┃7 ┃7 ┃7 ┃ 14 >13 ┃ 新j=k-1=6 ┃ ┗━━━┻━┻━┻━┻━━━━┻━━━━━━━┛ 当(i=7)>(j=6)时,过程终止。未找到。 (4)查找x=21,n=10

┏━━━┳━┳━┳━┳━━━━┳━━━━━━━┓ ┃ ┃i ┃j ┃k ┃ A(k)? x ┃ ┃ ┣━━━╋━╋━╋━╋━━━━╋━━━━━━━┫ ┃第1次┃1 ┃10┃5 ┃ 10 <21 ┃ 新i=k+1=6 ┃ ┃第2次┃6 ┃10┃8 ┃ 16 <21 ┃ 新i=k+1=9 ┃ ┃第3次┃9 ┃10┃9 ┃ 18 <21 ┃ 新i=k+1=10┃ ┃第4次┃10┃10┃10┃ 20 <21 ┃ 新i=k+1=11┃ ┗━━━┻━┻━┻━┻━━━━┻━━━━━━━┛

19

当(i=11)>(j=10)时,过程终止,未找到。该程序段的时间复杂型为O(log2 n)。

**26.分别写出对二叉树进行中根遍历和先根遍历的非递归算法(不允许使用转向语句)。 26. 解答:中根遍历的非递归算法: status inorder(bt){ top=0; p=bt; do{

(1) while (p!=nil ){ top=top+1; s[top]=p;

p:=p->left; //p指向左子树 }

(2) if (top>0 ){

p=s[top]; top=top-1;

printf(p->data);

p=p->right; // p指向右子树 }

}while !((top=0) && (p=nil)); }

解答: 先根遍历的非递归算法: status preorder(bt) { top=0; p=bt do{

(1) while( p!=nil ){

printf (p->data); if (p->right!=nil){ top=top+1;

s[top]=p->right;

}

//若右子树非空,则把链接指针保存起来, 待访问过左子树后再访问它 p=p->left; //使p指向左子树 }

(2) if (top>0) { // 出栈,使p指向右子树 p=s[top] top=top-1; }

}while !((top=0) && (p=nil));

20

搜索更多关于: 数 据 结 构 习 题 集 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

(4)从带有附加表头结点的循环单链表中删除其值等于x的第一个结点。 (4) 解答:status delete(HL,x) { (1) q=HL; p=HL->next; (2) while (p!=HL) && (p->data!=x) { q=p; p=p->next; } (3) if (p= =HL) error('not found'); else {q->next=p->next;

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com