数据结构:list
#include <list>
扩展的抽象数据类型(ADT)列表:双向链表
int main() {
list<int> liste;
for (int i = 1; i <= 5; ++i){
if (i%2 == 0)
liste.push_front(i); // 偶数插入到链表开头
else
liste.push_back(10*i); // 奇数乘以10后插入到链表末尾
}
// 此时链表内容: 4->2->10->30->50->.
for (auto& a: liste)
cout << a << "->";
cout << "." << endl;
auto it = liste.begin();
// 查找值为10的元素
while (it != liste.end() && *it != 10){
++it;
}
liste.insert(it, 66); // 在找到的位置(10之前)插入66
// 链表变为: 4->2->66->10->30->50->.
liste.remove(66); // 删除值为66的元素
// 链表恢复: 4->2->10->30->50->.
liste.reverse(); // 将链表反转
// 最终链表: 50->30->10->2->4->.
}
链表节点结构 (回顾第9章):
struct Element{
T data; // 存储的数据
Element *next; // 指向下一个节点的指针
Element *prev; // 指向前一个节点的指针 (双向链表)
}
说明:
list 是一个双向链表,可以在两端高效地进行插入和删除操作。 push_front() 和 push_back() 分别在链表的开头和末尾插入元素。 insert() 在指定迭代器位置前插入元素,对于链表来说是高效操作(无需移动大量数据)。 remove(value) 删除链表中所有值等于 value 的元素。 reverse() 将链表中的元素顺序完全反转。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com