fanzhihao 发表于 2016-5-19 09:40:52

队列不懂求大神/

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 19:41:45

本帖最后由 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]
查看完整版本: 队列不懂求大神/