队列的实例一
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef char ElemType; 5 typedef struct QNode 6 { 7 ElemType data; 8 struct QNode *next; 9 } QNode, *QueuePrt; 10 11 typedef struct 12 { 13 QueuePrt front, rear; //队头,队尾指针 14 } LinkQueue; 15 16 void InitQueue(LinkQueue *q) 17 { 18 q->front=q->rear=(QueuePrt)malloc(sizeof(QNode)); 19 if(q->front==NULL) 20 exit(0); 21 q->front->next = NULL; 22 } 23 24 //入队列操作 25 InsertQueue(LinkQueue *q,ElemType e) 26 { 27 QueuePrt p; 28 p=(QueuePrt)malloc(sizeof(QNode)); 29 //分配内存空间失败 30 if(!p) 31 exit(0); 32 p->data = e; 33 p->next=NULL; 34 q->rear->next = p; 35 q->rear = p; 36 } 37 38 //出队列操作 39 DeleteQueue(LinkQueue *q,ElemType *e) 40 { 41 QueuePrt p; 42 if(q->front==q->rear) 43 return; 44 p = q->front->next; 45 *e = p->data; 46 q->front->next = p->next; 47 if(q->rear==p) 48 q->rear = q->front; 49 free(p); 50 } 51 52 //销毁一个队列 53 DestroyQueue(LinkQueue *q) 54 { 55 while(q->front) 56 { 57 q->rear=q->front->next; 58 free(q->front); 59 q->front = q->rear; 60 } 61 } 62 63 int main() 64 { 65 LinkQueue q; 66 char e; 67 char c; 68 69 InitQueue(&q); 70 printf("请输入一串字符,以#作为结束标志:"); 71 scanf("%c", &c); 72 while(c!='#') 73 { 74 InsertQueue(&q, c); 75 scanf("%c", &c); 76 } 77 InsertQueue(&q, c); 78 getchar(); //输入完成后会有回车\n,getchar把\n拿出来,键盘缓冲区就空了 79 80 DeleteQueue(&q, &e); 81 //调试用的:错误:一直循环输出# 82 //原因:while (e!='#'),e永远不会等于字符#,因为e定义成了QueuePrt 83 //解决:把e的类型由QueuePrt改为char 84 // if(e=='1') 85 // printf("fsdf"); 86 while (e!='#') 87 { 88 printf("%c", e); 89 DeleteQueue(&q, &e); 90 } 91 DestroyQueue(&q); 92 return 0; 93 }
出现的错误:一直循环输出#
原因:while (e!='#'), e永远不会等于字符#,因为e定义成了QueuePrt
解决:把e的类型由QueuePrt改为char