def.h
#include "stdio.h"
#include "stdlib.h"
#define ERROR -1
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
#define OK 1
typedef int Status;
typedef char ElemType;
1,h
//队列是一种限制的线性表。
//在队尾插入,就是入队,在队头删除,就是出队
typedef struct QNode {
ElemType data;
struct QNode *next;
}*QueuePtr;
typedef struct {
QueuePtr front;//队头指针
QueuePtr tail;//队尾指针
}LinkQueue;
1.c
Status InitQueue (LinkQueue *queue) {
queue->front = (QueuePtr)malloc (sizeof (struct QNode));//带有节点的
if (!queue->front) {
exit (OVERFLOW);
}
queue->tail = queue->front;
queue->front->next = NULL;
return OK;
}
//销毁队列
Status DestroyQueue (LinkQueue *queue) {
while (queue->front) {
queue->tail = queue->front->next;
free (queue->front);
queue->front = queue->tail;
}//最后的结果是queue->front = queue->tail = NULL;
return OK;
}
//置空队列
Status ClearQueue (LinkQueue *queue) {
QueuePtr list = queue->front->next;
while (list) {
queue->tail = list->next;
free (list);
list = queue->tail;
}
queue->front->next = NULL;
queue->tail = queue->front;
return OK;
}
//队列是否为空
Status QueueEmpty (LinkQueue *queue) {
return queue->front == queue->tail?TRUE:FALSE;
}
//求出队列的长度
int QueueLength (LinkQueue *queue) {
int count = 0;
QueuePtr list = queue->front;
while (list != queue->tail) {
count++;
list = list->next;
}
return count;
}
//得到队头的元素
Status GetHead (LinkQueue *queue,ElemType *e) {
if (queue->front == queue->tail) {
return ERROR;
}else {
*e = queue->front->next->data;
return OK;
}
}
//插入元素
Status EnQueue (LinkQueue *queue,ElemType e) {
QueuePtr list = (QueuePtr)malloc(sizeof (struct QNode));
if (!list) {
exit (OVERFLOW);
}
list->data = e;
list->next = NULL;
queue->tail->next = list;
queue->tail = list;
return OK;
}
Status DeQueue (LinkQueue *queue,ElemType *e) {
if (queue->front == queue->tail) {
return ERROR;
}else {
QueuePtr list = queue->front->next;
*e = list->data;
queue->front->next = list->next;
if (list == queue->tail) {
queue->tail = queue->front;
}
free (list);
return OK;
}
}
Status QueuePrint (LinkQueue *queue,void (*vi)(ElemType)) {
QueuePtr list = queue->front->next;
while (list) {
vi(list->data);
list = list->next;
}
printf ("\n");
return OK;
}