LinkQueue.h
#ifndef LINKQUEUE_H
#define LINKQUEUE_H
//节点的结构体
typedef struct _QueueNode
{
void* data;
struct _QueueNode* next;
}QueueNode;
//队列结构体
typedef struct _LinkQueue
{
QueueNode* head;//队头
QueueNode* rear;//队尾
int length;
}LinkQueue;
//初始化:创建队
LinkQueue* Creat_LinkQueue();
//入队列
void Push_LinkQueue(LinkQueue* queue,void* data);
//出队
void Pop_LinkQueue(LinkQueue* queue);
//求队的大小
int Size_LinkQueue(LinkQueue* queue);
//获得队的头部的元素
void* Front_LinkQueue(LinkQueue* queue);
//获取队的尾部元素
void* Back_LinkQueue(LinkQueue* queue);
//判读队是否为空
int IsEmpty_LinkQueue(LinkQueue* queue);
//销毁
void Destroy_LinkQueue(LinkQueue* queue);
#endif
LinkQueue.c
#include<stdlib.h> #include<stdio.h> #include"LinkQueue.h" //初始化:创建队 LinkQueue* Creat_LinkQueue() { LinkQueue* queue=(LinkQueue*)malloc(sizeof(LinkQueue)); if(queue==NULL) { return NULL; } queue->head=NULL; queue->rear=NULL; queue->length=0; return queue; } //入队列 void Push_LinkQueue(LinkQueue* queue,void* data) { QueueNode* newnode=NULL; if(queue==NULL||data==NULL) { return; } //创建新的结点 newnode=(QueueNode*)malloc(sizeof(QueueNode)); if(newnode == NULL) { return; } newnode->data=data; newnode->next=NULL; //如果是个空队列 if (queue->length==0) { queue->head=newnode; queue->rear=newnode; queue->length++; return; } //节点入队列 queue->rear->next=newnode; queue->rear=newnode; queue->length++; } //出队 void Pop_LinkQueue(LinkQueue* queue) { QueueNode* pNext=NULL; if(queue==NULL||queue->length==0) { return; } //只有一个结点的情况 if(queue->length==1) { free(queue->head); queue->head=NULL; queue->rear=NULL; queue->length--; return; } //其他情况 //缓存下一个结点 pNext=queue->head->next; free(queue->head); queue->head=pNext; queue->length--; } //长度 int Size_LinkQueue(LinkQueue* queue) { if(queue==NULL) { return -1; } return queue->length; } //获得队头的元素 void* Front_LinkQueue(LinkQueue* queue) { if (queue==NULL) { return NULL; } if(queue->length==0) { return NULL; } return queue->head->data; } //获取队的尾部元素 void* Back_LinkQueue(LinkQueue* queue) { int i=0; QueueNode* pCurrent=NULL;//辅助指针 if(queue==NULL) { return NULL; } if(queue->length==0) { return NULL; } pCurrent=queue->head; for(i=0;i<queue->length-1;i++) { pCurrent=pCurrent->next; } return pCurrent->data; } //判读队是否为空 int IsEmpty_LinkQueue(LinkQueue* queue) { if(queue==NULL) { return -1; } if(queue->length==0) { return 1; } return 0; } //销毁 void Destroy_LinkQueue(LinkQueue* queue) { if(queue==NULL) { return; } while(queue->length>0) { Pop_LinkQueue(queue); } //释放队列的内存 free(queue); }
testLinkQueue.c测试队的链式存储
#include <stdio.h> #include"LinkQueue.h" typedef struct _Player { int age; int num; }Player; int main() { //创建队列 LinkQueue* queue=Creat_LinkQueue(); //创建数据 Player p1={10,2}; Player p2={20,3}; Player p3={30,4}; Player* p=NULL; //入队列 Push_LinkQueue(queue,&p1); Push_LinkQueue(queue,&p2); Push_LinkQueue(queue,&p3); p=(Player*)Front_LinkQueue(queue); printf("队头:Age:%d Num:%d\n",p->age,p->num); p=(Player*)Back_LinkQueue(queue); printf("队尾:Age:%d Num:%d\n",p->age,p->num); //打印 while(Size_LinkQueue(queue)>0) { p=(Player*)Front_LinkQueue(queue); printf("Age:%d Num:%d\n",p->age,p->num); Pop_LinkQueue(queue); } //销毁队列 Destroy_LinkQueue(queue); return 0; }
浙公网安备 33010602011771号