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()
    {
        ......//省略 
    }
  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/sue_shallow/p/8504046.html
Copyright © 2011-2022 走看看