栈和队列
栈和队列
栈 -stack
首先看看百度的解释:
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
由上述可以简述栈的特性:先进后出,后进先出,即限定仅在表尾进行插入和删除操作的线性表;栈有三种操作:入栈、出栈和询问栈顶元素。
举个例子,如果1,2,3,4,5按顺序入栈,根据栈的特性,最终栈顶元素为5,那如果删除栈顶元素5,则栈顶元素变为4,再加入6,栈顶元素又会变为6了。
队列 -queue
如果理解了栈,那么队列也更好理解了。
队列的特性为先进先出,其余与栈相似。
代码
C++中的STL实现了栈和队列这两种数据结构,直接用即可。(STL如果不知道可自行百度,这里不细讲。)
首先需要引入STL中栈和队列的头文件
#include<stack> // STL 中栈的头文件
#include<queue> // STL 中队列的头文件
创建栈和队列的对象
stack<int>sta; //创建一个栈的对象 stack<数据类型>名称
queue<int>que; //同理
相关操作
STL将这些操作封装成为函数了。
//sta
sta.push(x); //将元素x入栈
sta.pop(); //弹出栈顶
sta.top(); //询问栈顶元素
sta.size(); //询问栈中元素个数
sta.empty() //判断栈是否为空
//que
que.push(x); //将元素x压入队列
que.pop(); //弹出队首元素
que.front(); //询问队首元素
que.back(); //询问队尾元素
que.size(); //询问队列元素个数
que.empty() //判断队列是否为空
同时C++也为栈和队列提供了一些操作符,如 =
可以将栈(或队列)中元素赋值给另一个栈(或队列)
stack<int>sta1, sta2;
sta1.push(1); //1入栈
sta2 = sta1; //将sta1中的元素赋值给sta2
//sta2中的元素为1
完整代码
#include<cstdio>
#include<stack> // STL 中栈的头文件
#include<queue> // STL 中队列的头文件
using namespace std; //使用名称空间std的函数
int main(void){
stcak<int>sta;
queue<int>que;
for(int i = 1; i <= 5; ++i){
sta.push(i);
que.push(i);
}
while(!sta.empty()){
printf("%d ", sta.top());
sta.pop();
}
putchar('\n');
while(!que.empty()){
printf("%d ", que.front());
que.pop();
}
return 0;
}
栈输出:5 4 3 2 1
队列输出:1 2 3 4 5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现