源码+注释
#include <malloc.h>
#include <stdio.h>
#define OK 1
#define ERROR 0
typedef int QElemType;
typedef struct QNode {
QElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
} LinkQueue;
int InitQueue(LinkQueue *queue);
int EnQueue(LinkQueue *queue, QElemType elem);
int DeQueue(LinkQueue *queue, QElemType *elem);
int IsEmpty(LinkQueue *queue);
void DestroyStack(LinkQueue *queue);
QElemType GetHead(LinkQueue *queue);
int main() {
}
int InitQueue(LinkQueue *queue) {
queue->front = queue->rear = (QueuePtr) malloc(sizeof(QNode));
if (!(queue->front)) {
return ERROR;
}
queue->front->next = NULL;
return OK;
}
int EnQueue(LinkQueue *queue, QElemType elem) {
QueuePtr temp;
temp = (QueuePtr) malloc(sizeof(QNode));
if (!temp) {
return ERROR;
}
temp->data = elem;
temp->next = NULL;
queue->rear->next = temp;
queue->rear = temp;
return OK;
}
int DeQueue(LinkQueue *queue, QElemType *elem) {
if (IsEmpty(queue)) {
return ERROR;
}
QueuePtr pQ;
pQ = queue->front->next;
*elem = pQ->data;
queue->front->next = pQ->next;
if (queue->rear == pQ) {
queue->rear = queue->front;
}
free(pQ);
return OK;
}
int IsEmpty(LinkQueue *queue) {
return queue->front == queue->rear;
}
void DestroyStack(LinkQueue *queue) {
while (queue->front) {
queue->rear = queue->front->next;
free(queue->front);
queue->front = queue->rear;
}
}
QElemType GetHead(LinkQueue *queue) {
if (IsEmpty(queue)) {
return queue->front->next->data;
}
}