【数据结构】静态顺序栈

⭐️写在前面的话⭐️

📒博客主页: 程序员好冰
🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】
📌本文由 程序员好冰 原创,CSDN 首发!
📆入站时间: 🌴2022 年 07 月 13 日🌴
✉️ 是非不入松风耳,花落花开只读书。
💭推荐书籍:📚《Java编程思想》,📚《Java 核心技术卷》
💬参考在线编程网站:🌐牛客网🌐力扣
🍭 作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!🍭


静态顺序栈的实现

初始化

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

#define MAX_SIZE 100
#define OK 1
#define ERROR -1

//静态顺序栈:固定大小
typedef int ElemType;
typedef int Status;

typedef struct SqStack
{
    ElemType data[MAX_SIZE];
    int top;
}SqStack;

Status InitStack(SqStack*);
Status DestoryStack(SqStack*);
Status ClearStack(SqStack*);
Status StackIsEmpty(SqStack);
Status StackLength(SqStack);
Status GetTop(SqStack);
Status Push(SqStack*,ElemType);
Status Pop(SqStack*);
Status PrintStack(SqStack);

1、初始化栈

//1、初始化栈
Status InitStack(SqStack *S)
{
    S->top=-1;
    printf("栈初始化成功.\n");
    return OK;
}

2、销毁栈

//2、销毁栈
Status DestoryStack(SqStack *S)
{
    free(S->data);
    return OK;
}

3、清空栈

//3、清空栈
Status ClearStack(SqStack *S)
{
    S->top=-1;
    printf("清空栈成功.\n");
    return OK;
}

4、检查栈是否为空

//4、检查栈是否为空
Status StackIsEmpty(SqStack S)
{
    if(S.top==-1){
        printf("当前栈为空.\n");
        return OK;
    }
    printf("当前栈不为空.\n");
    return OK;
}

5、返回栈的长度

//5、返回栈的长度
Status StackLength(SqStack S)
{
    if(S.top==-1){
        printf("当前栈的长度为0,容量为%d.\n",MAX_SIZE);
        return OK;
    }
    printf("当前栈的长度为%d,容量为%d.\n",S.top+1,MAX_SIZE);
    return OK;
}

6、返回栈顶元素

//6、返回栈顶元素
Status GetTop(SqStack S)
{
    if(S.top==-1){
        printf("栈空,请压栈后再操作.\n");
        return ERROR;
    }
    printf("栈顶元素为:%d.\n",S.data[S.top]);
    return OK;
}

7、压栈

//7、压栈
Status Push(SqStack *S,ElemType e)
{
    //top从0到MAX_SIZE-1,一共MAX_SIZE个
    if(S->top==MAX_SIZE-1){
        printf("栈满,请重新操作.\n");
        return ERROR;
    }
    S->top++;
    S->data[S->top]=e;
    printf("元素%d被压入.\n",e);
    PrintStack(*S);
    return OK;
}

8、弹栈

//8、弹栈
Status Pop(SqStack *S)
{
    if(S->top==-1){
        printf("栈空,请压栈后再操作.\n");
        return ERROR;
    }
    printf("元素%d被弹出.\n",S->data[S->top]);
    S->top--;
    PrintStack(*S);
    return OK;
}

9、打印栈中所有元素

//9、打印栈中所有元素
Status PrintStack(SqStack S)
{
    if(S.top==-1){
        printf("栈空,请压栈后再操作.\n");
        return ERROR;
    }
    printf("栈为:");
    while(S.top!=-1){
        printf("%d  ",S.data[S.top]);
        S.top--;
    }
    return OK;
}

主函数

int main()
{
    SqStack S;
    printf("请继续操作...\n");
    while(1){
        int input;
        int value;
        printf("\n==========================\n");
        printf("1、初始化静态顺序栈.\n");
        printf("2、销毁栈.\n");
        printf("3、清空栈.\n");
        printf("4、检查栈是否为空.\n");
        printf("5、返回栈的长度.\n");
        printf("6、返回栈顶元素.\n");
        printf("7、压栈.\n");
        printf("8、弹栈.\n");
        printf("9、打印栈中所有元素.\n");
        printf("\n==========================\n");
        printf("请输入对应操作的序号:");
        scanf("%d",&input);
        switch(input){
        case 1:
            InitStack(&S);
            break;
        case 2:
            DestoryStack(&S);
            break;
        case 3:
            ClearStack(&S);
            break;
        case 4:
            StackIsEmpty(S);
            break;
        case 5:
            StackLength(S);
            break;
        case 6:
            GetTop(S);
            break;
        case 7:
            printf("请输入需要压入的元素:");
            scanf("%d",&value);
            Push(&S,value);
            break;
        case 8:
            Pop(&S);
            break;
        case 9:
            PrintStack(S);
            break;
        }
    }
    return 0;
}

