//线性表链表队列函数声明 #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("分配内存失败! "); } 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 ", LinkQueue_Length(queue)); //删除一个元素 printf("被删除的元素是%d ", (int)LinkQueue_Retrieve(queue)); //获取队列长度 printf("队列的长度是%d ", LinkQueue_Length(queue)); //清空队列 LinkQueue_Clear(queue); //获取队列长度 printf("清空队列的长度是%d ", LinkQueue_Length(queue)); //销毁队列 LinkQueue_Destroy(&queue); } void main(){ Test(); system("pause"); }