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

本文详细介绍了单链表中线性表的插入、按序号查找以及删除运算的算法思想与实现。包括INSERT(L,x,i)函数用于在指定位置插入元素,GET(head,i)函数用于查找第i个结点,以及DeleteA(p)函数用于删除*p的后继结点。同时,讨论了如何删除单链表中某个特定结点及其前趋结点的逻辑。
摘要由CSDN通过智能技术生成

• 例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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值