cpp
#include <iostream>
//栈
#define MAX_SIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;//状态类型
typedef int ElemType;//元素类型
typedef struct SqStack
{
ElemType data[MAX_SIZE];
int top;
};
//初始化,方法1
//SqStack* InitStack()
//{
// SqStack *s = (SqStack*)malloc(sizeof(SqStack));
// s->top = 0;
// return s;
//}
//初始化,方法2
Status InitStack(SqStack** s)
{
//栈上的指针分配在堆上的内存,**s表示取到栈上指针的地址,才可以修改外部指针
*s = (SqStack*)malloc(sizeof(SqStack));
if ((*s) == NULL)return ERROR;
(*s)->top = 0;
return OK;
}
Status DestoryStack(SqStack* s)
{
if (s != NULL)
{
free(s);
}
return OK;
}
Status ClearStack(SqStack* s)
{
s->top = 0;
return OK;
}
Status StackEmpty(SqStack* s)
{
if (s->top > 0)
return ERROR;
return TRUE;
}
Status Push(SqStack* s, ElemType e)
{
if (s == NULL)return ERROR;
if ((s->top) >= MAX_SIZE)return ERROR;
s->data[s->top] = e;
s->top++;
return OK;
}
Status Pop(SqStack* s)
{
if (s == NULL)return ERROR;
if (s->top == 0)return ERROR;
s->top--;
}
int StackLength(SqStack* s)
{
if (s == NULL)return ERROR;
return s->top;
}
Status StackShow(SqStack* s)
{
if(s == NULL)return ERROR;
for (int i = 0; i < s->top; i++)
{
printf("%d-->", s->data[i]);
}
printf("***全部显示完成!\n");
return OK;
}
int main()
{
//方法一初始化
// SqStack *s = InitStack();
//方法2初始化
SqStack* s;
InitStack(&s);
if (s == NULL)
{
printf("内存不足!");
return -1;
}
for (int i = 0; i < 10; i++)
{
Push(s, i);
}
StackShow(s);
printf("删除5个元素:\n");
Pop(s);
Pop(s);
Pop(s);
Pop(s);
Pop(s);
StackShow(s);
printf("是否为空:%d(1:是 0 :否)\n", StackEmpty(s));
ClearStack(s);
printf("清空后:\n");
StackShow(s);
printf("是否为空:%d(1:是 0 :否)\n", StackEmpty(s));
DestoryStack(s);
s = NULL;
return 0;
}
