线性表链式结构的特点:用一组任意的存储单元存储线性表的数据元素,可以是连续的也可以是不连续的
链式结构中除了要存数据元素信息外,还要存储它的后继元素的存储地址
存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域
指针域中存储的信息称为指针或链,两部分信息组成数据元素ai的存储映像称为结点
N个节点链结成一个链表,即为线性表的链式存储结构,每个节点中只包含一个指针域所以叫做单链表
链表中第一个节点的存储位置叫做头指针,最后一个为空
为了更加方便的对链表进行操作,会在链表的第一个结点前附设一个结点称为头结点
头指针与头结点的异同
线性表链式存储结构的代码描述
单链表的读取
获取链表第i个数据的算法思路:
1.声明一个节点p指向链表第一个结点,初始化j从1开始
2当j<i时,就遍历链表,让p的指针向后移动,不断指向下一节点j累加1
3.若到链表末尾p为空,则说明第i个元素不存在
4.否则查找成功,返回节点p的数据
实现代码算法如下:
单链表的插入
假设存储元素e的结点为s,要实现结点p/p->next和s之间逻辑关系的变化,只需要将结点s插入到结点p和p->next之间即可
单链表第i个数据插入结点的算法思路:
1.声明一个节点p指向链表第一个节点,初始化j从开始
2.当j<i时就遍历链表,让p的指针向后移动,不断指向下一节点,j累加1
3.若到链表末尾p为空,则说明第i个元素不存在
4.否则查找成功,在系统中生成一个空节点s
5.将数据元素e赋值给s-data
6.单链表的插入标准语句s-next=p->next p->next=s
7.返回成功
实现代码如下:
单链表的删除
设存储元素ai的结点为q,要实现将结点q删除单链表的操作,其实就是将他的前继结点的指针绕过,指向他的后继结点即可
单链表第i个数据删除结点算法的思路
1.声明一个节点p指向链表第一个节点,初始化j从1开始
2.当j<i时就遍历链表,让p的指针向后移动,不断指向下一节点,j累加1
3.若到链表末尾p为空,则说明第i个元素不存在
4.否则查找成功,将欲删除的结点p->next赋值给q
5.单链表的删除标准语句p->next=q->next
6. 将q的结点中的数据赋值给e,作为返回
7.释放q结点
8.返回成功
实现代码如下: