采用顺序存储实现栈的初始化、入栈、出栈操作。

  • Post author:
  • Post category:其他

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define TRUE   1
#define FALSE  0
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT  20
//typedef int Status;
typedef struct Stack{//顺序栈
    int  *base;
    int  *top;
    int    stacksize;      //栈可使用的最大容量
} SqStack;

int  InitStack (SqStack &S){ //0栈的初始化
    S.base=(int *)malloc (STACK_INIT_SIZE *sizeof(int));
    if (! S.base)  exit (OVERFLOW);
    S.top=S.base; 
    S.stacksize=STACK_INIT_SIZE;//栈的空间大小
    return 1;
}

int Push(SqStack &S, int e){//1入栈
    if (S.top – S.base>= S.stacksize){
        S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
        if(!S.base) exit(OVERFLOW);//如果分配失败,则退出
        S.top=S.base+S.stacksize;//栈顶
        S.stacksize+=STACKINCREMENT;//栈空间
    }
    *S.top++=e;
 return 1;
}

int Pop(SqStack &S){//2出栈
 int e;
    if( S.top==S.base)
 {
  printf(“栈为空\n”);
  return ERROR;//空栈
 }
    e=*–S.top;
    return e;//返回栈顶元素
}

void Print(SqStack &S){//输出
 
    if( S.top==S.base)
 {
  printf(“栈为空\n”);
  return ;//空栈
 }
 while(S.top>S.base)
 {
  printf(“%d  “,*S.base);
  S.base++;
 }
 printf(“\n”);
 return ;
 
}

void tip()
{
 printf(“*********计科101陈东东*************\n”);
    printf(“输入0创建空栈\n”);
 printf(“输入1进栈\n”);
 printf(“输入2出栈\n”);
 printf(“输入4输出栈元素\n”);
 printf(“输入-1退出\n”);
 printf(“**********************\n”);
}

int main()
{
 int x,k;
 SqStack S;
 //struct Stack S;
 tip();
 while(scanf(“%d”,&k),k!=-1)
 {
  switch(k)
  {
  case 0:InitStack(S);
   printf(“操作完毕\n”);
   tip();
   break;
  case 1:
   printf(“请输入进栈元素:”);
   scanf(“%d”,&x);
   Push(S, x);
   printf(“操作完毕\n”);
   tip();
   break;
  case 2:
   
   printf(“%d 出栈\n”,Pop(S));
   printf(“操作完毕\n”);
   tip();
   break;
  case 4:
   
       Print(S);
   printf(“操作完毕\n”);
   tip();
   break;
  }
 }
 
 return 0;
}


版权声明:本文为cddchina原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。