C_栈和队列----stack堆栈容器

来源:互联网 发布:网络流行语用文言文 编辑:程序博客网 时间:2024/05/01 04:14


栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。读和取都在顶部进行,底部一般是不动的。栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一端称栈底。插入一般称为进栈,删除则称为退栈。 栈也称为后进先出表。


栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。栈结构也称为后进先出表(LIFO)。


函数定义:

stack<int> s;/*堆栈为空则返回真*/ s.empty()/*移除栈顶元素*/s.pop()/*在栈顶增加元素*/s.push()//返回栈中元素数目s.size()//返回栈顶元素 s.top()

堆栈只提供入栈、出栈、栈顶元素访问和判断是否为空的几种方法。

嗯下面就是在VC中的实现

#include<stack>#include<iostream>#define MAX_SIZE 255using namespace std;int main(){int n;int ch; stack<int>s;//定义一个整数类型的堆栈printf("*****************************\n");printf("1、元素入栈\n2、元素出栈\n3、读取栈顶元素\n");printf("4、判断是否空栈\n5、返回栈元素数量\n6、输出栈中元素\n");printf("0、退出操作\n");printf("*****************************\n");printf("请选择接下来要进行的操作:");while(scanf("%d",&ch)&&ch!=0){if(ch==1){printf("请输入要进栈的元素:");scanf("%d",&n);s.push(n);printf("%d成功进入栈顶!\n",n);}if(ch==2){if(s.size()<=0){printf("这是一个空栈!\n");}else{printf("%d栈顶元素成功出栈!\n",s.top());s.pop();}}if(ch==3){printf("此时栈顶元素是%d\n",s.top());}if(ch==4){if(!s.size())printf("这是一个空栈!\n");elseprintf("这不是一个空栈!\n");}if(ch==5){printf("此时栈中元素个数为%d\n",s.size());}if(ch==6){//堆栈不提供遍历栈元素的方法只好简单模拟一个进栈出栈 int temp[MAX_SIZE]={0};int j=s.size();for(int i=0;i<j;i++){temp[i]=s.top();printf("%d ",s.top());s.pop();}for(int i=j-1;i>=0;i--){s.push(temp[i]);}printf("\n"); } printf("请选择接下来要进行的操作:");}printf("成功退出!\n"); return 0; }