循环队列的遍历问题

循环队列的遍历问题,第1张

/我记得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所指被删除的节点/

}

以上就是关于循环队列的遍历问题全部的内容,包括:循环队列的遍历问题、怎么让数据库存放命令队列、循环队列中最多能够存储多少队列元素等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9807916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存