/我记得front是要存元素的,rear不存元素你int i=front +1,
然后输出queue[i]不就把第一个给漏了吗我觉得应该这样写/
{
if(IsEmpty())
cout<<"\nQueue is Empty!\n";
else
{
int i,x,j;
j=x=front;
cout<<"\nQueue elements are:\n";
if(front>rear)
{
x=front-maxSize;
for(i=x;i<rear;i=(i+1)%maxSize)
{
cout<<elements[j]<<" ";
j=(j+1)%maxSize;
}
}
else
{
for(i=front;i<rear;i=(i+1)%maxSize)
{
cout<<elements[i]<<" ";
}
}
}
}
/感觉思路还是有点乱,应该还有更简便的方法/
---------------------------------------
/2年后更新:这个回答还是刚学的时候写的,现在看来真冗杂,懒得再改了,保护好头发/
入队:首先将值写入rear指向的地方,然后rear加1
出队:首先将front指向的元素取出,然后front加1
当front == rear时 队列为空
需要掌握队列的那些知识才算掌握了 队列的运算啊。 顺便留个Q行吗,谢了 回答: 。。没考过二级,不太清楚。
队列的 *** 作无非就是入队列和出队列 判断队列是否为空 判断队列是否为满。。
当然,队列又会分为线性队列和循环队列。
对于这两种队列,出队列和入队列 *** 作都是相同的。只是循环队列在判断队列的空与满上面有些差别
循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件是front=rear,而队列判满的条件是front=(rear+1)%MaxSize。
#include<stdioh>
#define MAXSIZE 100
typedef struct seqqueue
{
int data[MAXSIZE];
int front;
int rear;
}seqqueue;
void Initseqqueue(seqqueue &q) //循环队列初始化
{
qfront =qrear=0;
printf("初始化成功!\n");
}
int enqueue(seqqueue &q,int e) //数据元素e入队列
{
if((qrear+1)%MAXSIZE==qfront)
{
printf("循环队列满!\n");
return 0;
}
else
{
qdata[qrear]=e;
qrear=(qrear+1)%MAXSIZE;
printf("%d入队列成功!\n",e);
return 1;
}
}
int isemptyqueue(seqqueue &q) //判断循环队列是否为空
{
if(qrear ==qfront )
{
printf(" 空队列!\n");
return 1;
}
else
{
printf("非空队列!\n");
return 0;
}
}
int dequeue(seqqueue &q,int &e) //数据元素出队列,出队列元素暂存储于e中
{
if(!isemptyqueue(q))
{
e=qdata [qfront ];
qfront =(qfront +1)%MAXSIZE;
printf("出队列成功!\n");
return 1;
}
else
{
printf("出队列失败!\n");
return 0;
}
}
void main()
{
int x=0;
seqqueue qa;
Initseqqueue(qa);
isemptyqueue(qa);
dequeue(qa,x);
enqueue(qa,25);
isemptyqueue(qa);
dequeue(qa,x);
}
循环单链中尾指针执行一个命令:rear=rear->next; 不就成头指针了~
插入:
InserterList_Dul(DuLNode l,Datatype p,Datatype e)/将E元素插入到循环单链表L中的P指针所指的元素前面/
{
s=(struct DuLNode )malloc(sizeof(sturct DuLNode));/申请一个节点,让指针S指向它/
s->data=e; /将S送入新节点/
s->next=p;/使新节点的后继指针指向P/
s->prior=p->prior;/使新节点的前驱指针指向P的前驱指针/
p->prior->next=s;/使P的前驱节点的后继指针指向新节点/
p->prior=s;/使P的前驱指针指向新节点/
}
删除:
DeleteList_Dul(DulNOde l,DuLnode p) /删除循环单链表L中P指针所指的元素/
{
p->prior->next=p->next;/使P的前驱节点的后继指针指向P的后继节点/
p->next->prior=p->prior;/使P的后继节点的前向指针指向P的前驱节点/
free(p);/释放P所指被删除的节点/
}
以上就是关于循环队列的遍历问题全部的内容,包括:循环队列的遍历问题、怎么让数据库存放命令队列、循环队列中最多能够存储多少队列元素等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)