您当前的位置: 首页 >  数据结构
  • 2浏览

    0关注

    880博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【大话数据结构C语言】11 栈的顺序存储结构及其基本操作

CodeAllen嵌入式编程 发布时间:2020-11-01 17:47:33 ,浏览量:2

系列文章参考资料为《大话数据结构》,源码为个人私有,未经允许不得转载 技术交流群或资料添加微信号:CoderAllen,回复关键字即可

顾名思义,根据前边顺序表的实现就会发现和栈的存储方式非常相似,不过是栈对数据的存取有一定的限制规则,而顺序表示没有的,这其实是最大的区别

从栈的特性可以知道,下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化最小

栈的定义:

typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */

/* 顺序栈结构 */
typedef struct
{
        SElemType data[MAXSIZE];
        int top; /* 用于栈顶指针 */
}SqStack;

和顺序表类比可以知道顺序栈的基本操作应该也是插入和取出,不过一般称其为进栈和出栈

进栈操作: 在这里插入图片描述

/* 插入元素e为新的栈顶元素 */
Status Push(SqStack *S,SElemType e)
{
        if(S->top == MAXSIZE -1) /* 栈满 */
        {
                return ERROR;
        }
        S->top++;                               /* 栈顶指针增加一 */
        S->data[S->top]=e;  /* 将新插入元素赋值给栈顶空间 */
        return OK;
}

同理,出栈操作:

/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
Status Pop(SqStack *S,SElemType *e)
{ 
        if(S->top==-1)
                return ERROR;
        *e=S->data[S->top];     /* 将要删除的栈顶元素赋值给e */
        S->top--;                               /* 栈顶指针减一 */
        return OK;
}

用学到的入栈出栈完成一个实例:

#include 
//元素elem进栈
int push(int* a,int top,int elem){
    a[++top]=elem;
    return top;
}
//数据元素出栈
int pop(int * a,int top){
    if (top==-1) {
        printf("空栈\n");
        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;
}

在这里插入图片描述

关注
打赏
1665938897
查看更多评论
立即登录/注册

微信扫码登录

0.2698s