数据结构 线性表链式队列
转载
//线性表链表队列函数声明
#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");
}
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。