c语言栈的实现以及操作_C语言:数据结构-栈的顺序存储结构及基本操作

1.栈的顺序存储结构

栈的顺序存储结构是指用一片连续的存储空间来存储栈中的数据元素,这样的栈称为顺序栈(Sequal Stack)。它类似于线性表的顺序存储结构,可用一个足够长度的一维数组来实现。栈底位置通常设置在数组下标为0的一端,而栈顶是随着插入和删除操作而变化的,因此,需要设置一栈顶指针top(整型变量)来指示当前栈顶的位置。

假设MaxSize=6,图3-2展示了顺序栈中数据元素和栈顶指针的关系。图3-2(a)为空栈,此时top=-1;图3-2(b)是进栈2个元素的情况;图3-2(c)是栈满的情况,此时top=MaxSize-1;图3-2(d)是在图3-2(c)的基础上出栈一个元素后的情况。

4c2d022131a5c0fe34d3a584a48ef611.png

栈顶指针和栈元素之间的关系

栈的顺序存储结构如下:

struct SeqStack /*声明一个顺序栈类型*/{ ElemType data[MaxSize]; /*用data数组存储栈中所有的数据元素*/ int top; /*用整型变量top指示栈顶元素的位置*/};struct SeqStack *s /*s为指向 SeqStack类型的指针变量*/

2.顺序栈的基本操作

顺序栈初始化算法

void InitStack(struct SeqStack *s) /*顺序栈的初始化*/{s->top=-1; /*将顺序栈设置为空栈*/}

顺序栈判栈空算法

int StackEmpty(struct SeqStack *s) /* 检查顺序栈是否为空栈运算 */{if(s->top==-1) return 1; /* 若栈为空,则返回1 */else return 0; /* 否则即栈非空时返回0 */}

顺序栈判栈满算法

int StackFull(struct SeqStack *s) /* 检查顺序栈是否为栈满 */{if(s->top==MaxSize-1) return 1; /* 若栈满,则返回1 */else return 0; /* 否则返回0 */}

顺序栈进栈算法

void Push(struct SeqStack *s, ElemType x){if(s->top==MaxSize-1) { /* 判断顺序栈是否为满栈 */printf("栈满溢出错误!");exit(1); /* 栈满不能入栈,退出运行 */}s->top++; /* 将栈顶指针top加1 */s->data[s>top]=x; /* 将元素x赋值到栈顶位置 */}

顺序栈出栈算法

ElemType Pop(struct SeqStack *s, ElemType x){if(StackEmpty(s)) { /*检查顺序栈是否为空*/printf("栈下溢错误!");exit(1); /*若栈空不能出栈,则退出运行*/}x=s->data[s->top]; /*暂存栈顶元素*/s->top--; /*将栈顶指针减1*/return x; /*返回原栈顶元素的值*/}

顺序栈取栈顶元素算法

ElemType GetTop(struct SeqStack *s) /* 顺序栈取栈顶元素运算 */{if(StackEmpty(s)) { /* 检查顺序栈是否为空 */printf("下溢错误!");exit(1); /* 若栈空则退出运行 */}return s->data[s->top]; /* 返回栈顶元素的值 */}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值