千家信息网

【C语言数据结构】链栈

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,LinkStack.h#ifndef LINKSTACK_H#define LINKSTACK_Htypedef void LinkStack;LinkStack* LinkStack_Create(
千家信息网最后更新 2025年02月01日【C语言数据结构】链栈

LinkStack.h

#ifndef LINKSTACK_H#define LINKSTACK_Htypedef 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);}


0