链式栈

来源:互联网 发布:武汉java讲师 编辑:程序博客网 时间:2024/06/15 07:10

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);}
原创粉丝点击