程序源码

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

#define MAX_SIZE 100
#define OK 1
#define ERROR -1

//静态顺序栈:固定大小
typedef int ElemType;
typedef int Status;

typedef struct SqStack
{
    ElemType data[MAX_SIZE];
    int top;
}SqStack;

Status InitStack(SqStack*);
Status DestoryStack(SqStack*);
Status ClearStack(SqStack*);
Status StackIsEmpty(SqStack);
Status StackLength(SqStack);
Status GetTop(SqStack);
Status Push(SqStack*,ElemType);
Status Pop(SqStack*);
Status PrintStack(SqStack);

//1、初始化栈
Status InitStack(SqStack *S)
{
    S->top=-1;
    printf("栈初始化成功.\n");
    return OK;
}

//2、销毁栈
Status DestoryStack(SqStack *S)
{
    free(S->data);
    return OK;
}

//3、清空栈
Status ClearStack(SqStack *S)
{
    S->top=-1;
    printf("清空栈成功.\n");
    return OK;
}

//4、检查栈是否为空
Status StackIsEmpty(SqStack S)
{
    if(S.top==-1){
        printf("当前栈为空.\n");
        return OK;
    }
    printf("当前栈不为空.\n");
    return OK;
}

//5、返回栈的长度
Status StackLength(SqStack S)
{
    if(S.top==-1){
        printf("当前栈的长度为0,容量为%d.\n",MAX_SIZE);
        return OK;
    }
    printf("当前栈的长度为%d,容量为%d.\n",S.top+1,MAX_SIZE);
    return OK;
}


//6、返回栈顶元素
Status GetTop(SqStack S)
{
    if(S.top==-1){
        printf("栈空,请压栈后再操作.\n");
        return ERROR;
    }
    printf("栈顶元素为:%d.\n",S.data[S.top]);
    return OK;
}

//7、压栈
Status Push(SqStack *S,ElemType e)
{
    //top从0到MAX_SIZE-1,一共MAX_SIZE个
    if(S->top==MAX_SIZE-1){
        printf("栈满,请重新操作.\n");
        return ERROR;
    }
    S->top++;
    S->data[S->top]=e;
    printf("元素%d被压入.\n",e);
    PrintStack(*S);
    return OK;
}

//8、弹栈
Status Pop(SqStack *S)
{
    if(S->top==-1){
        printf("栈空,请压栈后再操作.\n");
        return ERROR;
    }
    printf("元素%d被弹出.\n",S->data[S->top]);
    S->top--;
    PrintStack(*S);
    return OK;
}

//9、打印栈中所有元素
Status PrintStack(SqStack S)
{
    if(S.top==-1){
        printf("栈空,请压栈后再操作.\n");
        return ERROR;
    }
    printf("栈为:");
    while(S.top!=-1){
        printf("%d  ",S.data[S.top]);
        S.top--;
    }
    return OK;
}

int main()
{
    SqStack S;
    printf("请继续操作...\n");
    while(1){
        int input;
        int value;
        printf("\n==========================\n");
        printf("1、初始化静态顺序栈.\n");
        printf("2、销毁栈.\n");
        printf("3、清空栈.\n");
        printf("4、检查栈是否为空.\n");
        printf("5、返回栈的长度.\n");
        printf("6、返回栈顶元素.\n");
        printf("7、压栈.\n");
        printf("8、弹栈.\n");
        printf("9、打印栈中所有元素.\n");
        printf("\n==========================\n");
        printf("请输入对应操作的序号:");
        scanf("%d",&input);
        switch(input){
        case 1:
            InitStack(&S);
            break;
        case 2:
            DestoryStack(&S);
            break;
        case 3:
            ClearStack(&S);
            break;
        case 4:
            StackIsEmpty(S);
            break;
        case 5:
            StackLength(S);
            break;
        case 6:
            GetTop(S);
            break;
        case 7:
            printf("请输入需要压入的元素:");
            scanf("%d",&value);
            Push(&S,value);
            break;
        case 8:
            Pop(&S);
            break;
        case 9:
            PrintStack(S);
            break;
        }
    }
    return 0;
}
运行截图

image-20230331012843247


🚀先看后赞,养成习惯!🚀

🚀 先看后赞,养成习惯!🚀

🎈觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!🎈


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值