STL中的list就是一双向链表,可高效地进行插入删除元素。
双向列表:
双向链表(Double Linked List) :指的是构成链表的每个结点中设立两个指针域:一个指向其直接前趋的指针域prior, 一个指向其直接后继的指针域next。
声明:#include<list>
1.list赋值:添加删除操作
- a.push_back(num):在末尾添加一个元素num
- a.pop_back():删除末尾元素
- a.push_front(num): 在开始位置添加一个元素
- a.pop_front() :删除第一个元素
示例代码:
#include<iostream>
#include<list>
using namespace std;
int main()
{
int t;
list<int>a;
for(int i=0;i<5;i++)
{
cin>>t;
a.push_back(t);
}
list<int>::iterator iter;
cout<<"赋值后的元素列表:"<<endl;
for(iter=a.begin();iter!=a.end();iter++)
cout<<*iter<<" ";
cout<<endl;
cout<<"删除末尾元素:"<<endl;
a.pop_back();
for(iter=a.begin();iter!=a.end();iter++)
cout<<*iter<<" ";
cout<<endl;
cout<<"输一个值添加在开始位置:"<<endl;
cin>>t;a.push_front(t);
for(iter=a.begin();iter!=a.end();iter++)
cout<<*iter<<" ";
cout<<endl;
a.pop_front();
cout<<"删除第一个元素:"<<endl;
for(iter=a.begin();iter!=a.end();iter++)
cout<<*iter<<" ";
cout<<endl;
return 0;
}
结果截图:
2.基本操作:
- a.front():返回链表第一个元素
- a.back():返回链表最后一个元素
- a.empty():判断链表是否为空,若链表为空返回true,链表不为空返回true
- a.size():返回链表中元素个数
a.clear():清除链表a中元素
示例代码:
#include<iostream>
#include<list>
using namespace std;
int main()
{
int t;
list<int>a;
list<int>::iterator iter;
for(int i=0;i<5;i++)
{
cin>>t;
a.push_back(t);
}
if(!a.empty())
{
cout<<a.front()<<" "<<a.back()<<endl;
}
cout<<"链表的实际大小:"<<a.size()<<endl;
a.clear();
cout<<"清空后链表大小:"<<a.size()<<endl;
return 0;
}
结果:
3.unique()删除相邻重复元素:
示例代码:
#include<iostream>
#include<list>
using namespace std;
int main()
{
int t;
list<int>a;
list<int>::iterator iter;
for(int i=0;i<5;i++)
{
cin>>t;
a.push_back(t);
}
a.unique();
for(iter=a.begin();iter!=a.end();iter++)
cout<<*iter<<" ";
cout<<endl;
return 0;
}
结果: