600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 数据结构c语言严4pdf 数据结构(C语言)严蔚敏 吴伟明 编著 04.pdf

数据结构c语言严4pdf 数据结构(C语言)严蔚敏 吴伟明 编著 04.pdf

时间:2024-03-02 14:49:21

相关推荐

数据结构c语言严4pdf 数据结构(C语言)严蔚敏 吴伟明 编著   04.pdf

• 例1-6:在单链表中实现线性表的插入运

算INSERT (L,x,i)

算法思想:

(1)先求出第i-1个结点

(2)然后在第i-1个结点之后插入结点x 。

1

• 按序号查找

设单链表的长度为n,要查找表中第i个

结点,算法思想如下:

从头结点开始顺链扫描,用指针p指向当

前扫描到的结点,用j作统计已扫描结点

数的计数器,当p扫描下一个结点时,j

自动加1。

P的初值指向头结点,j的初值为0。

当j=i时,指针p所指的结点就是第i个结

点。

2

• 按序号查找算法描述

JD *GET(head,i)

JD *head;

int i;

{int j;

JD *p;

p=head;j=0;

while((p->next!=null&&(j

{p=p->next;j++;}

if (i=j) return p; /*找到第i个结点*/

else return null; /*找不到,收返回null*/

}/*end*/

3

• 例1-6的实现:

INSERT (L,x,i)

JD *L;

datatype x;

int i;

{JD *p;

int j;

j=i-1;

p=GET(L ,j );/*找到第i-1个结点*p*/

if (p==null) printf(“找不到插入点\n“ )

else INSERA(p,x);

}/*end*/

4

(4)删除运算

(删除单链表中*p的后继)

• 规格(结点类型)说明见单链表描述。

• 算法描述:

DeleteA(p) /*删除*p的后继结点*r,设*r存在*/

JD *p;

{JD *r;

if(p->next!=null)

r=p->next; p r

p->next=r->next; 存储池

free(r);

}

}/*enddelete*/

5

• 思考:

(1)如何删除单链表中p结点本身?

(2 )如何删除单链表中p结点的前趋结

点?

例1-7:在单链表上实现线性表的删除运

算Delete(L,i) 。

思想:先找到被删结点(第i个)的前趋

结点,即第i-1个结点*p,然后删除*p的后

继( 需引用函数GET (L,i) ) 。

6

• 例1-7的实现:

DELETE(L,i)

JD *L;

int i;

{JD *p;

int j;

j=i-1;

p=GET(L ,j) ;/*找到第i-1个结点*p*/

if ((p!=null)&&(P->next!=null))

DeleteA(P);

else printf(“error

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。