栈和队列

栈和队列

栈 -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

posted @   言葉の庭  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示