设计一个线性顺序存储的栈的数据结构,并实现初始化函数、入栈、出栈、销毁栈、判空函数、清空栈共六个功能,并在main函数中调用实现
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct {
int* data;
int top;//栈的头指针
int Listsize;//栈的长度
}Stack;
int initStack(Stack& L, int len)
{
L.data = (int*)malloc(len * sizeof(int));
if (L.data == NULL)
{
return 0;
}
L.top = -1;//为了让top指向栈顶元素,此时为空栈
L.Listsize = len;
}//初始化栈
int pushStack(Stack& L, int e)
{
if (L.top ==L.Listsize-1)//栈满
{
return 0;
}
L.top++;
L.data[L.top] = e;
if (L.top == L.Listsize - 1)//再次判断栈是否满
{
return 0;
}
return 1;
}//入栈
int popStack(Stack& L,int &e)//因为要改变e的值,所以要加一个引用符
{
if (L.top == -1)//栈空
{
return 0;
}
e = L.data[L.top];
L.top--;
if (L.top == -1)//再次判断栈是否为空
{
return 0;
}
else
{
return 1;
}
}//获取栈顶元素,出栈
void DestoryStack(Stack* L)
{
free(L->data);
free(L);
}//销毁栈
void ClearStack(Stack& L)
{
L.top = -1;
}//清空栈
int EmptyStack(Stack& L)
{
if (L.top == -1)//栈为空
{
return 1;
}
else
{
return 0;
}
}//判断栈是否为空
int main()
{
Stack L;
int a = 1, b;
initStack(L, 10);//初始化栈
printf("入栈:");
while (a)
{
scanf_s("%d", &b);
a = pushStack(L,b);//a为入栈函数的返回值,栈满返回0,跳出循环
}
a = 1;
while (a)
{
int m;
a = popStack(L,m);//a为出栈函数的返回值,栈空为0,跳出循环
printf("%d",m);
}
printf("\n");
ClearStack(L);//清空栈
a = EmptyStack(L);//
while (a==1)
{
printf("请按任意键清空栈");
system("pause");//让程序暂停,然后按任意键继续进行
printf("栈已经清空!!!");
a--;
}
return 0;
}