【C语言数据结构】栈-顺序存储(顺序栈)


栈-顺序存储


代码实现

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

//栈的长度的固定为100
#define MaxSize 100
//元素数据类型
#define ElemType int

typedef struct{
    //整个栈的数据
    ElemType data[MaxSize];

    //栈顶指针(说是指针,其实就是个标识位置信息的变量)
    int top;
}SeqStack;

//初始化栈
void InitStack(SeqStack *stack){
    //所谓的初始化不过就是把这个指针设置为-1的位置上,表示当前栈里啥也没有。因为要是有一个元素,指针就指向0了。
    stack->top = -1;
};

//判断栈是否为空
bool StackEmpty(SeqStack stack){
    if(stack.top == -1)
        return true;
    return false;
}

//进栈操作
bool Push(SeqStack *stack,ElemType e){
    //进栈之前先判断栈满没满
    if(stack->top == MaxSize){
        return false;
    }

    //先让栈顶向上移动一个位置
    stack->top++;
    //把元素赋值到栈顶
    stack->data[stack->top] = e;
}

//出栈操作(若栈未空,则弹出栈顶元素,并用e返回)
bool Pop(SeqStack *stack,ElemType *e){
    //先判断栈是否为空
    if(StackEmpty(*stack)){
        return false;
    }
    //将栈顶元素赋值给e
    *e = stack->data[stack->top];

    //将top向下移动一个位置
    stack->top--;

    return true;
}

//获取栈顶元素,与Pop操作不同的是,这个只是读取栈顶元素,而不会将栈顶元素弹出。将读出的元素赋值给e
bool GetTop(SeqStack stack,ElemType *e){
    //判断栈是否为空
    if(StackEmpty(stack)){
        return false;
    }
    //将栈顶元素赋值给e
    *e = stack.data[stack.top];

    return true;
}

//销毁栈
void DestroyStack(SeqStack *stack){
    //只需要将栈顶元素置为-1即可
    stack->top = -1;
}

int main(){
    ElemType Elem;
    SeqStack stack;
    //初始化栈
    InitStack(&stack);

    //进栈一个元素
    Push(&stack,1);

    //读一下刚才进栈的元素
    GetTop(stack,&Elem);
    printf("当前栈顶元素为:%d\n",Elem);

    //出栈这个元素
    Pop(&stack,&Elem);
    //打印一下刚才出栈的元素
    printf("刚才出栈的元素为:%d\n",Elem);

    //销毁栈
    DestroyStack(&stack);

    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值