数据结构和算法分析

数据结构—栈的基本实现

2020-02-05  本文已影响0人  小明同学机器人

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

栈的定义和特点

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

栈的入栈出栈图

栈的基本操作

顺序栈的表示和实现

//
// 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);
}
上一篇 下一篇

猜你喜欢

热点阅读