栈的基本概念

栈(stackios

 

栈是一种先进后出(FILO,即first-in-last-out)的数据结构,你能够把它想象成一个只开一个口的乒乓球筒,每次只能从最顶端处放置或取出数据。算法

通常在OI中咱们用一个数组和栈顶指针(用int表示的下标)来模拟一个栈。数组

栈支持两个操做:1.向栈顶加入一个元素 2.从栈顶取出一个元素这两个操做的时间复杂度都是O(1)。数据结构

那么它所维护的这个数据集合中,数据之间有什么样的关系呢?spa

很简单,就是fisrt-in-last-out,或者更具体一点:若是一个元素在另外一个元素以前加入这个集合中,那么它必定在那个元素以后退出这个集合。指针

  总之,栈是一种只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往上堆,最后取走时,只能从上面一件一件取。code

  栈就是一种相似桶堆积物品的数据结构,进行删除和插入的一端称为栈顶,另外一端称为栈底。blog

  插入通常称为进栈(PUSH),删除则称为退栈(POP)。io

一个栈能够用定长为n的数组s来表示,用一个栈指针top指向栈顶。若top=0,表示栈空,top=n时栈满。进栈时top加一。退栈时top减一。当top<0时下溢,栈指针在运算中永远指向栈顶。ast

          具体算法::
1.进栈算法(PUSH)

(1)                  若top>=n时,则给出上溢信息,作出错处理(进栈前首先检查是否已经为栈满,满则溢出,不满则做(2))。

(2)              top++(栈指针加一,指向进栈地址)。

(3)              s[top]=x,结束(x为新进栈元素)。

 

2.退栈算法(POP):

(1)          若top<=0时,则给出下溢信息,作出错处理(进栈前首先检查是否已经为空栈,空则溢出,不满则做(2))。

(2)      x=s[top],(退栈后的元素赋给x)

(3)      top--,结束(栈指针-1,指向栈顶)。

 

下面附上代码:

#include<iostream> #include<cstdio>
using namespace std; #define n 100
void push(int s[],int top,int x)//进栈 
{ if(top==n) cout<<"overflow"; else { top++; s[top]=x; } } void pop(int s[],int top,int y)//退栈
{ if(top==0) cout<<"underflow"; else { y=s[top]; top--; } } int main() { ......//省略 
}
相关文章
相关标签/搜索