zoukankan      html  css  js  c++  java
  • 栈的基本概念

    栈(stack

     

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

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

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

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

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

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

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

      插入一般称为进栈(PUSH),删除则称为退栈(POP)。

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

              具体算法::
    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()
    {
        ......//省略 
    }
  • 相关阅读:
    在vim中设置将tab自动转化为4个空格
    nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache
    Centos7安装杀毒软件ClamAV
    网页中meta标记
    js刷新页面方法大全
    微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法
    phpcms v9 如何实现用户登录
    web页面自适应手机屏幕宽度
    微信公共平台消息回复类
    自动回复微信消息
  • 原文地址:https://www.cnblogs.com/sue_shallow/p/8504046.html
Copyright © 2011-2022 走看看