利用栈的基本知识进行简单程序的编程,从终端输入数据经压栈、出栈操作。最后将其列印出来。
#include<stdio.h>
#define MaxSize 10
typedef int BOOL;
typedef struct stack{
int Top,MaxStack;
int Element[MaxSize];
}Stack;
void Creat_Stack(Stack *p,int m)
{
p->Top=0;
p->MaxStack=m;
}
BOOL Is_Empty(Stack *p)
{
return p->Top<1;
}
BOOL Is_Full(Stack *p)
{
return p->Top>=MaxSize;
}
void Push(Stack *p,int x)
{
if(Is_Full(p))
printf("Overflow/n");
else
p->Element[++p->Top]=x; //注意这里要先将指针进一,后在将值赋给新的地址位置
}
void Pop(Stack *p)
{
if(Is_Empty(p))
printf("underflow/n");
else
p->Top--; //指针倒退一个
}
void PrintStack(Stack *p)
{
if(Is_Empty(p))
printf("/nIs Empty!/n/n");
else
{
printf("%d, ",p->Element[p->Top--]); //打印出元素,同时将指针后退一个位置
PrintStack(p);
}
}
void main()
{
Stack s;
int i,n;
int a[MaxSize];
Creat_Stack(&s,MaxSize); /*Construction of a capacity for MaxSize air for stack*/
printf("please put into number element:/n");
scanf("%d",&n); //输入你想从终端输入几个数据进栈
for(i=0;i<n;i=i++)
{
scanf("%ld",a+i); //从终端输入数据
}
for(i=0;i<n;i++)
{
Push(&s,a[i]); //压栈
printf("%d,",a[i]);
}
printf("/n/n");
Pop(&s); //出栈
Pop(&s);
PrintStack(&s); //列印
}
编译运行,结果正确!
结果如下:
please put into number element:
5 回车
9
8
7
6
5
回车
9,8,7,6,5,
7,8,9
is empty!