线性表-链表(二)
来源:互联网 发布:淘宝可以延长收货多久 编辑:程序博客网 时间:2024/06/16 21:29
一,单链表的插入
(1)单链表如何插入一个新元素呢?
在单链表中
有序对:
变成
图例:
注意:在单链表中插入只需要修改指针。若要在第 i 个结点之前插入元素,修改的是是第 (i-1) 个结点的指针。
(2)单链表的插入元素的代码怎么写呢?
代码如下:
Status ListInsert(LinkList &L, int i ,ElemType e){ p=L; j=0; while(p && j<i-1){ p=p->next; ++j; } if(p && j==i-1){ s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; return OK; }else{ return ERROR; } }
分析:在上面这个单链表插入元素这个算法中,L为带头结点的单链表的头指针,在链表中第 i 个结点之前插入新的元素 e 。while循环的作用是,寻找第(i-1)个结点。
核心算法:
生成新结点s
s=(LinkList)malloc(sizeof(LNode));
为新节点s赋值
s->data=e;
让s 的next域指向 p 的next域,p就和ai 建立联系
s->next=p->next;
让p next域指向 s 的next域,p又和s 建立了联系
p->next=s;
成功插入新节点 e
图例:
二,单链表的删除
(1)单链表如何插入一个新元素呢?
在单链表中
有序对:
变成
图例:
注意:在单链表中删除第 i 个结点时,要到单链表中第(i-2)个结点,修改其指向后继的指针。
(2)单链表的删除元素的代码怎么写呢?
代码如下:
Status ListDelete(LinkList &L, int i ,ElemType &e){ p=L; j=0; while(p->next && j<i-1){ p=p->next; ++j; } if(p->next && j==i-1){ q=p->next; p->next=q->next; e=q->next; free(q); return OK; }else{ return ERROR; } }
分析:在上面这个单链表删除元素这个算法中,L为带头结点的单链表的头指针,在单链表中删除第 i 个结点元素 。while循环的作用是,寻找第(i-1)个结点,并且让 p 指向它
核心算法:
让 q 指向 p 的 next域,防止链的断裂,一旦断裂,后面的元素就找不到了
q=p->next;
让 p 指向 q 的next域,其实 p指向的也是是 p 的next 的 next 域
p->next=q->next;
让 e 存储 q指向的元素的值,也就是我们要删除的值,为了安全,我们先要删除的这个值保存起来,防止以后使用
e=q->next;
清空结点 q 的内存
free(q);
return OK;
图例:
- 线性表-链表(二)
- 线性表(二)
- 线性表(二)
- (二)线性表
- 线性表(二)
- 线性结构------线性表(二)
- 数据结构(二)--线性表
- 线性表(List) 二
- [数据结构]线性表(二)
- 【数据结构】线性表(二)
- 数据结构(二)线性表
- 数据结构(二) 线性结构之线性表
- 数据结构【线性表(二)链表】项目一--建立单链表
- 数据结构复习——线性表(二)链表
- 线性表实现之二:链表
- 数据结构(七)线性表(二)
- 数据结构线性表习题(二)
- 数据结构——线性表(二)
- 防止浏览器记住用户名及密码的简单实用方法
- Java实现文件的压缩与解压
- 基础总结篇之二:Activity的四种launchMode
- 水波特效处理
- POJ1231The Alphabet Game
- 线性表-链表(二)
- OpenCV实现人脸检测
- 《C Primer Plus(第五版)中文版》第9章第1至8题
- c++快速了解
- IOS-UIBarButtonItem的图片文字点击效果
- cocos2d-x中使用Http
- volley 自定义 Request
- 前端CSS规范大全
- 黑马程序员——网络编程