链表的建立、插入和删除(二)

链表的建立、插入和删除(二),第1张

链表的建立、插入和删除(二),第2张

7.4.2单链表的插入和删除
在链表这种特殊的数据结构中,链表的长度需要根据具体情况来设置。当需要保存数据时,需要向系统申请存储空,将数据访问到链表中。对于链表,表中的数据可以连接到表尾或链接到表头,也可以根据情况插入表中;对于不再需要的数据,将其从表中删除,释放其占用的空间空,但不能破坏链表的结构。这就是下面要介绍的链表的插入和删除。
1。删除链表
删除链表中的一个节点,描述如下:
[例7-6]创建一个学号和姓名的单链表,即节点包括学号、姓名和指向下一个节点的指针,链表按学号排列。然后从键盘输入一个学生的名字,从链表中删除。
先定义链表的结构:
struct
从图7-4可以看出,从链表中删除一个节点有三种情况,分别是删除链表的头节点、删除中间
节点和删除尾节点。如果题目给出了学生的名字,你就要在链表中从头到尾搜索每一节
,与每个节点的学生名字进行对比。如果相同,则搜索成功;否则,无法找到该节点。由于被删除的节点
可能位于链表的头部,这将导致链表的头部指针丢失,所以定义被删除节点的函数的返回值被定义为
返回结构类型的指针。
struct node * delet (head,ps t r)以/*he a d为头指针,删除pstr所在的node */
struct node * head;
char * pstr;
{
结构节点*临时,* p;
t e m p = h e a d;/*链表的头指针* /
if (head==NULL)/*链表是空*/
printf(" \ nlistis NULL!\ n ");
else/* not空table */
{
t e m p = h e a d;
while (strcmp(temp->str,pstr)!=0&&temp->下一个!=NULL)
/ *如果节点的字符串与输入字符串不同且未到达链表的末尾*/
{
p = t e m p;
t e m p = t e m p-> n e x t;/*跟踪链表的增长,即指针后移*/
}
if(strcmp(temp-> str,pstr) = = 0)/*查找字符串*/
{
if(temp = = head){/
h e a d = h e a d-> n e x t;
f r e e e(t e m p);/*释放被删除的点*/
}
E L S E
{
p-> next = temp-> next;table *中的/node */
printf(" delete string:% s \ n ",temp-> str);
f r e e e(t e m p);
}
}
else printf(" \ n找不到字符串!\ n ");No/find *要删除的字符串*/
}
r e t u r n(h e a d);/*返回头指针* /
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 链表的建立、插入和删除(二)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情