栈的顺序表示和实现

#include <stdio.h>
#include <stdlib.h>
#define MAX 20
typedef  int Elemtype;//必须加上;
//定义顺序栈的储存结构
typedef struct
{
    Elemtype stack[MAX];
    int top;
}SqStack;

//初始化
void InitStack(SqStack *p)
{
    if(!p)
    printf("内存分配失败!");
    p->top=-1;
}
//入栈
void Push(SqStack *p,Elemtype x)
{
 if(p->top<MAX-1)
 {
     p->top=p->top+1;//???????????????????????
     p->stack[p->top]=x;
 }
 else
 printf("Overflow!\n");
}
//出栈
Elemtype Pop(SqStack *p)
{
    Elemtype x;
    if(p->top>=0)
    {
        x=p->stack[p->top];
        printf("以前的栈顶数据元素%d已经被删除!\n",p->stack[p->top]);
        p->top=p->top-1;
        return x;
    }
    else
    {
        printf("underflow!\n");
        return 0;
    }

}
//获取栈顶元素
Elemtype GetTop(SqStack *p)
{
    Elemtype x;
    if(p->top>=0)
    {
        x=p->stack[p->top]; printf("\n栈顶元素为:%d\n",x);
        return x;
    }
    else
    {
        printf("Underflow!\n");
        return 0;
    }
}

//遍历
void OutStack(SqStack *p)
{
    int i;
    printf("\n");
    if(p->top<0)
    printf("这是一个空栈!");
    printf("\n");
    for(i=p->top;i>=0;i--)
     printf("第%d个元素是: %5d\n",i,p->stack[i]);
}
//z置空栈
void setEmtpy(SqStack *p)
{
    p->top=-1;

}
void main()
{
    SqStack *q;
    int cord;
    Elemtype a;
    printf("\n第一次使用必须初始化\n");
    do{
     printf("\n\n");
     printf("\n-------------主菜单-------------\n");
     printf("\n     1.初始化顺序栈  \n");
     printf("\n     2.插入一个元素\n");
     printf("\n     3.删除栈顶元素\n");
     printf("\n     4.取栈顶元素\n");
     printf("\n     5.置空顺序栈\n");
     printf("\n     6.结束程序运行\n");
     printf("\n---------------------------------\n");
     printf("\n请输入你的选择(1.2.3.4.5.6)\n");
     scanf("%d",&cord);
     switch(cord)
     {
         case 1:{
                q=(SqStack *)malloc(sizeof(SqStack));
                InitStack(q);
                OutStack(q);
                }break;
         case 2:{ printf("请输入要插入的元素:a=");
                 scanf("%d",&a);
                 Push(q,a);
                 OutStack(q);
             }break;
         case 3:{
                Pop(q);
                OutStack(q);
                }break;
         case 4:{
                GetTop(q);
                OutStack(q);
                }break;
         case 5:{
                setEmtpy(q);
                printf("\n顺序栈已被置空!、\n");
                OutStack(q);
                }break;
         case 6: {
                exit(0);
                }
     }

    }while(cord>0&&cord<=6);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无休居士

感谢您的支持,我会继续努!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值