译者:Mrzhu007
日期:2018年04月13日
博客地址:金色世界
liskstack.h头文件
#ifndef _MY_LINKSTACK_H_
#define _MY_LINKSTACK_H_
typedef void LinkStack;
LinkStack* LinkStack_Create();
void LinkStack_Destroy(LinkStack* stack);
int LinkStack_Push(LinkStack* stack, void* item);
void LinkStack_Clear(LinkStack* stack);
void* LinkStack_Pop(LinkStack* stack);
void* LinkStack_Top(LinkStack* stack);
int LinkStack_Size(LinkStack* stack);
#endif
liskstack.h实现文件
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "linkstack.h"
#include "linklist.h"
typedef struct _tag_LinkStackNode
{
LinkListNode node;
void *item;
}TLinkStackNode;
LinkStack* LinkStack_Create()
{
return LinkList_Create();
}
void LinkStack_Destroy(LinkStack* stack)
{
LinkStack_Clear(stack);
LinkList_Destroy(stack);
}
void LinkStack_Clear(LinkStack* stack)
{
while(LinkStack_Size(stack) > 0)
{
LinkStack_Pop(stack);
}
return;
}
int LinkStack_Push(LinkStack* stack, void* item)
{
int ret = 0;
TLinkStackNode *pTe = (TLinkStackNode * )malloc(sizeof(TLinkStackNode));
if(pTe == NULL)
{
return - 1;
}
pTe->item = item;
ret = LinkList_Insert(stack, (LinkListNode *)(&pTe->node), 0);
if(ret != 0)
{
free(pTe);
}
return ret;
}
void* LinkStack_Pop(LinkStack* stack)
{
void *myItem = NULL;
TLinkStackNode *pTmp = NULL;
pTmp = (TLinkStackNode *)LinkList_Delete(stack, 0);
if(pTmp == NULL)
{
return NULL;
}
if(pTmp == NULL)
{
return NULL;
}
myItem = pTmp->item;
if(pTmp != NULL)
{
free(pTmp);
}
return myItem;
}
void* LinkStack_Top(LinkStack* stack)
{
void *myItem = NULL;
TLinkStackNode *pTmp = NULL;
pTmp = (TLinkStackNode *)LinkList_Get(stack, 0);
if(pTmp == NULL)
{
return NULL;
}
myItem = pTmp->item;
return myItem;
}
int LinkStack_Size(LinkStack* stack)
{
return LinkList_Length(stack);
}