user-0 提问: 为什么队列运行出错。。

回复:
user: user-0
content: 谢谢 终于运行通过了。。

user: user-1
content: 引用 4 楼 cfjtaishan 的回复:#include<stdio.h> #include<malloc.h> #include<stdlib.h>  typedef struct _node *PtrToNode;  struct _node{     int num; //结点定义     PtrToNode Next; };  typedef struct _queue *Queue; //队列定义  struct _queue{     PtrToNode Head;     PtrToNode Rear; };  void CreateQ(Queue Q) {      Q->Head = (PtrToNode)malloc(sizeof(struct _node));     Q->Head->Next = NULL;     Q->Rear = Q->Head;  } void AddQ(Queue Q,int num) //加入队列 {     PtrToNode New;     New = (PtrToNode)malloc(sizeof(struct _node));     New->Next = NULL;     New->num = num;      Q->Rear->Next = New;      Q->Rear = New;  } int DeleteQ(Queue Q) //出队 {     PtrToNode New;     int num;     New=Q->Head->Next;     num=New->num;     Q->Head=Q->Head->Next;     free(New);     return num; }  int isEmpty(Queue Q) {     if(Q->Head==Q->Rear){         return 1;     }     return 0; }  static void ShowQ(Queue Q) {     PtrToNode p = Q->Head->Next;      while (p) {         printf("%d ", p->num);         p = p->Next;     }     putchar(10); }  int main() {     Queue Q;      Q = (Queue)malloc(sizeof(struct _queue));     if (!Q)         exit(0);      CreateQ(Q);     int i;     for (i=0;i<10;i++){         printf("step1\n");         AddQ(Q,i);         printf("step2\n");     }     ShowQ(Q);      while(!isEmpty(Q)){         printf("%d",Q->Rear->num);         // printf("%d ",DeleteQ(Q));         Q->Head = Q->Head->Next;     } }  参考一下吧 第一个问题：main函数里的Q是野指针，要使用Q中的HEAD, Rear，需要先对其申请空间； 第二个问题：Create函数里，为Head申请了空间，为啥有给其赋值NULL呢？这不是矛盾吗？改了一下让Head->Next = NULL; 另外加了遍历函数。申请的空间没有释放，建议自己加上。

user: user-1
content: #include<stdio.h> #include<malloc.h> #include<stdlib.h>  typedef struct _node *PtrToNode;  struct _node{     int num; //结点定义     PtrToNode Next; };  typedef struct _queue *Queue; //队列定义  struct _queue{     PtrToNode Head;     PtrToNode Rear; };  void CreateQ(Queue Q) {      Q->Head = (PtrToNode)malloc(sizeof(struct _node));     Q->Head->Next = NULL;     Q->Rear = Q->Head;  } void AddQ(Queue Q,int num) //加入队列 {     PtrToNode New;     New = (PtrToNode)malloc(sizeof(struct _node));     New->Next = NULL;     New->num = num;      Q->Rear->Next = New;      Q->Rear = New;  } int DeleteQ(Queue Q) //出队 {     PtrToNode New;     int num;     New=Q->Head->Next;     num=New->num;     Q->Head=Q->Head->Next;     free(New);     return num; }  int isEmpty(Queue Q) {     if(Q->Head==Q->Rear){         return 1;     }     return 0; }  static void ShowQ(Queue Q) {     PtrToNode p = Q->Head->Next;      while (p) {         printf("%d ", p->num);         p = p->Next;     }     putchar(10); }  int main() {     Queue Q;      Q = (Queue)malloc(sizeof(struct _queue));     if (!Q)         exit(0);      CreateQ(Q);     int i;     for (i=0;i<10;i++){         printf("step1\n");         AddQ(Q,i);         printf("step2\n");     }     ShowQ(Q);      while(!isEmpty(Q)){         printf("%d",Q->Rear->num);         // printf("%d ",DeleteQ(Q));         Q->Head = Q->Head->Next;     } }  参考一下吧 第一个问题：main函数里的Q是野指针，要使用Q中的HEAD, Rear，需要先对其申请空间； 第二个问题：Create函数里，为Head申请了空间，为啥有给其赋值NULL呢？这不是矛盾吗？改了一下让Head->Next = NULL;

user: user-2
content: Q->Rear->Next=New;  Q->Rear=New

user: user-2
content: Q->Rear在addQ的时候值是不是等于null了

user: user-0