定义外部使用的数据类型名
typedef void* LinkStack;
头文件定义
#ifndef LINK_STACK_H
#define LINK_STACK_H
#include "stdlib.h"
typedef void* LinkStack;
//初始化栈
LinkStack initial_LinkStack();
//进桟
void push_LinkStack(LinkStack lStack,void* data);
//返回栈顶元素
void* top_LinkStack(LinkStack lStack);
//弹出栈定元素
void pop_LinkStack(LinkStack lStack);
//是否为空
int empty_LinkStack(LinkStack lStack);
//返回栈大小
int size_LinkStack(LinkStack lStack);
//销毁栈
void destroy_LinkStack(LinkStack lStack);
#endif
头文件实现
#include "CLinkStack.h"
#include "CLinkList.h"
//初始化栈
LinkStack initial_LinkStack()
{
LinkList list = initial_LinkList();
return list;
}
//进桟
void push_LinkStack(LinkStack lStack,void* data)
{
if(lStack == NULL)
{
return;
}
insert_LinkList(lStack,0,data);
}
//返回栈顶元素
void* top_LinkStack(LinkStack lStack)
{
if(lStack == NULL)
{
return NULL;
}
return getItemByPos_LinkList(lStack,0);
}
//弹出栈定元素
void pop_LinkStack(LinkStack lStack)
{
if(lStack == NULL)
{
return;
}
delByPos_LinkList(lStack,0);
}
//是否为空
int empty_LinkStack(LinkStack lStack)
{
if(lStack == NULL)
{
return -1;
}
int nSize = size_LinkList(lStack);
if (nSize == 0)
{
return 1;
}
return 0;
}
//返回栈大小
int size_LinkStack(LinkStack lStack)
{
if(lStack == NULL)
{
return -1;
}
return size_LinkList(lStack);
}
//销毁栈
void destroy_LinkStack(LinkStack lStack)
{
if(lStack == NULL)
{
return;
}
destroy_LinkList(lStack);
}
测试代码
struct Person
{
void* data;
char name[64];
int nAge;
};
struct Person p1 = {NULL,"张三",12};
struct Person p2 = {NULL,"李四",15};
struct Person p3 = {NULL,"王麻子",18};
struct Person p4 = {NULL,"张五",19};
struct Person p5 = {NULL,"张飞",22};
printf("-------------------------------------\n");
//linkStack
LinkStack lStack = initial_LinkStack();
push_LinkStack(lStack,&p5);
push_LinkStack(lStack,&p4);
push_LinkStack(lStack,&p3);
push_LinkStack(lStack,&p2);
push_LinkStack(lStack,&p1);
printf("ListStack size:%d\n",size_LinkStack(lStack));
while(!empty_LinkStack(lStack))
{
Person* person = (Person*)top_LinkStack(lStack);
printf("name:%s,age:%d\n",person->name,person->nAge);
pop_LinkStack(lStack);
}
printf("ListStack size:%d\n",size_LinkStack(lStack));
destroy_LinkStack(lStack);
printf("-------------------------------------\n");
测试结果