07_栈的链式存储

来源:互联网 发布:有没有正规的网络兼职 编辑:程序博客网 时间:2024/06/04 00:48

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

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