其他分享
首页 > 其他分享> > 栈和队列

栈和队列

作者:互联网

栈和队列

栈 -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()     //判断队列是否为空

完整代码

#include<cstdio>
#include<stack> // STL 中栈的头文件
#include<queue> // STL 中队列的头文件
using namespace std;    //使用名称空间std的函数

int main(void){
    stack<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

标签:sta,队列,元素,栈顶,STL,que
来源: https://www.cnblogs.com/yanyeting/p/16306696.html