您的位置:首页 > 理论基础 > 数据结构算法

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

2015-07-28 10:15 323 查看
额,这个真的有必要说么~~

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

链表的存储方式注定了链表在查找时面临着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() 删除相邻重复元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 链表 stl