#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
}Node;
typedef struct
{
Node *front;
Node *rear;
}lqueuetp;
void InitQueue(lqueuetp *lq)
{
//设置一个空的链队列lq
lq->front = (Node*)malloc(sizeof(Node));
lq->front->next = NULL;
lq->front = lq->rear; //链队列空的判断条件
}
void QueueEmpty(lqueuetp *lq)
{
if(lq->front = lq->rear)
printf("链队列为空");
else
printf("链队列不为空");
}
int Head(lqueuetp *lq) //读链队列队头元素
{
//若链队列lq不为空,则返回队头元素值,否则返回0
if(lq->front == lq->rear)
return 0;
else
return(lq->front->next->data);
}
void EnQueue(lqueuetp *lq, int x)
{
//在链队列lq中,插入x为新的队尾元素
Node *p;
p = (Node*)malloc(sizeof(Node));
p->data = x;
p->next = NULL;
lq->rear->next = p; //尾插
lq->rear = p;
}
int DelQueue(lqueuetp *lq)
{
//若链队列lq不为空,则删去队头元素并返回元素值,否则返回0
int x;
Node *q;
q = (Node*)malloc(sizeof(Node));
if(lq->front == lq->rear)
return 0;
else
{
q = lq->front->next;
lq->front->next = q->next;
if(q->next == NULL)
lq->rear = lq->front; //当链队列中仅有一个结点时,出队时还需修改尾指针
x = q->data;
free(q);
return x;
}
}
int main()
{
int x,i,n;
printf("链队列长度:");
scanf("%d",&n);
lqueuetp *lq;
lq = (lqueuetp*)malloc(sizeof(lqueuetp));
InitQueue(lq);
printf("入队列:\n");
for(i = 1; i <= n;i++)
{
scanf("%d",&x);
EnQueue(lq,x);
}
QueueEmpty(lq);
printf("读取队列对头元素:%d\n",Head(lq));
printf("出队列:%d\n",DelQueue(lq));
return 0;
}
这个代码哪里出现问题了?为什么入队列时不成功?