#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int data_t;
typedef struct
{
data_t* pData;
int size;
int top;
}sstack_t;
int SStack_Create(sstack_t*, int);
int SStack_Push(sstack_t*, data_t);
int SStack_Pop(sstack_t*, data_t*);
void SStack_free(sstack_t*);
//创建/初始化顺序栈
int SStack_Create(sstack_t* s, int sz)
{
s->pData = (data_t*)calloc(sizeof(data_t), sz);
if (s->pData == NULL)
return -1;
s->size = sz;
s->top = -1;
return 0;
}
//入栈
int SStack_Push(sstack_t*s, data_t data)
{
if (s == NULL)
return -1;
if (s->top == (s->size - 1))
return -1;
s->top++;
s->pData[s->top] = data;
return 0;
}
//出栈
int SStack_Pop(sstack_t*s, data_t* data)
{
if (s == NULL)
return -1;
if (s->top == -1)
return -1;
*data = s->pData[s->top];
s->top--;
return 0;
}
//回收栈
void SStack_free(sstack_t* s)
{
if (s == NULL)
return ;
if (s->pData)
{
free(s->pData);
s->pData = NULL;
}
s->size = 0;
s->top = 0;
}
int main()
{
sstack_t s;
SStack_Create(&s, 10);
for (int i = 1; i < 12; i++)
{
SStack_Push(&s, i);
}
while ((s.top) != -1)
{
data_t data;
if (0 == SStack_Pop(&s, &data))
printf("%3d", data);
}
printf("\n");
SStack_free(&s);
return 0;
}
运行结果: