顺序栈,遵循先进后出后进先出原则。我在写的时候,宏定义的
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<s.base)
{ printf("栈空\n");
return 1;}
else {printf("栈未空\n");
return 0;}
}
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");
}
运行结果: