标题:关于队列入队,一个地方不是很明白
只看楼主
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
结帖率:100%
 问题点数:0 回复次数:2 
关于队列入队,一个地方不是很明白
程序代码:
struct queueNode {
    int data;
    queueNode *next;
}queueNode;
struct linkQueue {
    queueNode *head;
    queueNode *rear;
}

链队列的定义
程序代码:
void insertQueue(linkQueue *q, int data) {
    queueNode *node;
    node = new queueNode;
    node->data = data;
    node->next = NULL;
    q->rear = node;
    q->rear->next = node;    //不是很明白的地方
}

在书上和网上绝大多数人都是这样写的
在插入队列之后,已经让 q->rear 等于要插入的节点了,为什么还要让 q->rear->next 也要等于插入的节点?q->rear->next 不应该等于 NULL 吗,因为下一个节点目前还是未知的
网上看到有人写注释,如果不等于的话,队列就连不上了
不是很明白,有人指教下吗?
搜索更多相关主题的帖子: 队列 node data next 等于 
2017-11-26 16:05
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
应该是这样。
 q->rear->next = node;  
 q->rear = node;

入队是从队尾入队,这应该是带头结点的链队列吧。 q->rear->next = q->fronr->next  = node;是把新生申请的结点连接到队头。q->rear = node;是使q->rear指向队尾
2017-11-26 22:08
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 楼主 Jonny0201
void EnterQueue(LinkQueue *q,int a[],int x)
{
    LinkQueueNode *NewNode;
    for(int i=0;i<x;i++)
    {
        NewNode=(LinkQueueNode *)malloc(len);
        if(NewNode!=NULL)
        {
            NewNode->data=a[i];
            NewNode->next=NULL;
            q->l->next=NewNode;
            q->l=NewNode;
        }
    }
}
2017-11-26 22:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-482837-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.308461 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved