数据结构—顺序栈的实现


```cpp
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define maxsize 100
#define NULL 0
typedef int elemtype;
typedef struct{
 elemtype *base;
 int *top;
 int stacksize;
}sqstack;
int initstack(sqstack &S) //初始化栈
{
    S.base=new int[maxsize];
    if(!S.base)
        exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=maxsize;
    return OK;
}
int push(sqstack &S,elemtype e)  //入栈
{
    if(S.top-S.base==S.stacksize) return ERROR;
    *S.top++=e;
    return OK;
}
int pop(sqstack &S,elemtype &e) //弹出栈顶元素
{
    if(S.top==S.base) return ERROR;
    e=*--S.top;
    return OK;
}
int gettop(sqstack S) //返回栈定元素
{
    if(S.top!=S.base)
        return *(S.top);
}
void outstack(sqstack S) // 遍历
{
    int i=0;
    sqstack p;
    p.top=S.top;
    if(S.top==S.base)
        printf("stack is empty!\n");
    while(p.top!=S.base)
    {
        printf("the stacktop %d element data :%d\n",++i,*(p.top-1));
        p.top--;
    }
} //outstack
void setempty(sqstack &p)
{
    p.top=p.base;
}
int main()
{
    sqstack q;
    int y,cord;
    elemtype a,b;
        initstack(q);
        printf("please input element number:\n");
        int i,n=10,x;
        for(i=0;i<n;++i)
            *q.top++=i+1;

    do
    {
        printf("\n     1   initiate sqstack  \n");
        printf("\n     2   push a element    \n");
        printf("\n     3   pop a element     \n");
        printf("\n     4   gettop element    \n");
        printf("\n     5   set empty sqstack \n");
        printf("\n     0  exit  \n");
        printf("please input your choose (0-5)-->\n");
        scanf("%d",&cord);
        printf("\n");
        switch(cord)
        {
            case 1:
            {
               system("cls");
               initstack(q);
               printf("please input element number:\n");
               int i,n,x;
               scanf("%d",&n);
               for(i=0;i<n;i++)
               {
                   printf("please input %d elem\n",i);
                   scanf("%d",&x);
                   *q.top ++=x;
               }
               outstack(q);
            } break;
            case 2:
                {
                    system("cls");
                    printf("please input a number to push:\n");
                    int i;
                    scanf("%d",&i);
                    push(q,i);
                    outstack(q);
                } break;
            case 3:
                {
                    system("cls");
                    printf("pop stack top\n");
                    int j;
                    b=pop(q,j);
                    if(b)
                    printf("top is %d\n",j);
                    outstack(q);
                } break;
            case 4:
                {
                    system("cls");
                    b=gettop(q);
                    if(b)
                        printf("stacktop elemt is %d",b);
                    outstack(q);
                } break;
            case 5:
                {
                    system("cls");
                    setempty(q);
                    printf("the sqstack be seted empty\n");
                    outstack(q);
                } break;
            case 0: exit(0);
        }
    } while(cord<=5);
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员小徐同学

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值