为什么程序运行到Insert()函数中Q->rear->next = node;这一行时会报错
运行结果显示next不能存放node的地址
#include <stdio.h>
#include <stdlib.h>
typedef struct QueueNode
{
int Data;
QueueNode *next;
}QueueNode;
typedef struct QueueLink
{
QueueNode *front;
QueueNode *rear;
int length;
}QueueLink;
void Init(QueueLink *Q);
void Insert(QueueLink *Q);
void Delete(QueueLink *Q);
void Print(QueueLink *Q);
int main()
{
QueueLink q;
int i;
printf("1. 初始化\n");
printf("2. 入队\n");
printf("3. 出队\n");
printf("4. 输出\n");
printf("请输入选项:");
while (scanf("%d",&i)==1)
{
switch (i)
{
case 1: Init(&q);
printf("\n");
break;
case 2: Insert(&q);
printf("\n");
break;
case 3: Delete(&q);
printf("\n");
break;
case 4: Print(&q);
printf("\n");
break;
default: printf("无该选项!!!\n");
break;
}
printf("1. 初始化\n");
printf("2. 入队\n");
printf("3. 出队\n");
printf("4. 输出\n");
printf("请输入选项:");
}
getchar();
getchar();
return 0;
}
void Init(QueueLink *Q)
{
QueueNode *head;
head = (QueueNode *)malloc(sizeof(QueueNode)); //head为头结点,最开始时front和rear均指向它
Q = (QueueLink *)malloc(sizeof(QueueLink));
Q->front = Q->rear = head;
Q->length = 0;
printf("初始化成功!!!\n");
}
void Insert(QueueLink *Q)
{
int data;
QueueNode *node;
node = (QueueNode *)malloc(sizeof(QueueNode));
printf("请向结点中输入数据:");
scanf("%d",&data);
node->Data = data;
node->next = NULL;
Q->rear->next = node;
Q->rear = node;
//Q->length++;
printf("入队成功!!!\n");
}
void Delete(QueueLink *Q)
{
int data;
QueueNode *p;
if (Q->front == Q->rear)
{
printf("队列为空,无可出队元素!!!\n");
}
else
{
p = Q->front->next; //将“要出队的元素”的地址暂存在p中
Q->front->next = p->next; //front的next域中存放“要出队元素”的下一个元素的地址
if ((Q->rear) == p) //如果rear指向被删元素,说明“被删元素”是最后一个元素,此时就应让rear指向头结点
{
Q->front = Q->rear;
}
free(p);
}
}
void Print(QueueLink *Q)
{
if (Q->front == Q->rear)
{
printf("队列为空,无可出队元素!!!\n");
}
else
{
QueueNode *p=Q->front->next;
while (p!=NULL)
{
printf("%d ",p->Data);
p = p->next;
}
printf("\n");
}
}