#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
#define MAXSIZE 20 //Create_SqStack(capacity)
typedef struct SqStack
{
ElemType data[MAXSIZE];//unsigned int *data
int top;
}SqStack;
SqStack* Create_Stack()
{
SqStack *stack = malloc(sizeof(SqStack));
if(stack == NULL)
{
return NULL;
}
stack->top = -1;//注意空栈是-1
return stack;
}
int Push_Stack(SqStack *stack,ElemType data)
{
if(stack == NULL)
{
return -1;
}
if(stack->top >= MAXSIZE - 1)//在这是大于等于19
{
return -2;//栈满
}
stack->top++;
stack->data[stack->top] = data;
return 0;
}
int Pop_Stack(SqStack *stack,ElemType *value)
{
if(stack == NULL || value == NULL)
{
return -1;
}
if(stack->top == -1)
{
//没有,无法弹出
return -2;
}
*value = stack->data[stack->top];
stack->top--;
return 0;
}
int Top_Stack(SqStack *stack,ElemType *value)
{
if(stack == NULL || value == NULL)
{
return -1;
}
if(stack->top == -1)
{
return -2;
}
*value = stack->data[stack->top];
return 0;
}
void Destory_Stack(SqStack *stack)
{
if(stack == NULL)
{
return;
}
free(stack);
}
int main()
{
int i = 0,value = 0;
SqStack *stack = Create_Stack();
for(i=0;i<=20;i++) //故意多一个
{
if(Push_Stack(stack,i) != 0)
{
printf("push %d error\n",i);
}
else
{
Top_Stack(stack,&value);
printf("top:%d ",value);
}
}
Pop_Stack(stack,&value);
printf("\ndelete num:%d\n",value);
Destory_Stack(stack);
return 0;
}
结果:
top:0 top:1 top:2 top:3 top:4 top:5 top:6 top:7 top:8 top:9 top:10 to
p:11 top:12 top:13 top:14 top:15 top:16 top:17 top:18 top:19 push 20 er
ror
delete num:19
上面的测试代码中,循环插入0到20,如果不成功,就打印push error,如果成功,就打印top:data。可以看到,0~19都成功了,第20个数就无法再插进来了。可以说,整体的结果都在意料之中。整体的代码也不是很难,可以说,就是前面的线性表的简易版。大家可以将这段代码作为学习的参考代码,因为是完整的代码,比起某些书上的伪代码,会让大家有更好地理解。