一、双向链表
#include<list>
list<int> MyList = {1,2,3};//同样支持这种方式初始化
一些方法
push_back()
尾插,往链表后面插入数据push_front()
头插,往前面插入数据pop_back()
和pop_front()
尾删,头删sort()
从小到大排序reverse()
反转链表,1,2,3变3,2,1
二、栈
#include<stack>
stack<int> MyStack;
只允许单方向入栈,单方向出栈的容器。最先进入的a1在最底部,先进后出,后进先出。
top()
返回栈顶元素push(1)
把数据1放入栈中pop();
弹出数据(删除顶部元素)
三、队列
#include<queue>
queue<int> MyQueue;
先进先出的容器。
front()
返回最先进入的元素back()
返回最后进入的元素push()
插入数据pop()
弹出数据
stack和queue一般不做遍历
四、双向队列
#include<deque>
deque<int> MyDeque;
和双向链表list差不多。
deque常常采用pop_front()
和pop_back()
的方法从头到尾遍历,从尾到头遍历。
//从头到尾遍历
while(!MyDeque.empty())
{
cout<<MyDeque.front()<<"\t";
MyDeque.pop_front();
}
//从尾到头遍历
while(!MyDeque.empty())
{
cout<<MyDeque.back()<<"\t";
MyDeque.pop_back();
}
五、优先队列
按照特定数据的标准(从大到小,从小到大或者自己制定的规则(涉及到仿函数))排序队列
#include<deque>
prority_queue<int> Pqueue;
默认是把最大的放到最前面。比如,先push(1),再push(2),按照队列的思想,应该1在front()中,但是它调整了,把2放到了前面。
优先队列更完整的形式
prority_queue<int,vector<int>,less<int>> Pqueue; //从大到小
prority_queue<int,vector<int>,greater<int>> Pqueue; //从小到大
一般都是使用vector容器