数据结构
1 栈
1.1介绍
栈是一种类似桶的数据结构,因为最先进入栈的元素像被压在桶底的物品一样,只有拿掉在其之后放入的物品,才能将其取出(FILO)
严格来讲就是进栈、退栈
1.2 函数库
栈的标准库叫stack
1.2.1 声明方式
stack</*元素类型*/int> /*栈名*/sta;
stack<int> tmp;
1.2.2 操作函数
- empty()
返回本栈是否为空
bool n=/*栈名*/sta.empty();
bool tmpn=tmp.empty();
- size()
返回栈中的元素集合长度
int n=/*栈名*/sta.size();
int tmpn=tmp.size();
- top()
返回栈顶元素
int n=/*栈名*/sta.top();
int tmpn=tmp.top();
- push()
将某元素插入栈顶
/*栈名*/sta.push(n);
tmp.push(tmpn);
- emplace()
在栈顶增加一个元素
/*栈名*/sta.emplace(n);
tmp.emplace(tmpn);
- pop()
栈顶元素出栈
/*栈名*/sta.pop();
tmp.pop();
- swap()
交换两个栈的元素
/*栈名*/sta.swap(/*栈名*/tmp);
tmp.swap(sta);
2 队列
2.1 介绍
队列是一种类似管道的数据结构,因为最先进入队列的元素像在管道中物品一样,第几个进去,就是第几个出来,先进去的先出来(FIFO)
也就是入队和出队
2.2 函数库
队列的标准库是queue
2.2.1 声明方式
queue</*元素类型*/int> /*队名*/que;
queue<int> tmp;
2.2.2 操作函数
- empty()
返回本队是否为空
bool n=/*队名*/que.empty();
bool tmpn=tmp.empty();
- size()
返回队中的元素集合长度
int n=/*队名*/que.size();
int tmpn=tmp.size();
- front()
返回队首的元素
int n=/*队名*/que.front();
int tmpn=tmp.front();
- back()
返回队尾的元素
int n=/*队名*/que.front();
int tmpn=tmp.front();
- push()
将某元素插入队尾
/*队名*/que.push(n);
tmp.push(tmpn);
- emplace()
在队尾增加一个元素
/*队名*/que.emplace(n);
tmp.emplace(tmpn);
- pop()
队首元素出队
/*队名*/.pop();
tmp.pop();
- swap()
交换两个队列的元素
/*队名*/que.swap(/*队名*/tmp);
tmp.swap(que);
2.3 优先队列
简单来说,优先对列就是在向该队队尾插入元素后进行一次堆排序,因此耗时较小。
2.3.1 声明方式
- 降序队列(大顶堆)
- 第一种 (只加queue)
priorty_queue</*元素类型*/int> /*队名*/que;
priorty_queue<int> tmp;
- 第二种 (加queue和vector)
priorty_queue</*元素类型*/int, /*底层容器*/vector</*元素类型*/int>, /*排序规则*/less</*元素类型*/int> > /*队名*/que;
priorty_queue<int, vector<int>, less<int> > tmp;
- 升序队列(小顶堆)
- 必须加queue和vector
priorty_queue</*元素类型*/int, /*底层容器*/vector</*元素类型*/int>, /*排序规则*/greater</*元素类型*/int> > /*队名*/que;
priorty_queue<int, vector<int>, greater<int> > tmp;
2.3.2 操作函数与栈相似
- empty()
返回本队是否为空
bool n=/*队名*/que.empty();
bool tmpn=tmp.empty();
- size()
返回队中的元素集合长度
int n=/*队名*/que.size();
int tmpn=tmp.size();
- top()
返回队首元素
int n=/*队名*/que.top();
int tmpn=tmp.top();
- push()
将某元素插入队首
/*队名*/que.push(n);
tmp.push(tmpn);
- emplace()
在队尾增加一个元素
/*队名*/que.emplace(n);
tmp.emplace(tmpn);
- pop()
队首元素出队
/*队名*/que.pop();
tmp.pop();
- swap()
交换两个队的元素
/*队名*/que.swap(/*队名*/tmp);
tmp.swap(que);