07_栈的链式存储

这个是在前面链式存储结构的基础上实现代码复用

/*linkStack.h*/
#pragma once

#include "mlinkList.h"

using LinkStack = LinkList;
struct LinkStackNode {

    LinkListNode node;
    void *item;
};

class linkStack {

    private:

        mlinkList chen;

    public:

        linkStack();

        ~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);
};

/*linkStack.cpp*/
#include "linkStack.h"



linkStack::linkStack() { }


linkStack::~linkStack() { }


LinkStack* linkStack::LinkStack_Create() { 

    return chen.LinkList_Create();
}


void linkStack::LinkStack_Destroy(LinkStack* stack) {

    LinkStack_Clear(stack);
    chen.LinkList_Destroy(stack);
}


void linkStack::LinkStack_Clear(LinkStack* stack) {

    while ( LinkStack_Size(stack)>0 ) {
        LinkStack_Pop( stack );
    }
}


int linkStack::LinkStack_Push(LinkStack* stack, void* item) {

    int ret = (stack != nullptr);
    if ( ret ) {
        LinkStackNode *node = (LinkStackNode*)malloc(sizeof(LinkStackNode));
        if ( node!=nullptr ) {
            node->item = item;
            ret = chen.LinkList_Insert(stack, &node->node, 0);
            if ( !ret ) {
                free( node );
                node = nullptr;
            }
        }
    }
    return ret;
}


void* linkStack::LinkStack_Pop(LinkStack* stack) {

    LinkStackNode *node = (LinkStackNode*)chen.LinkList_Delete(stack,0);
    void *ret = nullptr;
    if ( node!=nullptr ) {
        ret = node->item;
        free(node);
    }
    return ret;
}


void* linkStack::LinkStack_Top(LinkStack* stack) {

    LinkStackNode *node = (LinkStackNode*)chen.LinkList_Get( stack ,0 );
    void *ret = nullptr;
    if ( node!=nullptr ) {
        ret = node->item;
    }
    return ret;
}


int linkStack::LinkStack_Size(LinkStack* stack) {

    return chen.LinkList_Length(stack);
}
/*main.cpp*/
#include "linkStack.h"


int main(int argc, char **argv) {

    linkStack chen;
    LinkStack *stack = chen.LinkStack_Create();
    int a[10];
    for (int i = 0; i < 10; ++i) {
        a[i] = i;
        chen.LinkStack_Push(stack, a + i);
    }
    cout << "top : " << *(int*)chen.LinkStack_Top(stack) << endl;
    while ( chen.LinkStack_Size(stack)>0 ) {
        cout << *(int*)chen.LinkStack_Pop(stack) << endl;
    }
    chen.LinkStack_Destroy(stack);
    system( "pause" );
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值