Stack.h
#ifndef _STACK_H_
#define _STACK_H_
#define OK 0
#define ERROR 1
// 结点
typedef struct _stackNode
{
int data;
struct _stackNode *next;
}StackNode;
// 栈
typedef struct _stack
{
StackNode *top; // 头结点
}Stack;
// 创建一个栈 返回指向栈的指针
// 返回值: 0 代表成功 1 代表失败
Stack *CreateStack();
// 入栈
int Push(Stack *, int );
// 出栈:弹出一个数据
// 返回值: 0 代表成功 1 代表失败
int Pop(Stack *);
// 判断栈是否为空
// 返回值: 空 返回1 不空返回 0
int StackEmpty(Stack *);
// 获取栈顶元素
// 返回值: 0 代表成功 1 代表失败
int GetTop(Stack *, int *);
// 销毁栈
int Destroy(Stack *);
#endif // _STACK_H_
Stack.c
#include "Stack.h"
#include
#include
Stack *CreateStack()
{
Stack *s = (Stack *)malloc(sizeof(Stack)/sizeof(char));
if (s == NULL)
return NULL;
s->top = NULL; // 栈置空
return s;
}
int Push(Stack *s, int data)
{
// 入口参数检测
assert(s);
// 创建结点
StackNode *node = (StackNode *)malloc(sizeof(StackNode)/sizeof(char));
assert(node);
node->data = data;
node->next = s->top;
s->top = node;
return OK;
}
int StackEmpty(Stack *s)
{
assert(s);
return (s->top == NULL);
}
int Pop(Stack *s)
{
assert(s);
if (StackEmpty(s) == 1)
return ERROR;
StackNode* node = s->top;
s->top = node->next;
// 释放
free(node);
node = NULL;
return OK;
}
int GetTop(Stack *s, int *pd)
{
assert(s);
if (StackEmpty(s) == 1)
return ERROR;
*pd = s->top->data;
return OK;
}
int Destroy(Stack *s)
{
assert(s);
// 如果空 跳出循环 如果不空 执行循环
while(!StackEmpty(s))
{
Pop(s);
}
free(s);
return 0;
}
main.c
#include "Stack.h"
#include
int main()
{
Stack *s = CreateStack();
if (s == NULL)
printf ("创建栈失败\n");
printf ("创建栈成功\n");
int i;
for (i = 0; i < 10; i++)
Push(s, i);
// for (i = 0; i < 10; i++)
// Pop(s);
Pop(s);
int data = 0;
GetTop(s, &data);
printf ("data = %d\n", data);
Destroy(s);
return 0;
}