qq_31750507 2015-12-05 12:48 采纳率: 52.6%
浏览 1704

(有头节点)@数据结构大神:链队列的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();

}

  • 写回答

2条回答 默认 最新

  • ysuwood 2015-12-05 13:45
    关注

    代码呢?怎么空空。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制