C++C语言链表

一、链表概念。

链表是由一系列结点组成的 线性结构。每个结点包括两部分: 一个存储数据元素的 数据域,另一个是存储下一个结点地址的 指针域。数组的线性顺序是由数组 下标决定的,而链表的线性是由各个
节点里的 指针决定的。因此链表在内存上 不连续,也不需要提前预估链表的元素个数。

二、链表的存储方式。

非空链表的第一个结点称为表头。从链表头开始,可以按照存储在每个结点中的后继指针访问链表中的其余结点。最后一个结点中的后继指针被设置为空,以指示链表的结束。
adf7e51684d144eca4f3e008d23f02a5.png

注意,图中绘制的链表结点彼此非常接近,排列整齐。实际上,链表结点可能散布在内存的各个部分。

三、链表的访问。

4845cba19cdb4ab38930b3ec78445597.png

链表元素在内存上不必连续,插入、删除某个元素只需 O(1)无需事先预估链表容量,但不可随机访问某个元素。

四、链表的删除和插入。

链表的删除很简单只需要把要删除的前一个数的指针改成要删除的下一个的地址就行了。

d7b65e67b9f74ae4b2cfd219d0127df8.png

例如把4删除,就把3的指针指向5,这样访问的时候就不会访问到4了。 

链表的插入也很简单,只需要把插入的数前面的一个数的指针指向插入的数的地址,插入的数的指针指向插入的数前面的一个数原来的指针就行了。

84a5bd2b6d8c4d20ad82a483acd1c465.png

例如要插入7,如图,只需要把5的指针指向7,把7的指针指向6就可以了。

五、链表的创建和函数的引用。

#include <list> // 引入头文件双向链表
#include <forward_list> // 引入头文件单向链表
list<int> ls; // 定义双向链表list(int形式)
forward_list<int> ls; // 定义单向链表forward_list(int形式)
函数名含义
ls.push_front(x)
向ls开头添加x
ls.push_back(x)
向ls结尾添加x
ls.front()
返回ls开头元素
ls.back()
返回ls结尾元素。
ls.pop_front()
删除ls开头元素
ls.pop_back();删除ls结尾元素
ls.size()
ls中的元素个数
ls.resize(n) 将ls的大小变为n
ls.clear()
清空链表
ls.empty()判断ls是否为空容器,若空则返回true
ls.insert(pos, x)
在指定迭代器位置pos前插入元素x
pos = ls.erase(pos)
删除指定迭代器位置的元素
并返回下一个元素的迭代器
ls.sort( [cmp] )
对list进行排序, 默认为升序排序
可传入排序规则cmp函数
ls.reverse()
)反转列表元素顺序
ls.unique()
删除连续的重复元素

作者10岁的小Tyler

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值