步步为营(八)常用数据结构(1)STL-List(双端链表)

额,这个真的有必要说么~~

链表是空间动态分配的,内存不连续,不能随机进行访问和储存的结构。

链表的存储方式注定了链表在查找时面临着O(n)的时间复杂度,虽然看起来不算很大,但是这是单次查找的复杂度,如果要进行稍微复杂一点的操作,复杂度便很可能会飙升到O(n^2),这个复杂度真的会死人的……

不过链表的优点也很明显,如果程序对随机存储(也可以理解为下标式操作)的效率要求不高,那么使用链表存储数据比用数组空间缩小了不少,而且插入、删除之类的操作也方便很多(复杂度O(1),简直不要太快)。因为如果你要删除一个元素,只需要修改元素左右两个结点的指针,然后释放空间就行了。

STL里有List容器,而且是一个带头节点的环状双向链表。这种结构对于有大量插入或删除操作的程序来说,效率提升很大。

同时注意,由于List不支持随机访问,所以STL的sort()函数不能对list使用,List容器自带了sort()方法。

下面附上list成员函数说明:

constructor 构造函数

destructor 析构函数

operator= 赋值重载运算符

assign() 分配值

front() 返回第一个元素的引用

back() 返回最后一元素的引用

begin() 返回第一个元素的指针(iterator)

end() 返回最后一个元素的下一位置的指针

rbegin() 返回链表最后一元素的后向指针(reverse_iterator or const)

rend() 返回链表第一元素的下一位置的后向指针

push_back() 增加一元素到链表尾

push_front() 增加一元素到链表头

pop_back() 删除链表尾的一个元素

pop_front() 删除链表头的一元素

clear() 删除所有元素

erase() 删除一个元素或一个区域的元素(两个重载)

remove()  删除链表中匹配值的元素(匹配元素全部删除)

remove_if() 删除条件满足的元素(遍历一次链表),参数为自定义的回调函数

empty() 判断是否链表为空

max_size() 返回链表最大可能长度

size() 返回链表中元素个数

resize() 重新定义链表长度(两重载函数)

reverse() 反转链表

sort() 对链表排序,默认升序

merge() 合并两个有序链表并使之有序

splice() 对两个链表进行结合(三个重载函数) 结合后第二个链表清空

insert() 在指定位置插入一个或多个元素(三个重载函数)

swap() 交换两个链表(两个重载)

unique() 删除相邻重复元素 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值