(有头节点)@数据结构大神:链队列的5种操作,33行判断节点为空,为啥会错?求解释!

//链队列的5种操作.c

include

include

include

define Stack_Size 50

typedef struct QueueNode{
int data;//数据保持原来结构即可
struct QueueNode *next;//注意next是QueueNode里面的东西,结构为Struct QueueNode
}QueueNode;

QueueNode *head=NULL;

typedef struct {
QueueNode *front;
QueueNode *rear;
}LinkQueue;

int k=0;

int Init_Queue(LinkQueue Q)
{

Q=(LinkQueue
)malloc(sizeof(LinkQueue));
if(Q==NULL) return 0;
Q->front=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->front==NULL) return 0;
Q->rear=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->rear==NULL) return 0;

Q->front->next=head;//不仅需要头指针,还需要头节点 .定义头节点为空,怎么错了? 
Q->rear->next=head;
k=1;
return 1;

}

int Empty_Queue(LinkQueue *Q)
{
if((Q->front->next==NULL)&&(Q->rear->next==NULL)&&(k=1))
return 1;//有头节点,但是为空
else return 0;
}

void EnQueue(LinkQueue *Q,int x)
{
QueueNode *q;
q=(QueueNode *)malloc(sizeof(QueueNode));
if(q==NULL) exit(0);
q->data=x;

if(Empty_Queue(Q)==1)
{
 head=q;head->next=Q->rear->next;
}//q变成了头节点 .应该和后面建立联系 
else
{Q->rear->next=q;Q->rear=q;}//先给head数值 

}

int DeQueue(LinkQueue *Q)//把头节点删了,看和尾节点是否相同
{
if(Empty_Queue(Q)==1) exit(0);
QueueNode *p;int x;
p=Q->front->next;x=p->data;
Q->front->next=p->next;

if(Q->rear==p)//只有一个头节点,但不为空 
{Q->front=Q->rear;}//没啥区别了 

return x; 

}

int QueueFront(LinkQueue *Q)
{
int x;
if(Empty_Queue(Q)==1) exit(0);
x=Q->front->next->data;
return x;
}

int main()
{

LinkQueue *Q;
if(Init_Queue(Q)==1)
{
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);DeQueue(Q);
EnQueue(Q,4);DeQueue(Q);

    printf("QueueFront:%d\n",QueueFront(Q));
}
getch();

}

代码呢?怎么空空。。。

建议你找本教材,认真看看。你的设计错误很多。
初始化函数就看不下去了,为什么一次申请3个节点?
到底哪个做头节点?
head用错了,他是用来保存头结点的。

 int Init_Queue(LinkQueue *Q)//修改
{

    Q=(LinkQueue *)malloc(sizeof(LinkQueue));//修改
    if(Q==NULL) return 0;
    Q->front=(QueueNode*)malloc(sizeof(QueueNode));
    if(Q->front==NULL) return 0;
    Q->rear=(QueueNode*)malloc(sizeof(QueueNode));
    if(Q->rear==NULL) return 0;
    Q->front->next=head;//不仅需要头指针,还需要头节点 .定义头节点为空,怎么错了? 
    Q->rear->next=head;
    k=1;
    return 1;
}