美文网首页数据结构和算法分析
数据结构—栈的基本实现

数据结构—栈的基本实现

作者: 小明同学机器人 | 来源:发表于2020-02-05 12:51 被阅读0次

       春节假期,无聊至极,有给橘子做接生的,有做套圈玩钱的,有一家人打扑克娱乐的,有微信视频聊天划拳喝酒的,无聊的最高境界就是自己自言自语,自己就是聊天对象,自己和自己玩游戏,数数自己的头发等等。不还真有这样的人。有没有有兴趣数我写了多少字的。!!

    栈的定义和特点

    是限定仅在表尾进行插入或者删除操作的线性表。根据后进先出的原则。在日常生活中的例子,比如 洗盘子逐个把盘子叠放起来,然后洗的时候从上面拿一个洗一个。

    栈的入栈出栈图
    • 从上图可看出 入站的小方块最后进入,出栈的时候小方块最先出去,则这就是栈的一种原则,一种形式。
    • 有熟悉开发android APP的应该熟悉,有个Fragment的控件,可以在一个布局控件中加入Fragment,addBackStack(),popBackStack(),方法分别就是入站出栈。有想学习Android 开发的可以私信,并发文章噢!!

    栈的基本操作

    • 构造空栈
    • 摧毁栈
    • 清空栈
    • 判断是否空栈
    • 栈中元素个数
    • 返回栈顶元素
    • 入栈
    • 出栈
    • 访问所有栈

    顺序栈的表示和实现

    • 顺序栈是指用顺序存储结构实现的栈,用一组连续的存储单元依次存放,从栈底到栈顶的元素。
    //
    // Created by wzy on 2020/2/5/005.
    //
    
    #include <stdio.h>
    
    #define  MAXSIZE 100
    typedef int SElemType;
    typedef struct {
        SElemType *base;
        SElemType *top;
        int stackSize;
    } SqStack;
    
    void initStack(SqStack &S) {
        S.base = new SElemType[MAXSIZE];
        if (!S.base) return;
        S.top = S.base;//起初 栈顶和栈底属于同一位置 指同一个地址
        S.stackSize = MAXSIZE;
    }
    
    bool Push(SqStack &S, SElemType e) {//栈 入栈值
        bool flag = false;
        if (S.top - S.base == S.stackSize) {
            printf("栈满\n");
        } else {
            *S.top++ = e;    //不满的话栈顶指针向上挪一位  并赋值
            printf("入站成功\n");
            flag = true;
        }
        return flag;
    }
    //出栈 返回栈顶元素
    SElemType Pop(SqStack &S, SElemType &e) {
    
        if (S.top == S.base) {
        } else {
            e = *--S.top - 1;
    //出栈的话 栈顶指针减一 ,并返回栈顶元素 再减一(栈顶指的本身就是一个空栈位置)
        }
        return e;
    
    
    }
    
    
    //显示栈顶元素
    SElemType GetTop(SqStack S) {
        if (S.top != S.base) {
            return *(S.top - 1);
        }
    }
    
    int main() {
        SqStack S;
        initStack(S);
        Push(S, 1);//入栈三次
        Push(S, 2);
        Push(S, 5);
        SElemType a = GetTop(S);
        printf("%d\n", a);//显示栈顶元素打印
        SElemType aa;
        Pop(S, aa);//出栈第一次
        SElemType p1 = Pop(S, aa);   //出栈两次,并打印栈顶元素
        printf("%d\n", p1);
    }
    
    • 有顺序栈就有链栈 使用链表的方式进行存储站元素。但是基本的操作都是一样的。进一步的讲解我将在以后进行更新。

    相关文章

      网友评论

        本文标题:数据结构—栈的基本实现

        本文链接:https://www.haomeiwen.com/subject/bpwjxhtx.html