#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define error -1
#define OK 1
#define MAXSIZE 100//更改该值可以改变栈的最大容量
typedef struct//初始化
{
int *base;
int *top;
int STACKSIZE;
}SQSTACK,*PSQSTACK;
int INITSQSTACK(SQSTACK &S)//栈的建立
{
S.base = (int*)malloc(sizeof(int[MAXSIZE]));
if(!S.base) exit(error);
S.top = S.base;
S.STACKSIZE = sizeof(int[MAXSIZE]);
return OK;
}
int push(SQSTACK &S,int m)//入栈,将e加入栈
{
if(S.top - S.base == S.STACKSIZE)//判断栈是否满
{
printf("里面已经被装的满满的了,再这样下去就要坏掉了(●ˇ∀ˇ●)\n");
return error;
}
*S.top = m;
S.top = (S.top + sizeof(int));
return OK;
}
int pop(SQSTACK &S)//出栈,并返回栈顶的值
{
if (S.top == S.base )
{
printf("我被榨干了,你不要过来啊!o(≧口≦)o\n");
return error;
}
S.top = (S.top - sizeof(int));
printf("出栈%d\n",*S.top);
*S.top = NULL;
}
int main()
{
int i,a,b,c,d,e,f;//a为选择判断条件,d,f为临时存储的数据,e为栈内有效数
e = 0;
b = MAXSIZE;//栈最大数
c = 1;//循环判定条件
do{
printf("1----创建栈\n");
printf("2----入栈\n");
printf("3----出栈\n");
printf("4----结束\n");
scanf("%d",&a);
switch(a){
case 1:
SQSTACK zhan;
INITSQSTACK(zhan);
printf("当前栈的大小为%d个字节\n",b);
break;
case 2:
printf("请问有多少个数据需要入栈\n");
scanf("%d",&d);
for(i=0;i<d;i++)
{
printf("请输入需要入栈的第%d个数\n",i+1);
scanf("%d",&f);
push(zhan,f);
e++;
}
break;
case 3:
printf("请输入你要出栈的个数\n");
scanf("%d",&d);
for(;d > e;)
{
printf("你输你马呢给爷重新输( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///)\n");
scanf("%d",&d);
}
i=0;
for(i = 0;i < d;i++)
{
pop(zhan);
e--;
}
break;
case 4:
c = 0;
}
}
while(c);
return 0;
}
运行结果如下
栈(Stack)是只允许在一端进行插入或删除操作的线性表。
先进后出,后入先出