以带头结点的循环链表表示队列,只设一个指针指向队尾的算法元素节点(不带头指针),试编辑队列初始化算

作者&投稿:旁泉 (若有异议请与网页底部的电邮联系)
~ //既然是算法
就不用源码了
具体看注释
typedef
int
datatype;
typedef
struct
queuenode
{
datatype
data;
struct
queuenode
*next;
}queuenode;
//以上是结点类型的定义
typedef
struct
{
queuenode
rear;
}linkqueue;
//只设一个指向队尾元素的指针
void
initqueue(
linkqueue
&q)
{
//置空队:就是使头结点成为队尾元素
q.rear=(queuenode*)malloc(sizeof(queuenode))
queuenode*
s;
q->rear
=
q->rear->next;//将队尾指针指向头结点
while(q->rear!=q->rear->next)
//当队列非空,将队中元素逐个出队
{
s=q->rear->next;
q->rear->next=s->next;
free(s);
}
//回收结点空间
}
int
emptyqueue(
linkqueue
&q)
{
//判队空
//当头结点的next指针指向自己时为空队
return
q->rear->next->next==q->rear->next;
}
void
enqueue(
linkqueue
&q,
datatype
x)
{
//入队
//也就是在尾结点处插入元素
queuenode
*p=(queuenode
*)
malloc
(sizeof(queuenode));//申请新结点
p->data=x;
p->next=q->rear->next;//初始化新结点并链入
q-rear->next=p;
q->rear=p;//将尾指针移至新结点
}
datatype
dequeue(
linkqueue
&q,datatype
&x)
{
//出队,把头结点之后的元素摘下
datatype
t;
queuenode
*p;
if(emptyqueue(
q
))
error("queue
underflow");
p=q->rear->next->next;
//p指向将要摘下的结点
x=p->data;
//保存结点中数据
if
(p==q->rear)
{
//当队列中只有一个结点时,p结点出队后,要将队尾指针指向头结点
q->rear
=
q->rear->next;
q->rear->next=p->next;
}
else
q->rear->next->next=p->next;//摘下结点p
free(p);//释放被删结点
return
x;
}

用带头指针的单循环链表实现队列和用带尾指针的单循环链表实现队列...
答:尾指针。头指针的话,虽然出队列只要一步操作,但入队列操作需要先遍历到尾部,再插入新结点,复杂度是O(n)。尾指针的话,入队列只要直接在尾部插入新结点即可,出队列也只要把尾结点的next指向下一个结点即可。两种操作都是O(1)复杂度。

《数据结构》假设用一个循环单链表来表示队列(称为循环链队),
答:typedef int ElemType;//定义链表 typedef struct lnode { ElemType data;//数据域 struct lnode *next;//后继指针 }LNode;//定义链队列将头尾指针封装在一起的链队 typedef struct { LNode *rear;//对尾指针 }QueueNode;//入对 void Insert(QueueNode *q,ElemType x){ LNode *s;s=(L...

用循环单链表实现循环队列,如何写出插入和删除的算法?
答:L->pre->nxt=p;L->pre=p;L=p;} } 循环单链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。和单链表相同,循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作较为方便。

c++使用单向循环链表结构实现循环队列。
答:我实在不知道你们这个题目是什么意思,竟然继承链表来实现队列,帮你实现了,VC6.0通过 //list.h ifndef LIST_H define LIST_H include<iostream> using namespace std;struct Node { int data;Node *next;};class List { public:List();~List();List(List&rhs);List &operator=(List&);int...

数据结构的问题~
答:3 设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针),试编写相应的入队列、出队列算法。 4 设计一个输出如下形式数值的递归算法。 4 4 4 4 3 3 3 2 2 1 5 编写一个算法,利用栈的基本运算返回指定栈中的栈底元素。 习题4 一、选择题 1 串是一种特殊的线性表,其特殊性...

如果用一个循环单链表表示队列(称为循环队列),该队列只设一个尾指针rea...
答:你这是要用 C 语言实现吧? 我很少用 C 语言,所以一下子也写不出程序给你。不过这个原理倒是不难。单链表你会写吗?如果会,你把链表最后一项的尾指针指向第一个元素,就成了你说的循环链表了。首元素和尾元素可能需要加个标志。注意:追加元素的时候,被追加元素的指针要指向首元素。删除最后一...

数据结构 队列
答:第二章 1. 对线性表(18,8,21,7,3),画出相应的带表头结点的双向循环链表。2. 编写一个算法,在带表头结点的有序单链表中,插入值为 的结点,并使新的链表仍然有序。第三章 1. 请编写一个算法,把一个队列逆置,在算法中可以使用栈,可以调用栈和队列的基本操作,但不允许直接处理栈...

用单循环链表来表示队列(也称为循环队列),只设一个队尾指针
答:struct Element{ int data; Element * next;}; void DelElement(Element * prev){ Element * tmp=prev->next; prev.next=tmp.next tmp.next=null; free(tmp)}

假设循环单链表表示的队列长度为n,队头固定在链表表尾,若只设头指针...
答:【答案】:A 进队操作是在表尾进行的,在只带头指针的循环单链表中寻找表尾结点的时间复杂度为O(n)。

循环链表用在什么情况,希望举具体的例子O(∩_∩)O谢谢
答:队列可以用循环链表。假设我用rear指针指向链表尾,那么因为是循环链表就会有rear->next指向链表头。这时候入队只需把新节点插在rear的后面,出队就是把rear->next出队。如此一来就可以节省一个head指针和一个头节点。当然你进行循环的时候明显循环链表比线性循环队列看着舒服= = ...