栈和队列---1顺序栈

@Adrian

顺序栈元素"入栈"

比如,还是模拟栈存储 {1,2,3,4} 的过程。最初,栈是"空栈",即数组是空的,top 值为初始值 -1,如图 3 所示:
在这里插入图片描述
首先向栈中添加元素 1,我们默认数组下标为 0 一端表示栈底,因此,元素 1 被存储在数组 a[1] 处,同时 top 值 +1,如图 4 所示:

在这里插入图片描述
采用以上的方式,依次存储元素 2、3 和 4,最终,top 值变为 3,如图 5 所示:
在这里插入图片描述

顺序栈元素"出栈"

其实,top 变量的设置对模拟数据的 “入栈” 操作没有实际的帮助,它是为实现数据的 “出栈” 操作做准备的。

比如,将图 5 中的元素 2 出栈,则需要先将元素 4 和元素 3 依次出栈。需要注意的是,当有数据出栈时,要将 top 做 -1 操作。因此,元素 4 和元素 3 出栈的过程分别如图 6a) 和 6b) 所示:
在这里插入图片描述

顺序栈的完整代码示例:
#include <stdio.h>
#include <stdlib.h>
//元素elem进栈,a为数组,top值为当前的栈顶位置
int push(int* a,int top,int elem){
    a[++top]=elem;
    return top;
}
//数据元素出栈
int pop(int*a,int top){
    if(top==-1){
        printf("空栈");
        return -1;
    }
    printf("弹栈元素;%d\n",a[top]);
    top--;
    return top;
}
int main()
{
    int a[100];
    int top=-1;
    top=push(a,top,1);
    top=push(a,top,2);
    top=push(a,top,3);
    top=push(a,top,4);
    top=pop(a,top);
    top=pop(a,top);
    top=pop(a,top);
    top=pop(a,top);
    top=pop(a,top);
    return 0;
}

输出结果:

在这里插入图片描述

发布了27 篇原创文章 · 获赞 0 · 访问量 219
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览