顺序栈基本操作实现(c语言)

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef int ElemType;
typedef struct node{
    ElemType data[MAX_SIZE+1];
    int top;
}*seqStack,stackNode;

//顺序栈的初始化
seqStack initSeqStack()
{
      seqStack s=(seqStack)malloc(sizeof(struct node));
      if(!s)
      {
            printf("动态内存分配失败!\n");
            exit(0);
      }
      s->top=0;
      printf("栈初始化成功!\n");
      return s;
}
//入栈
int push(seqStack s,ElemType data)
{
      if(s)
      {
              s->data[++s->top]=data;
              return data;
      }
      return 0;



}
//出栈
int pop(seqStack s,ElemType *data)
{
      if(s)
      {
            *data=s->data[s->top--];
            return 1;
      }
      return 0;
}

//判断栈是否为空
int isEmpty(seqStack s)
{
      if(s->top==0)
            return 1;
      return 0;
}

//判断栈满
int isFull(seqStack s)
{
      if(s->top==MAX_SIZE)
            return 1;
      return 0;
}

//获取栈顶元素
int getTop(seqStack s)
{
      if(!isEmpty(s))
      {
            return s->data[s->top];
      }
      return -1;
}
int main()
{
    seqStack s=initSeqStack();
    if(isEmpty(s))
    {
          printf("当前栈为空\n");
    }
    int n,a[100],i,t,elemT;
    printf("请输入数字n\n");
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
          scanf("%d",&a[i]);

          push(s,a[i]);
          elemT=getTop(s);
         /* if(elemT!=-1)
          {
                printf("当前栈顶元素为%d\n",elemT);
          }*/
    }
    if(isFull(s))
    {
          printf("当前栈满\n");
    }

    while(s->top!=0)
    {
          pop(s,&t);
          printf("%d ",t);
           elemT=getTop(s);
          /*f(elemT!=-1)
          {
                printf("当前栈顶元素为%d\n",elemT);
          }*/
              }
    printf("\n");
      if(isEmpty(s))
    {
          printf("当前栈为空\n");
    }


    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值