版权声明:原创的东西,转载时留个标记。 https://blog.csdn.net/laguoqing/article/details/84892028
在做栈的习题,顺手把顺序栈的操作总结实现了一下,也算很好的复习了一下结构体,结构体指针,过程中还好好的体会了一把调试的“乐趣”。
开始的时侯卡在用不用指针上了,最后发现C语言不用指针实在是太不方便了,指针写上,哗哗的,如涛涛江水连绵不绝。
/*
实现栈的全体操作
2019年12月8日于六安碧桂园中午蒸了个不太成功的鸡蛋之后
赵国庆 [email protected]
*/
#include "stdio.h"
#define MAXSIZE 50
#define TRUE 1
#define FALSE 0
typedef int bool; //Cpp中这一行要取消掉,他内置bool型
typedef int Status; //函数类型,其值是函数结果状态码
typedef int ElemType; //数据类型
typedef struct stack
{
ElemType Data[MAXSIZE];
int top;
}SqStack;
void InitStack(SqStack *s)//初始化栈
{
s->top=-1;
}
bool StackEmpty(SqStack *s)//判栈空
{
if(s->top==-1)
return TRUE;
else
return FALSE;
}
bool Push(SqStack *s,ElemType e)//压栈
{
if(s->top==MAXSIZE-1)
{
printf("Stack is Full\n");
return FALSE;
}
s->Data[++(s->top)]=e;//先移指针再入数
return TRUE;
}
bool Pop(SqStack *s,ElemType *e)//出栈
{
if(s->top==-1)
{
printf("Stack is Empty\n");
return FALSE;
}
*e=s->Data[(s->top)--];//先取数再减指针
return TRUE;
}
bool GetTop(SqStack *s,ElemType *e)//取栈顶元素
{
if(s->top==-1)
return FALSE;
*e=s->Data[s->top];
return TRUE;
}
int main()
{
SqStack FS,*FSPtr;
FSPtr=&FS;
ElemType a=1,b=2,c=3;
ElemType *x; //用来返回弹出或取出的元素
int i;
InitStack(FSPtr);
printf("%s\n",StackEmpty(FSPtr)==TRUE?"Stack is Empty":"Stack is not Empty");
Push(FSPtr,a);
printf("%s\n",StackEmpty(FSPtr)==TRUE?"Stack is Empty":"Stack is not Empty");
Push(FSPtr,b);
Push(FSPtr,c);
for(i=0;i<50;i++) //顺序压0-49数字入栈
{
Push(FSPtr,i);
printf("Push data %d into stack \n",i);
}
Pop(FSPtr,x);
printf("Pop data is %d\n",*x);
GetTop(FSPtr,x);
printf("GetTop data is %d\n",*x);
for(i=0;i<20;i++) //顺序弹出
{
Pop(FSPtr,x);
printf("Pop data is %d\n",*x);
}
printf("The Stack is:\n");
for(i=FSPtr->top;i>-1;i--) //输出全栈
{
printf("%d ",FSPtr->Data[i]);
}
getchar();
return 0;
}
实际运行效果: