LinkQueue.h文件
#ifndef LINKQUEUE_H
#define LINKQUEUE_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义节点的存储结构
typedef struct LINKQUEUENODE
{
void *data; //数据域
struct LINKQUEUENODE *next; //指针域
}LinkQueueNode;
//定义链式队列的存储结构
typedef struct LINKQUEUE
{
struct LINKQUEUENODE *front; //队首
struct LINKQUEUENODE *rear; //队尾
}LinkQueue;
//初始化链式队列
LinkQueue *Init_LinkQueue();
//销毁队列
void Free_LinkQueue(LinkQueue *queue);
//判断队列是否为空
int IsEmpty_LinkQueue(LinkQueue *queue);
//入队
void Insert_LinkQueue(LinkQueue *queue , void *data);
//出队
void Remove_LinkQueue(LinkQueue *queue);
#endif
LinkQueue.c文件
#include "LinkQueue.h"
//初始化链式队列
LinkQueue *Init_LinkQueue()
{
LinkQueue *queue = (LinkQueue *)malloc(sizeof(LinkQueue));
queue->front = NULL;
queue->rear = NULL;
return queue;
}
//销毁队列
void Free_LinkQueue(LinkQueue *queue)
{
if(queue == NULL)
{
return;
}
if(queue->front == NULL)
{
return;
}
//DelNode记录要删除的节点
LinkQueueNode *DelNode = queue->front;
while(DelNode != NULL)
{
//先缓存下一个节点
LinkQueueNode *NextNode = DelNode->next;
free(DelNode);
DelNode = NextNode;
}
free(queue);
queue = NULL;
}
//判断队列是否为空
int IsEmpty_LinkQueue(LinkQueue *queue)
{
if(queue == NULL)
{
return -1;
}
if(queue->rear == NULL)
{
return 0;
}
return 1;
}
//入队
void Insert_LinkQueue(LinkQueue *queue , void *data)
{
if(queue == NULL || data == NULL)
{
return;
}
LinkQueueNode *temp = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
temp->data = data;
temp->next = NULL;
//队列是否为空
if(queue->rear == NULL)
{
queue->front = temp;
queue->rear = temp;
}
//队列不为空
else
{
queue->rear->next = temp;
queue->rear = temp;
}
}
//出队
void Remove_LinkQueue(LinkQueue *queue)
{
if(queue == NULL)
{
return;
}
if(queue->rear == NULL)
{
return;
}
LinkQueueNode *DelNode = queue->front;
//判断队列中是否只有一个节点
if(queue->front == queue->rear)
{
queue->front = NULL;
queue->rear = NULL;
}
else
{ //队首指向要删除的节点的下一个节点
queue->front = DelNode->next;
}
free(DelNode);
DelNode = NULL;
}
main.c文件
#include "LinkQueue.h"
typedef struct STUDENT
{
char name[20];
int age;
}Student;
int main(void)
{
LinkQueue *queue = Init_LinkQueue();
//创建数据
Student s1 = {"xiaoming",17};
Student s2 = {"zhangsan" , 20};
Student s3 = {"lisi" , 27};
Student s4 = {"wangwu" , 18};
printf("---------------入队--------------\n\n");
//数据入队
Insert_LinkQueue(queue , (void *)&s1);
Insert_LinkQueue(queue , (void *)&s2);
Insert_LinkQueue(queue , (void *)&s3);
Insert_LinkQueue(queue , (void *)&s4);
printf("---------------出队--------------\n");
while(queue->rear != NULL)
{
Student *s = (Student *)queue->front->data;
printf("name = %s , age = %d\n" , s->name , s->age);
//出队
Remove_LinkQueue(queue);
}
printf("---------------释放队列--------------\n");
//释放队列
Free_LinkQueue(queue);
return 0;
}
测试结果: