queue.h
#pragma once
typedef int Qdatatype;
typedef struct QueueNode
{
struct QueueNode* next;
Qdatatype data;
}QueueNode;
typedef struct Queue
{
QueueNode * _front;
QueueNode * _rear;
}Queue;
void QueueInit(Queue* pq);
void QueueDestory(Queue* pq);
QueueNode* BuyQueueNode(Qdatatype x);
void QueuePush(Queue* pq, Qdatatype x);
void QueuePop(Queue* pq);
Qdatatype QueueFront(Queue* pq);
Qdatatype QueueBack(Queue* pq);
int QueueEmpty(Queue* pq);
int QueueSize(Queue* pq);
void TestQueue();
queue.c
#include "queue.h"
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
void QueueInit(Queue* pq) {
assert(pq);
pq->_front = pq->_rear = NULL;
}
QueueNode* BuyQueueNode(Qdatatype x) {
QueueNode *newqueue = (QueueNode*)malloc(sizeof(QueueNode));
if (newqueue == NULL) {
assert(0);
return;
}
newqueue->data = x;
newqueue->next = NULL;
return newqueue;
}
void QueuePush(Queue* pq, Qdatatype x) {
QueueNode *newqueue = BuyQueueNode(x);
if (QueueEmpty(pq))
pq->_front = pq->_rear = newqueue;
else {
pq->_rear->next = newqueue;
pq->_rear = newqueue;
}
}
void QueuePop(Queue* pq) {
assert(pq);
if (QueueEmpty(pq))
return;
QueueNode *delnode;
delnode = pq->_front;
if (pq->_front->next == NULL) {
pq->_front = pq->_rear = NULL;
}
else
pq->_front = delnode->next;
free(delnode);
}
Qdatatype QueueFront(Queue* pq) {
if (QueueEmpty(pq))
return;
return pq->_front->data;
}
Qdatatype QueueBack(Queue* pq) {
if (QueueEmpty(pq))
return;
return pq->_rear->data;
}
int QueueEmpty(Queue* pq) {
assert(pq);
return NULL == pq->_front;
}
int QueueSize(Queue* pq) {
QueueNode* p1 = pq->_front;
int size = 0;
while (p1!= NULL) {
p1 = p1->next;
size++;
}
return size;
}
void QueueDestory(Queue* pq) {
QueueNode* p1 = pq->_front;
while (p1 != NULL) {
pq->_front = pq->_front->next;
free(p1);
p1 = pq->_front;
}
pq->_front = pq->_rear = NULL;
}
void TestQueue() {
Queue S;
Queue *pq = &S;
QueueInit(pq);
QueuePush( pq,1 );
QueuePush(pq, 2);
QueuePop(pq);
QueuePush(pq, 3);
printf("front=%d\n", QueueFront(pq));
printf("rear=%d\n", QueueBack( pq));
QueuePush(pq, 4);
QueuePush(pq, 5);
QueuePop(pq);
printf("front=%d\n", QueueFront(pq));
QueuePush(pq, 6);
printf("size=%d\n", QueueSize(pq));
}
int main() {
TestQueue();
return 0;
}