队列的实例一

 

 

 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 }
View Code

出现的错误:一直循环输出#

原因:while (e!='#'),      e永远不会等于字符#,因为e定义成了QueuePrt
解决:把e的类型由QueuePrt改为char
posted @ 2020-08-28 12:40  wind_y  阅读(169)  评论(0编辑  收藏  举报