栈的定义和运算(数据结构)

本文介绍了如何使用C语言实现一个顺序栈,包括栈的初始化、进栈、出栈操作,并展示了两个具体示例:先入栈1到5,再全部出栈,以及先入栈3,2,1,出栈2次,再入栈4,5,6,7并全部出栈。
摘要由CSDN通过智能技术生成

编写一个程序实现顺序栈的各种基本运算,完成如下功能:

1.依次进栈数据为1,2,3,4,5,再全部出栈,输出出栈序列。

2.先进栈3,2,1,出栈2次,进栈4,5,6,7,再全部出栈,输出每次入栈,出栈序列。

代码实现:

#define maxsize 50

#include<stdio.h>

#include<stdlib.h>

//状态的定义

typedef enum {

    OK,

    ERROR

} Status;

//栈的定义(栈顶指针,栈顶指针,栈的最大容量)

typedef struct {

    int* top;

    int* base;

    int stacksize;

}sqstack;

//栈的初始化

Status Initstack(sqstack& S) {

    //构造空栈,并分配最大数组空间

    S.base = new int[maxsize];

    //如果创建失败

    if (!S.base) {

        return ERROR;

    }

    S.top = S.base;

    S.stacksize = maxsize;

    return OK;

}

//进栈

Status push(sqstack& S, int e) {

    // 栈满判断

    if (S.top - S.base >= S.stacksize) {

        return ERROR; // 返回栈满状态

    }

    // 未满,将元素压入栈顶,栈顶指针 top+1

    *S.top++ = e;

    return OK; // 返回成功状态

}

//出栈(删除栈顶元素)

int out(sqstack& S) {

    //空栈错误

    if (S.base == S.top) {

        return -1;

    }

    else {

        return *--S.top;//栈顶指针-1

    }

}

//获取栈顶元素

int gettop(sqstack& S) {

    //空栈返回错误

    if (S.base == S.top) {

        return ERROR;

    }

    else {

        return *(S.top - 1);

    }

}

int main() {

    sqstack S;

    Initstack(S);

    //入栈

    printf("依次进栈数据为1,2,3,4,5,再全部出栈\n");

    for (int i = 1; i <=5; i++) {

        Status status = push(S, i);

        if (status == OK) {

            printf("入栈成功,入栈顺序:%d\n", i);

        }

        else {

            printf("%d入栈失败\n", i);

        }

    }

    //出栈

    while (S.base != S.top) {

        int e = out(S);

        printf("出栈顺序:%d\n", e);

    }

    //进栈3,2,1,出栈2次

    printf("进栈3,2,1,出栈2次\n");

    for (int j = 3; j >=1; j--) {

        Status jt = push(S, j);

        if (jt == OK) {

            printf("入栈成功,入栈顺序:%d\n", j);

        }

    }

    //出栈两次

    out(S);

    out(S);

    //进栈4,5,6,7,再全部出栈

    printf("进栈4,5,6,7,再全部出栈\n");

    for (int k = 4; k < 8; k++) {

        Status kt = push(S, k);

        if (kt == OK) {

            printf("入栈成功,入栈顺序:%d\n", k);

        }

    }

    while (S.base != S.top) {

        int y = out(S);

        printf("出栈顺序:%d\n", y);

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值