我把调通的完整代码放在下面
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define MAXSIZE 100 #define ElemType int typedef struct qnode{ ElemType data; struct qnode *next; }DataNode; typedef struct{ DataNode *head; DataNode *rear; }LinkQuNode; void InitQueue(LinkQuNode *q) { q->head=q->rear = (DataNode *)malloc(sizeof(DataNode)); q->head->next =NULL; } void enQueue(LinkQuNode &q,ElemType e) { DataNode *p; p= (DataNode *)malloc(sizeof(DataNode)); p->data = e; p->next = NULL; q.rear->next = p; q.rear = p; } int deQueue(LinkQuNode &q,ElemType &e) { DataNode *p; if(q.head==q.rear) return 0; p = q.head->next; e = p->data; q.head->next = p->next; if(q.rear == p) q.rear = q.head; free(p); return 1; } int main(){ LinkQuNode Q; int e; int i; InitQueue(&Q); for(i=0;i<5;i++) enQueue(Q, i); for( i=0; i<5;i++){ deQueue(Q,e); printf("%d",e); } return 0; }
这个队列最讲究的地方就是初始化了,别看简单,还是有一个陷阱呢,今天掉下去爬了好久没爬上来
head和rear都是指向DataNode类型的指针,初始化的时候建立了一个DataNode结点让head和rear都指向它
增加结点的时候在队尾rear后面增加
删除结点的时候在队头后删除,注意只有一个结点的情况,为了避免rear丢失,把head的值赋给rear
原文:http://www.cnblogs.com/zhangxiran/p/7719721.html