栈 pop push show

栈(stack)是限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。

栈又称为后进先出(LastIn First Out)的线性表,简称LIFO结构。

栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表而已。定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶,而不是栈底。

堆叠数据结构使用两种基本操作:推入(push)和弹出(pop):

  • 推入:将数据放入堆叠的顶端(阵列形式或串列形式),堆叠顶端top指标加一。
  • 弹出:将顶端数据资料输出(回传),堆叠顶端资料减一。

阵列堆叠

堆栈可以用链表数组两种方式实现,一般为一个堆栈预先分配一个大小固定且较合适的空间并非难事,所以较流行的做法是Stack结构下含一个数组。

如果空间实在紧张,也可用链表实现,且去掉表头。这里是以数组实现的。

代码:

//阵列堆叠
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstdbool>
using namespace std;
struct stack
{
    int map[10];//开辟空间
    int top;
};
bool empty(struct stack *s)//判断栈空
{
    return s->top==0;
}
void push(struct stack *s,int x)
{
    s->top=s->top+1;
    s->map[s->top]=x;
}
int pop(struct stack *s,int i)
{
    if(empty(s))
    {
        return 0;
    }
    else
    {
        while(i--)
        {
           s->top=s->top-1;
        }
        return s->map[s->top+1];
    }
}
int show(struct stack *s)
{
    for(int i=1;i<=s->top;i++)
    {
        cout<<s->map[i]<<" ";
    }
    cout<<endl;
    return 0;
}

int main()
{
    stack s;
    s.top=0;//栈顶归零
    cout<<"1:push  2:pop  3:show"<<endl;
    while(1)
    {
        char a;
        cin>>a;
        switch(a)
        {
            case ‘1‘:
            {
                cout<<"The number of numbers to insert:";
                int num;
                cin>>num;
                int t;
                for(int i=0;i<num;i++)
                {
                    cin>>t;
                   push(&s,t);
                }
                break;
            }
            case ‘2‘:
            {
                cout<<"The number of numbers to be deleted:";
                int num;
                cin>>num;
                pop(&s,num);
                break;
            }
            case ‘3‘:
            {
                show(&s);
                break;
            }
        }
    }
    return 0;
}

今天也是元气满满的一天!good luck!

时间: 2024-10-07 09:06:08

栈 pop push show的相关文章

Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序

题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的.比如输入的push 序列是1.2.3.4.5,那么4.5.3.2.1 就有可能是一个pop 系列,但序列4.3.5.1.2 就不可能是push 序列1.2.3.4.5 的pop 序列. 分析: 我们首先定义遍历push的序数i=0  遍历pop序列的序数 j =0 我们可以先遍历给出的push序列,并且时刻与pop序列的头元素p

iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解

(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界面,也就是用户看到的界面. (2)我们需要把导航控制器加载到APP中,需要把这个导航控制器设置为window的根视图控制器(都是控制器类,可以赋值),这样就相当于加载到了window里. (3)我们要在栈中新增或者删除一个视图控制器,就需要得到导航控制器,一般在栈中得所有视图控制器都有一个self.

栈 给定push序列,判断给定序列是否是pop序列 ~ 进!出!进!出!进!出!进进出出!累死我了……

题目: 输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2.3.4.5,那么4.5.3.2.1就有可能是一个pop系列.因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4.5.3.2.1.但序列4.3.5.1.2就不可能是push序列1

【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解

(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最以下,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界面,也就是用户看到的界面. (2)我们须要把导航控制器载入到APP中,须要把这个导航控制器设置为window的根视图控制器(都是控制器类,能够赋值),这样就相当于载入到了window里. (3)我们要在栈中新增或者删除一个视图控制器,就须要得到导航控制器,一般在栈中得全部视图控制器都有一个self.

【编程题目】栈的 push、pop 序列

29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整数都是不相等的. 比如输入的 push 序列是 1.2.3.4.5,那么 4.5.3.2.1 就有可能是一个 pop 系列.因为可以有如下的 push 和 pop 序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的 pop

queue for max elem, pop, push

个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 博客内容:queue for max elem, pop, push; 博客时间:2014-4-15; 编程语言:C++ ; 编程坏境:Windows 7 专业版 x64; 编程工具:vs2008 32位编译器; 制图工具:office 2010 ppt; 硬件信息:7G-3 笔记本; my words Don

实现一个栈,Push,Pop,Min,并且保证时间复杂度为O(1)

#include<iostream>  using namespace std;    struct stack        {          int* _pElem; //指向元素数据的指针          int _capacity;           int _top;             stack( int n )                   :_capacity( n)          {              _top = 0;            

笔试算法题(14):整数二进制表示中的1 &amp; 判定栈的push和pop序列是否对应

出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位,k%2 ==0表示其是否是偶数,如果不是则说明当前二进制表示的最右边一位为1,当k==0成立的时候移位结束: 另外还可以使用'消1'的方法,如果二进制表示A为'****1000',则A-1为'****0111',也就是我们仅关注二进制表示最右边的第一个 1,这样的话A&(A-1)的结果就可以将最右边的

使用风险指针(hazard pointer) 处理无锁栈的 push 与 pop

constexpr size_t maxHazardPointers = 100; struct HazardPointer { std::atomic<std::thread::id> id; std::atomic<void*> pointer; }; array<HazardPointer, maxHazardPointers> hazardPointers; class HazardPointerOwner { HazardPointer* hazardPoin