数据结构 用C语言实现顺序栈的入栈,出栈,判断栈空

顺序栈,遵循先进后出后进先出原则。我在写的时候,宏定义的
firstsize 为创建一个栈时这个栈的初始大小,这里为100。addsize
为当栈满时,再想入栈的话每次栈大小的增量,这里用10来代替。
create函数为创建栈函数。push为入栈函数。empty函数用来判断
栈是否为空,print函数用来出栈。
//以下为全部代码

#include "stdio.h"
#include "malloc.h"
#define firstsize 100
#define addsize 10
typedef struct{
 int *base;
 int *top;
 int size;
}Sq;
void create(Sq &s)
{
 s.base=(int*)malloc(firstsize*sizeof(int));
 if(s.base)printf("create OK!\n");
 s.top=s.base;
 s.size=firstsize;
}
void push(Sq &s,int e)
{
 if(s.top-s.base>=s.size)
 {
 s.base=(int*)realloc(s.base,(s.size+addsize)*sizeof(int));
 printf("栈内空间分配成功\n");
 }
 *s.top=e;
 s.top++;
 printf("元素[%d]已入栈!\n",e);
}
void print(Sq &s)
{
 if(empty(s))printf("抱歉,栈已满,无法出栈\n");
 else
 {
   s.top--;
   printf("出栈:[%d]\n",*s.top);
  }
}
int empty(Sq &s)
{
 if(s.top==s.base||s.top
void main()
{
int i; Sq s;
do
{
printf("\n----------------\n1-");
printf("创建一个栈\n2-判断栈是否为空\n3-入栈\n4-出栈\n0-退出");
printf("\n----------------\n\n");
scanf("%d",&i);
switch(i)
{
 case 1:create(s);break;
 case 2:empty(s);break;
 case 3:
 {
 int e;
 printf("输入入栈元素:\n");
 scanf("%d",&e);
 push(s,e);
 }break;
 case 4:print(s);break;
 case 0:break;
 default:
 {printf("输入错误,请重新输入\n");
 }continue;
 }
 }while(i!=0);
 printf("程序已退出\n");
}


运行结果:数据结构 用C语言实现顺序栈的入栈,出栈,判断栈空_第1张图片

你可能感兴趣的:(数据结构与算法)