17_队列的链式存储

//linkQueue.h
#pragma once

#include "mlinkList.h"

using LinkQueue = LinkList;
struct LinkQueueNode {

    LinkListNode node;
    void *item;
};


class linkQueue {

    private:
        mlinkList chen;
    public:
        linkQueue();
        ~linkQueue();
        LinkQueue* LinkQueue_Create();

        void LinkQueue_Destroy(LinkQueue* queue);

        void LinkQueue_Clear(LinkQueue* queue);

        int LinkQueue_Append(LinkQueue* queue, void* item);

        void* LinkQueue_Retrieve(LinkQueue* queue);

        void* LinkQueue_Header(LinkQueue* queue);

        int LinkQueue_Length(LinkQueue* queue);
};

//linkQueue.cpp
#include "linkQueue.h"


linkQueue::linkQueue() {}


linkQueue::~linkQueue(){ }


LinkQueue* linkQueue::LinkQueue_Create() {

    return chen.LinkList_Create();
}

void linkQueue::LinkQueue_Destroy(LinkQueue* queue) {

    chen.LinkList_Clear(queue);
    chen.LinkList_Destroy(queue);
}


void linkQueue::LinkQueue_Clear(LinkQueue* queue) {

    while( chen.LinkList_Length(queue)>0 ) {
        LinkQueue_Retrieve(queue);
    }
}


int linkQueue::LinkQueue_Append(LinkQueue* queue, void* item) {

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


void* linkQueue::LinkQueue_Retrieve(LinkQueue* queue) {

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


void* linkQueue::LinkQueue_Header(LinkQueue* queue) {

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

int linkQueue::LinkQueue_Length(LinkQueue* queue) {

    return chen.LinkList_Length(queue);
}
//main.cpp
#include "linkQueue.h"


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

    linkQueue chen;
    LinkQueue *queue = chen.LinkQueue_Create();
    int a[10] = {0};
    int i = 0;
    for (int i = 0; i < 10; ++i ) {
        a[i] = i;
        chen.LinkQueue_Append(queue,a+i);
    }
    cout << "header:" << *(int*)chen.LinkQueue_Header(queue) << endl;
    cout << "len:" << chen.LinkQueue_Length(queue) << endl;
    while ( chen.LinkQueue_Length(queue)>0 ) {
        cout << *(int*)chen.LinkQueue_Retrieve(queue) << endl;
    }
    chen.LinkQueue_Destroy(queue);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值