链表的添加和删除

单链表中,在C语言可以用结构体指针描述:

[cpp]  view plain  copy
  1. typedef struct Node  
  2. {  
  3.     ElemType data;  
  4.     struct Node * next; //p->data,p->next->data  
  5. }Node;  
  6. typedef struct Node * LinkList  


 

有一点很重要

比如我随便画一个。。

 

千万别也成

p->next=s;s->netx=p->next;

正确的是

s->netx=p->next;p->next=s;

自己好好想想,不打了。记得是逆序就行了~

 

好,进入正题,单链表第i个数据插入节点的算法思路:

1.声明一节点p指向链表第一个结点,初始化j从1开始;

2.当j<i时,就遍历链表,让p的指针向后移动,不断指向下一结点,j累加1;

3.若到链表末尾p为空,则说明第i个元素不存在;

4.否则查找成功,在系统中生成一个空节点s;

5.将数据元素e赋给s->data;

6.单链表插入标准语句s->next=p->next;p->next=s;

7.返回成功。

实现代码算法如下:

[cpp]  view plain  copy
  1. //在L中第i个位置之前插入新的数据元素e,L的长度加1  
  2. int ListInsert(LinkList *L,int i,ElmeType e)  
  3. {  
  4.     int j;  
  5.     LinkList p,s;  
  6.     p = *L;  
  7.     j = 1;  
  8.     while(p && j<1)  
  9.     {  
  10.         p = p->next;  
  11.         ++j;  
  12.     }  
  13.     if(!p || j>=1)  
  14.         return ERROR;  
  15.     s = (LinkList)malloc(sizeof(Node)); //生成新节点  
  16.     s->data = e;  
  17.     s->next = p->next;  
  18.     p->next = s; //顺序绝对不变  
  19.     return OK;  
  20. }  


 

 

如何删除呢?其实只要q=p->next;p->next->q->next;

算法思路省略,直接给出代码:

[cpp]  view plain  copy
  1. //删除L第i个元素,并用e返回其值,L的长度减1  
  2. int ListInsert(LinkList *L,int i,ElmeType e)  
  3. {  
  4.     int j;  
  5.     LinkList p,s;  
  6.     p = *L;  
  7.     j = 1;  
  8.     while(p && j<1)  
  9.     {  
  10.         p = p->next;  
  11.         ++j;  
  12.     }  
  13.     if(!(p->next) || j>=1)  
  14.         return ERROR;  
  15.     q = p->next;  
  16.     p->next = q->next;  
  17.     *e = q->data;  
  18.     free(q);    //释放内存  
  19.     return OK;  
  20. }  
链表是一种常见的数据结构,用于存储一系列数据元素。在链表中,每个数据元素都包含一个指向下一个元素的指针。下面分别介绍链表添加、遍历删除操作: 添加操作指的是在链表的末尾添加一个新的元素。添加一个新元素时,只需将新元素的指针指向链表的末尾,并更新原链表的尾部指针。具体步骤如下:首先,找到链表的尾部,即指针为空的结点;然后,创建一个新结点,将新结点的值赋给新元素,并将原链表的尾部指针指向新结点。 遍历操作指的是按照链表的顺序依次访问每个元素。为了实现遍历操作,需要使用一个指针来指向链表的头部,然后依次向后遍历链表,直到指针为空。在遍历过程中,可以对每个元素进行相应的处理,如打印或进行计算等。 删除操作指的是从链表中移除一个元素。删除一个元素时,需要找到目标元素的前一个元素,将其指针指向目标元素的下一个元素,然后释放目标元素所占用的内存空间。具体步骤如下:首先,找到目标元素的前一个元素;然后,将目标元素的下一个元素的地址赋值给前一个元素的指针,跳过目标元素;最后,释放目标元素所占用的内存空间。 综上所述,链表添加操作需要找到链表尾部,并将新元素添加链表末尾;遍历操作需要使用指针依次访问每个元素;删除操作需要找到目标元素的前一个元素,并将其指针指向目标元素的下一个元素。这些操作使得链表具有动态性灵活性,适用于各类数据结构的实现应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值