队列不懂求大神/
typedef struct qnode{intdata;
struct qnode *next;
}Qnode;
typedef struct{
Qnode *front;
Qnode *rear;
}Liqueue;
这个链队定义看不懂啊。Liqueue->front和Liqueue->front->next 是什么关系啊?
在入队列中的函数:
void enqueue(Liqueue q,int e)
{
Qnode *s;
s=(Qnode*)malloc(sizeof(Qnode));
s->next=NULL;
if(NULL=q->rear)
q->front=q->rear=s;
else
{
q->rear->next=s;
q->rear=s;
}
}
q->rear->next=s;
q->rear=s;又是什么意思啊?
还有,这个第一个数据结点是q->front还是q->front->next?q->front不是空的队首结点吗?好复杂啊,求大神帮小弟解答一把!!感激不尽。 本帖最后由 mingcxx 于 2016-5-19 21:58 编辑
Liqueue->front:队列的首指针,指向首节点
Liqueue->front->next:队列的首指针指向的首节点,该首节点的next成员指向下一节点(第二个节点)
q->rear->next=s;:q->rear是尾指针,指向当前的尾节点,将当前尾节点的next成员赋值为s,即指向新节点,简单说就是将s节点链接到队列的尾端
q->rear=s;更新尾指针,指向新的尾节点
那个if(NULL=q->rear),最好把“=”改成“==”。不过理解起来有点怪,这是在检查队列是否为空,那检查头指针应该好点。这样如果头指针为空,整个队列就为空。而且有个前提,有这个判断就必须把队列的首尾指针均初始化为NULL。个人建议,随你喜好。
页:
[1]