首页 新闻 会员 周边

数据结构 链队列中【循环链队列】的原理问题

1
悬赏园豆:10 [已关闭问题] 关闭于 2012-09-22 12:35

假设用一个带头结点的循环单链表表示队列(称为循环链队列),该队列只设一个指向队尾结点的指针rear,不设头指针,设计初始化队列、入队和出队:

代码如下:

循环链队列定义:

typedef struc queuenode {
    DataType data;
    struct queuenode *next;
} QueueNode;
QueueNode *rear;

初始化空队列:

QueueNode * InitQueue (QueueNode  *rear)
{
    rear=(QueueNode *)malloc(sizeof(QueueNode));
    rear->next=NULL;
    return rear;
}

入队列:

1 void EnQueue(QueueNode *rear,DataType x)
2 {
3     QueueNode *s=(QueueNode *)malloc(sizeof(QueueNode));
4     s->data=x;
5     s->next=rear->next;
6     rear->next=s;
7     rear=s;
8 }

出队列:

 1 DataType DelQueue(QueueNode *rear)
 2 {
 3     QueueNode *s,*t;
 4     DataType x;
 5     if(rear->next == NULL){
 6         printf("Empty");
 7         exit(0);
 8     }
 9     else{
10         s=rear->next;
11         rear->next=s->next;
12         t=s->next;
13         x=t->data;
14         free(s);
15         return x;
16     }
17 }

在定义和初始化很简单,但是入队列和出队列就是糊涂了,首先它是怎么实现循环链队列的;然后在入队列时,入队列代码第5~7行中,想不明白是怎么移动rear节点来实现把新结点插入到循环队列中,插入到循环链队列后,那么当出队列时,怎么可能实现队列的先进先出,rear已经移动了,怎么定位最先进去的结点,实现该结点出队列;

问题虽小,但是很伤脑细胞,求前辈指点。

魏飞的主页 魏飞 | 菜鸟二级 | 园豆:290
提问于:2012-09-16 10:38
< >
分享
所有回答(1)
0

你这个是错的
12 t=s->next;
13 x=t->data;
t根本没什么用 不过你这个却告诉了我循环队列的结构

HDU李少帅 | 园豆:204 (菜鸟二级) | 2018-12-13 15:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册