特点:
存储单元元可以存在内存中未被占用的任意位置
存储存取数据元素的信息和后继元素的存储地址
概念:
把存储数据元素信息的域称为数据域,把存储直接后续位置的域称为指针域。
指针域中存储的信息称为指针或链,这两部分信息组成数据元素称为存储映像,称为结点
因为每个节点中只包含一个指针域,所以叫做单链表。
链表中第一个结点的存储位置叫做头指针,最后一个结点指针为空。
注意:
头结点的数据域一般不存储任何信息。(可以用来存放链表的长度)
头结点可以为空,头指针不为空。
头结点不一定是链表的必须要素,头指针是链表的必须要素。
头指针是链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针。
操作:
1.获取链表第i个数据(时间复杂度为O(n)):
思路:
声明一个结点p指向链表第一个结点,初始化j从1开始
当j<i时,遍历链表,让p指针向后移动指向下一个结点,j+1
若到链表末尾p为空,则说明第i个元素不存在
否则查找成功,返回结点p的数据
代码如下:
2.插入:
思路:
查找操作
否则查找成功,在系统中生成一个空结点s
将数据元素e赋值给s->data
先使s指针指向下一个元素,再让第i-1位元素指针指向s(顺序不能搞反,顺序弄反会导致死循环)
返回成功
代码如下:
3.删除:
思路:
查找操作
查找成功则将q=p->next(需要删除的结点)赋值给e
执行删除语句p->next=p->next->next或p->next=q->next
释放q节点
返回e
代码如下:
单链表优势:适用于插入或删除数据频繁的情况