0
点赞
收藏
分享

微信扫一扫

栈的基本操作

Aliven888 2022-04-19 阅读 62
c语言

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
#define IncreaseSize 10

//动态顺序栈
typedef struct {
    int* data;
    int* top;
    int SqLength;
}SqStack;
//初始化栈
SqStack InitStack();
//遍历栈
void travse(SqStack S);
//进栈
int Push(SqStack& S, int x);
//出栈
int Pop(SqStack& S, int& x);

int main() {
    SqStack S = InitStack();
    travse(S);
    printf("请输入进栈的值:");
    int x;
    scanf_s("%d", &x);
    Push(S,x);
    travse(S);
    Pop(S,x);
    travse(S);
    printf("出栈的值:%d\n",x);
    return 0;
}
SqStack InitStack() {
    SqStack S;
    S.data = (int*)malloc(MaxSize * sizeof(int));
    if (!S.data) {
        printf("分配空间失败");
        exit(0);
    }
    S.top = S.data;
    S.top = S.top - 1;
    printf("请输入栈的初始化长度【最大长度50】:");
    int Mlength;
    int Mdata;
    scanf_s("%d", &Mlength);
    S.SqLength = Mlength;
    printf("请输入栈的初始化数据:");
    for (int i = 0; i < Mlength; i++)
    {
        scanf_s("%d", &Mdata);
        S.top++;
        *(S.top) = Mdata;
    }
    return S;
}
void travse(SqStack S) {
    printf("栈遍历为:");
    for (int i = 0; i < S.SqLength; i++)
    {
        printf("%d ", *(S.top));
        S.top--;
    }
    printf("\n");
}
int Push(SqStack& S, int x) {
    int Mlength = S.SqLength;
    if (S.top == &(S.data[49]))
    {
        S.data = (int*)malloc((Mlength + IncreaseSize) * sizeof(int));
        if (!S.data) {
            printf("分配空间失败");
            exit(0);
        }
        S.top = &(S.data[49]);
    }
    S.top++;
    *(S.top) = x;
    S.SqLength++;
    printf("进栈成功\n");
    return 1;
}
int Pop(SqStack& S, int& x) {
    int* m = S.data;
    if (S.top == m - 1)
    {
        printf("栈空");
        return 0;
    }
    x = *(S.top);
    S.top--;
    S.SqLength--;
    printf("出栈成功\n");
    return 1;
}

举报

相关推荐

0 条评论