接口
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
typedef int datatype;
typedef struct QueueNode{
datatype data;
struct QueueNode* next;
}QueueNode;
typedef struct Queue{
struct QueueNode* head;
struct QueueNode* rear;
}Queue;
//初始化
void QueueInit(Queue* pq);
//销毁
void QueueDestroy(Queue* pq);
//插入
void QueuePush(Queue* pq, datatype x);
//删除
void QueuePop(Queue* pq);
//返回队头元素
datatype QueueFront(Queue* pq);
//返回队尾元素
datatype QueueBack(Queue* pq);
//队列是否为空
int QueueEmp(Queue* pq);
//队列有多少元素
int QueueSize(Queue* pq);
实现
#include "Queue.h"
//初始化
void QueueInit(Queue* pq){
assert(pq);
pq->head = pq->rear = NULL;
}
//销毁
void QueueDestroy(Queue* pq){
assert(pq);
QueueNode* cur = pq->head;
QueueNode* next = NULL;
if (cur == NULL){
return;
}
cur = pq->head;
next = cur->next;
while (cur){
free(cur);
cur = next;
if (next != NULL){
next = next->next;
}
}
pq->head = NULL;
pq->rear = NULL;
}
//插入
void QueuePush(Queue* pq, datatype x){
assert(pq);
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = x;
newNode->next = NULL;
if (pq->head == NULL){
pq->head = pq->rear = newNode;
}
else{
pq->rear->next = newNode;
pq->rear = newNode;
}
}
//删除
void QueuePop(Queue* pq){
assert(pq);
QueueNode* cur = pq->head;
QueueNode* next = NULL;
if (cur == NULL){
return;
}
next = cur->next;
free(cur);
cur = NULL;
//只有一个元素时,尾指针也要修改
if (next == NULL)
pq->rear = NULL;
pq->head = next;
}
//返回队头元素
datatype QueueFront(Queue* pq){
assert(pq);
return pq->head->data;
}
//返回队尾元素
datatype QueueBack(Queue* pq){
assert(pq);
return pq->rear->data;
}
//队列是否为空
int QueueEmp(Queue* pq){
assert(pq);
if (pq->head == NULL){
return 0;
}
else{
return 1;
}
}
//队列有多少元素
int QueueSize(Queue* pq){
assert(pq);
QueueNode* cur = pq->head;
int i = 0;
while (cur){
cur = cur->next;
++i;
}
return i;
}