//线性表链表队列函数声明
#ifndef _MY_LinkQueue_H_
#define _MY_LinkQueue_H_

typedef void LinkQueue;

//创建线性表链表队列
LinkQueue* LinkQueue_Create();

//销毁线性表链表队列
int LinkQueue_Destroy(LinkQueue* queue);

//清空线性表链表队列
int 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);

#endif //_MY_LinkQueue_H_
//链表队列代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"LinkList.h"
#include"LinkQueue.h"

typedef struct _TLinkQueue{
    LinkNode node;
    void * item;
}TLinkQueue;


//创建线性表链表队列
LinkQueue* LinkQueue_Create(){
    return LinkList_Create();
}

//销毁线性表链表队列
int LinkQueue_Destroy(LinkQueue** queue){
    if (queue!=NULL)
    {
        //清空链表
        LinkQueue_Clear(*queue);
    }
    //销毁链表
    return LinkList_Destroy(queue);
}

//清空线性表链表队列
int LinkQueue_Clear(LinkQueue* queue){
    //弹出链表中的所有元素
    while (LinkQueue_Length(queue) > 0){
        LinkQueue_Retrieve(queue);
    }
    //清空链表
    return LinkList_Clear(queue);
}

//线性表链表队列队尾添加元素
int LinkQueue_Append(LinkQueue* queue, void* item){
    int ERRO_MSG = 0;
    //构建链表节点对象
    TLinkQueue * tqueue = (TLinkQueue *)malloc(sizeof(TLinkQueue));
    if (tqueue==NULL)
    {
        ERRO_MSG = -1;
        printf("分配内存失败!\n");

    }
    tqueue->item = item;
    //队尾添加一个元素
    ERRO_MSG=LinkList_Insert(queue, (LinkNode *)tqueue, LinkList_Length(queue));
    return ERRO_MSG;

}

//线性表链表队列队头删除元素
void* LinkQueue_Retrieve(LinkQueue* queue){
    void *res = NULL;
    //从队头删除元素
    TLinkQueue * tqueue = (TLinkQueue *)LinkList_Delete(queue, 0);
    if (tqueue==NULL)
    {
        return NULL;
    }
    res = tqueue->item;
    //释放内存
    free(tqueue);
    tqueue = NULL;
    return res;
}

//获取线性表链表队列队头元素
void* LinkQueue_Header(LinkQueue* queue){
    TLinkQueue * tqueue = (TLinkQueue *)LinkList_Get(queue,0);
    if (tqueue==NULL)
    {
        return NULL;
    }
    return tqueue->item;
}

//获取线性表链表队列长度
int LinkQueue_Length(LinkQueue* queue){
    return LinkList_Length(queue);
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"LinkQueue.h"

void Test(){
    int i = 0;
    //创建队列句柄
    LinkQueue *queue = LinkQueue_Create();
    //添加队列元素
    for ( i = 0; i < 10; i++)
    {
        LinkQueue_Append(queue, (void *)(i + 1));
    }
    //获取队列长度
    printf("队列的长度是%d\n", LinkQueue_Length(queue));
    //删除一个元素
    printf("被删除的元素是%d\n", (int)LinkQueue_Retrieve(queue));
    //获取队列长度
    printf("队列的长度是%d\n", LinkQueue_Length(queue));
    //清空队列
    LinkQueue_Clear(queue);
    //获取队列长度
    printf("清空队列的长度是%d\n", LinkQueue_Length(queue));
    //销毁队列
    LinkQueue_Destroy(&queue);
}

void main(){
    Test();
    system("pause");
}

数据结构 线性表链式队列_链表