Queue.h
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int DataType;
typedef struct QueueNode
{
DataType _data;
struct QueueNode* _next;
}QueueNode;
typedef struct Queue
{
QueueNode* _front;
QueueNode* _rear;
}Queue;
void QueueInit(Queue* q);
void QueueDestory(Queue* q);
void QueuePush(Queue* q, DataType x);
void QueuePop(Queue* q);
void QueuePrint(Queue* q);
Queue.c
#include"Queue.h"
void QueueInit(Queue* q) {
assert(q);
q->_front = q->_rear = NULL;
}
void QueuePush(Queue* q, DataType x) {
assert(q);
if (q->_front == NULL) {
QueueNode* NewNode = (QueueNode*)malloc(sizeof(QueueNode));
NewNode->_data = x;
q->_front = NewNode;
QueueNode* cur = (QueueNode*)malloc(sizeof(QueueNode));
cur->_data = NULL;
q->_rear = cur;
q->_front->_next = q->_rear;
q->_rear->_next = q->_front;
}
else {
q->_rear->_data = x;
QueueNode* tem = (QueueNode*)malloc(sizeof(QueueNode));
tem->_data = NULL;
tem->_next = q->_rear->_next;
q->_rear->_next = tem;
q->_rear = tem;
}
}
void QueuePop(Queue* q) {
assert(q);
if (q->_front == NULL) {
return 0;
}
else {
QueueNode* cur = (QueueNode*)malloc(sizeof(QueueNode));
cur = q->_front->_next;
free(q->_front);
q->_front = cur;
if (q->_front->_data == NULL) {
q->_front = q->_rear = NULL;
}
}
}
void QueuePrint(Queue* q) {
assert(q);
QueueNode* cur = q->_front;
while (cur) {
printf("%d", cur->_data);
if (cur->_next->_data == NULL) {
break;
}
cur = cur->_next;
}
printf("\n");
}
int main() {
Queue q;
QueueInit(&q);
QueuePush(&q, 1);
QueuePush(&q, 2);
QueuePush(&q, 3);
QueuePush(&q, 4);
QueuePrint(&q);
QueuePop(&q);
QueuePrint(&q);
QueuePop(&q);
QueuePrint(&q);
QueuePop(&q);
QueuePrint(&q);
QueuePop(&q);
QueuePrint(&q);
}