/*队列没完全看懂*/ #include <stdio.h> #include <stdlib.h> #define Datatype int //定义节点结构 typedef struct node{ Datatype data; struct node *next; }QueueNode; //定义头节点 typedef struct{ QueueNode *front; QueueNode *rear; }LinkQueue; //初始化链队列,头节点置空 void InitQueue(LinkQueue *Q) { Q->front = Q->rear = NULL; } //判断链队列是否为空 int QueueEmpty(LinkQueue *Q) { return(Q->front == NULL && Q->rear == NULL); } //入队 void EnLinkQueue(LinkQueue *Q, Datatype v) { QueueNode *p; p = (QueueNode *)malloc(sizeof(QueueNode));//为新的节点分配空间 p->data = v; p->next = NULL; if(QueueEmpty(Q)) Q->front = Q->rear = p; else { Q->rear->next = p; //将新的节点连接到队列 Q->rear = p; //指向队列尾 } } //出队 Datatype DeLinkQueue(LinkQueue *Q) { Datatype i; QueueNode *s; if(QueueEmpty(Q)) //判断队列是否为空 printf("Error,the linkqueue is empty!"); s = Q->front; i = s->data; if(Q->front == Q->rear) //判断队列是否只有一个节点 Q->front = Q->rear = NULL; else Q->front = s->next; free(s); return i; } //读取队列头元素,不改变队列状态 Datatype ReadLinkQueue(LinkQueue *Q) { Datatype i; if(QueueEmpty(Q)) //判断队列是否为空 printf("Error,the linkqueue is empty!"); i = Q->front->data; return i; } int main() { LinkQueue Q; Datatype i = 1; InitQueue(&Q); while(i<=6) { EnLinkQueue(&Q,i); //将1-6入队 i++; } printf("DeLinkQueue: %d\n", DeLinkQueue(&Q)); printf("DeLinkQueue: %d\n", DeLinkQueue(&Q)); printf("ReadLinkQueue: %d\n", ReadLinkQueue(&Q)); printf("ReadLinkQueue: %d\n", ReadLinkQueue(&Q)); EnLinkQueue(&Q,9); printf("The all number of the linkqueue:\n"); while(!QueueEmpty(&Q)) printf("%d\t",DeLinkQueue(&Q)); //输出队列中所有数据 return 0; }