queue.h 文件
#pragma once
typedef struct QNode {
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
typedef int Status;
//初始化队列
Status InitQueue(LinkQueue *Q);
//销毁队列
Status DestroyQueue(LinkQueue *Q);
//清空队列
Status ClearQueue(LinkQueue *Q);
//判断队列是否为空
Status QueueEmpty(LinkQueue Q);
//获取队头元素
Status GetHead(LinkQueue Q);
//插入队尾元素
Status EnQueue(LinkQueue *Q,int e);
//删除队头元素
Status DeQueue(LinkQueue *Q,int *e);
//获取队列中的所有的元素
Status QueueTraverse(LinkQueue Q);
--------------------------------------------------------------------------------------------------
Queue.c 文件内容
#include "stdio.h"
#include "stdlib.h"
#include "queue.h"
#define ERROR 0
#define OK 1
void main() {
LinkQueue Q;
//初始化队列
InitQueue(&Q);
//向队列中插入元素
EnQueue(&Q,1);
EnQueue(&Q,2);
EnQueue(&Q,3);
QueueTraverse(Q);
int e;
DeQueue(&Q,&e);
DeQueue(&Q, &e);
QueueTraverse(Q);
GetHead(Q,&e);
printf("%d ",e);
}
//队列元素的删除在队头
//初始化一个队列
Status InitQueue(LinkQueue *Q) {
//队列中的每个元素看作一个节点
//Q->front 看作
Q->front = Q->rear = (QNode *)malloc(sizeof(QNode));//开辟出节点
if (!Q->front)return ERROR;
Q->front->next = NULL;
return OK;
}
//销毁队列
Status DestroyQueue(LinkQueue *Q) {
//将队列空间置为空(从队头)
while (Q->front)
{
Q->rear = Q->front->next;
free(Q->front);
Q->front = Q->rear;
}
return OK;
}
//插入队列
Status EnQueue(LinkQueue *Q, int e) {
QNode *node = (QNode *)malloc(sizeof(QNode));
if (!node) return ERROR;
node->data = e;
node->next = NULL;
//队列头节点不会存放元素值
Q->rear->next = node;
Q->rear = node;
return OK;
}
//删除队列元素
Status DeQueue(LinkQueue *Q, int *e) {
if (Q->front==Q->rear)return ERROR;
QNode *p;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if (p == Q->rear) {
Q->rear = Q->front;
}
free(p);
return OK;
}
//访问结点中的元素
Status QueueTraverse(LinkQueue Q) {
printf("输出队列中的元素值
");
if (Q.front == Q.rear) return ERROR;//判断队列是否为空队列
Q.front = Q.front->next;
while (Q.front!=NULL)
{
printf("%d
", Q.front->data);
Q.front = Q.front->next;
}
}
//获取队头元素
Status GetHead(LinkQueue Q,int *e) {
if (Q.front == Q.rear) return ERROR;
Q.front = Q.front->next;
*e=Q.front->data;
return OK;
}