栈的实现C语言

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//顺序栈(从0开始存储,先移动栈顶指针,再。。。)
#define MAXSIZE 100   //顺序栈空间存储量

typedef int DataType; //顺序栈元素类型

typedef struct{
    DataType *data;     //顺序栈空间元素存储基址
    int top;            //栈顶
}SeqStack;              //顺序栈类型


int go_on(){
    int flag=1,i;
    char choice;
    while (1) {
        printf("继续请输入1,停止请输入0\n");
        scanf("%d",&i);
        if (i==1) {
        break;
        }
        else if (i==0) {
        flag=0;
        break;
        }
        else {
        printf("请按要求输入,谢谢\n");
        }
    }
    return (flag);
}

//初始化,构造一个空顺序栈
void Init_SeqStack(SeqStack *S,int n){
    S->data=(DataType *)malloc(n*sizeof(DataType));
    if (S->data==NULL) {
        printf("\n内存分配失败\n");
        exit(-1);
    }
    S->top=-1;
}


// 判断顺序栈是否为空
int Empty_SeqStack(SeqStack *S){
    if (S->top==-1) {
       return 1;
    }
    else {
        return 0;
    }
}
// 判断顺序栈是否为满
int Full_SeqStack(SeqStack *S){
     if (S->top==MAXSIZE-1) {
        return 1;
    }
    else{
        return 0;
    }
}
// 入栈,插入元素e为新的栈顶元素
int Push_SeqStack(SeqStack *S,DataType e){
   if (Full_SeqStack(S)==1) {
       printf("\n栈满,不能入栈\n");
   }
   else {
       S->top++;
       S->data[S->top]=e;
       return 1;
   }
}
void Push(SeqStack *S){
    DataType x;
    int flag=1,push_flag;
    while (flag) {
        printf("\n请输入要入栈的元素\n");
        scanf("%d",&x);
        push_flag=Push_SeqStack(S,x);
        if (push_flag==1) {
            printf("\n入栈成功\n");
        }
        else {
            printf("\n入栈失败\n");
        }
        flag=go_on();
    }
}
// 出栈,删除栈顶元素,并由*e返回其值
int Pop_SeqStack(SeqStack *S,DataType *e){
    if (Empty_SeqStack(S)==1) {
        printf("\n栈空,不能出栈\n");
        return 0;
    }
    else {
        *e=S->data[S->top];
        S->top--;
        return 1;
    }
}
void Pop(SeqStack *S){
    DataType x;
    int flag=1,pop_flag;
    while (flag) {
        pop_flag=Pop_SeqStack(S,&x);
        if (pop_flag==1) {
            printf("\n出栈成功,出栈的元素为%d\n",x);
        }
        else {
            printf("\n出栈失败\n");
        }
        flag=go_on();
    }
}
// 取栈顶元素,并由*e返回其值
int GetTop_SeqStack(SeqStack *S,DataType *e){
    if (Empty_SeqStack(S)==1) {
        printf("\n栈空,不能取栈顶元素\n");
        return 0;
    }
    else {
        *e=S->data[S->top];
        return 1;
    }
}
// 输出栈顶元素
void Display_Top(SeqStack *S){
    DataType e;
    if (Empty_SeqStack(S)==1) {
        printf("\n栈空,没有元素\n");
    }
    else {
        GetTop_SeqStack(S,&e);
        printf("\n栈顶元素%4d\n",e);
    }
}
void Display_SeqStack(SeqStack *S){
    int i;
    if (Empty_SeqStack(S)==1) {
        printf("\n栈空\n");
    }
    else {
        printf("\n栈全部元素\n");
        printf("栈底<--------------------->栈顶\n");
        for (i=0; i<=S->top;i++) {
            printf("%6d\n",S->data[i]);
        }
    }
}

main(){
    SeqStack S;
    int flag=1,j;
    Init_SeqStack(&S,MAXSIZE);
    do {
        printf("\n");
        printf("-------顺序栈动态数组的实现---------\n");
        printf("入栈请摇1\n");
        printf("出栈请摇2\n");
        printf("输出栈顶元素请摇3\n");
        printf("输出全部元素请摇4\n");
        printf("退出请摇0\n");
        printf("----------------------\n");
        scanf("%d",&j);
        switch (j) {
        case 1:Push(&S);break;
        case 2:Pop(&S);break;
        case 3:Display_Top(&S);break;
        case 4:Display_SeqStack(&S);break;
        case 0:flag=0;printf("感谢大哥的使用\n");break;
        }
    }while (flag==1);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值