Stack.h
#ifndef __STACK_H__
#define __STACK_H__
#define MAXSIZE 10
typedef int DataType;
typedef struct StackNode
{
DataType arr[MAXSIZE];
int top;
}Stack, *pStack;
int EmptyStack(pStack ps);
void InitStack(pStack ps);
void PushStack(pStack ps, DataType data);
DataType PopStack(pStack ps);
DataType TopStack(pStack ps);
int StackLength(Stack ps);
void StackTraverse(Stack ps);
void ClearStack(pStack ps);
void DestroyStack(pStack ps);
#endif //__STACK_H__
Stack.c
#include "stack.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void InitStack(Stack* ps)
{
assert(ps);
ps->top = 0;
}
void PushStack(pStack ps, DataType data)
{
assert(ps);
ps->arr[ps->top++] = data;
}
int EmptyStack(pStack ps)
{
assert(ps);
return 0 == ps->top;
}
DataType PopStack(pStack ps )
{
DataType e;
assert(ps);
if (EmptyStack(ps))
{
return 0;
}
else
{
ps->top--;
e = ps->arr[ps->top];
return e;
}
}
DataType TopStack(pStack ps)
{
assert(ps);
if (EmptyStack(ps))
{
printf("栈为空!!!\n");
return 0;
}
return ps->arr[ps->top - 1];
}
void StackTraverse(Stack ps)
{
if (EmptyStack(&ps))
{
printf("栈为空!!!\n");
return;
}
else
{
while(ps.top )
{
ps.top--;
printf("%d",ps.arr[ps.top]);
}
}
}
int StackLength(Stack ps)
{
if( EmptyStack(&ps) )
{
return 0;
}
return ps.top;
}
void ClearStack(Stack* ps)
{
(*ps).top =0;
}
void DestroyStack(pStack ps)
{
ClearStack(ps);
free(ps);
}
test.c
#include "stack.h"
#include <stdio.h>
void test()
{
int e = 0;
Stack stack;
printf("初始化栈\n");
InitStack( &stack);
printf("压栈\n");
PushStack(&stack ,1);
PushStack(&stack ,2);
PushStack(&stack ,3);
PushStack(&stack ,4);
PushStack(&stack ,5);
printf("遍历栈\n");
StackTraverse(stack);
printf("\n");
printf("出栈\n");
printf("出栈元素为:%d\n",PopStack(&stack));
printf("遍历栈\n");
StackTraverse(stack);
printf("\n");
printf("取栈顶\n");
printf("%d\n",TopStack(&stack));
printf("获取栈的长度\n");
printf("%d\n",StackLength(stack));
printf("判断是否为空栈\n");
if(EmptyStack(&stack))
{
printf("这是空栈\n");
}
else
{
printf("这不是空栈\n");
}
printf("清空栈\n");
ClearStack(&stack);
printf("获取栈的长度\n");
printf("%d\n",StackLength(stack));
printf("销毁栈\n");
DestroyStack(&stack);
}
int main()
{
test();
return 0;
}