您的位置:首页 > 理论基础 > 数据结构算法

【C语言数据结构】链栈

2017-09-19 16:21 323 查看
LinkStack.h
#ifndef LINKSTACK_H
#define LINKSTACK_H

typedef void LinkStack;

LinkStack* LinkStack_Create();

void LinkStack_Destroy(LinkStack* stack);

void LinkStack_Clear(LinkStack* stack);

int LinkStack_Push(LinkStack* stack, void* item);

void* LinkStack_Pop(LinkStack* stack);

void* LinkStack_Top(LinkStack* stack);

int LinkStack_Size(LinkStack* stack);

#endif // LINKSTACK_H
LinkStack.c
#include "LinkStack.h"
#include "LinkList.h"
#include "malloc.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);
}
}

int LinkStack_Push(LinkStack* stack, void* item)
{
TLinkStackNode *node = (TLinkStackNode *)malloc(sizeof(TLinkStackNode));
int ret = ((item != 0) && (node != 0));

if(ret)
{
node->item = item;
ret = LinkList_Insert(stack,(LinkListNode *)node,0);
}

if(!ret)
{
free(node);
}

return ret;
}

void* LinkStack_Pop(LinkStack* stack)
{
TLinkStackNode *node = (TLinkStackNode *)LinkList_Remove(stack,0);
void *ret = 0;
if(node != 0)
{
ret = node->item;
free(node);
}

return ret;
}

void* LinkStack_Top(LinkStack* stack)
{
TLinkStackNode *node = (TLinkStackNode *)LinkList_Remove(stack,0);
void *ret = 0;
if(node != 0)
{
ret = node->item;
}

return ret;
}

int LinkStack_Size(LinkStack* stack)
{
return LinkList_Length(stack);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息