1、队列
定义:队列在逻辑上是一个线性表,队列的长度是可以变化的,但数组却不能变化,那是怎么变化的呢?他的原理是:先进先出(FIFO——出只能第一个出,进只能在末尾进,队列只能访问第一个单元,而数组却是和已随便访问任意一个单元。
2、结构及函数
queue<int> q;//他的元素是int 名称是q
q.size()//返回一个整数,表示元素中的数量
q.push(i)//往队尾添加元素有参数
q.front()//返回队首元素
q.pop()//踢出队首元素
3、加元素
bool vis[1005];//初始化
for(int i=0;i<n;i++){
cin>>a;
if(!vis[a]){
ans++;
q.push(a);
if(q.size()>m){
vis[a.front()]=false;
q.pop();
}
}
}
……
1、栈
定义:后进先出(LIFO)我们是从栈顶拿,又从栈顶放;
2、结构与函数
stack<int> s;
s.size()//返回栈里的数量、
a.push(i)//把i压到栈底
s.top()//返回栈顶元素
s.pop()//把栈顶的元素弹出
//如果栈里面没有元素那他就会RE
s.empty()//判断是否为空
//如果是空的就返回true否则false
下面是某人的笔记,我只是借鉴一下,不是抄袭
目录
队列
栈
队列
队列的特点:
队列的先进先出性质(\text{FIFO}FIFO)导致队列只能访问第一个元素,改变最后一个元素;
而数组可以访问和改变任意一个元素。
更明显的区别就是队列可以自动增长,而数组不行。
队列的定义以及常用操作
#include<queue>
queue<int> q;
返回元素数量:
q.size();
往队尾添加元素:
q.push(i);
返回队首元素:
q.front();
踢出队首元素:
q.pop();
队列的应用:
bool vis[1005];
for(int i = 0; i < n; i++)
cin >> a;
if(!vis[a])
ans++;
q.push(a);
if(q.size() > m)
vis[q.front()] = false;
q.pop();
栈
栈的特点:
后进先出(\text{LIFO}LIFO)。
栈的定义和操作:
stack<int> s;
在执行操作前,请注意栈的元素数量。
返回栈里的元素数量:
s.size();
把 ii 压到栈顶:
s.push(i);
返回栈顶元素:
s.top();
把栈顶元素弹出:
s.pop();
判断是否为空:
s.empty();// 如果是空的,返回 true,否则是 false。