顺序栈基本操作实现(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;
}

猜你喜欢

转载自blog.csdn.net/rj2017211811/article/details/85053654