首页天道酬勤循环队列c++,c语言数据结构顺序表

循环队列c++,c语言数据结构顺序表

张世龙 05-06 11:37 55次浏览

文章目录一、队列二、代码一、头文件和宏定义二、循环队列定义和主操作三、主函数(测试函数)三、执行结果

另一方面,矩阵为了充分利用向量空间,克服“假溢出”现象的方法是将向量空间视为首尾一致的圆环,将该向量称为循环向量。 存储在其中的队列称为Circular Queue。 循环队列将顺序队列成功地连接起来,并将存储队列元素的表在逻辑上视为一个循环,作为循环队列。

循环列和普通列不同。 需要注意的是队伍排得很满

有多种处理方法可以区分团队是空的还是满的(这里选择的是第一种)。

方式1 )牺牲一个单元区分团队空缺和满员,约定入队时不使用一个队列单元,即“团队头指针在团队最后一个指针的下一个位置标记为满员”

方式2 )增设表示队列要素个数的数据成员size。 在这种情况下,队列空闲时和满时都有front==rear。

方式3 :增设tag数据成员,区分团队是满是空

二、代码1 .头文件和宏定义# include stdio.h # include stdlib.h # define true1# define false0# define maxsize 50 # definequeueueleleles //头int rear; //尾}SeqQueue;//初始化语音队列(seq队列* q ) ) {Q-front=Q-rear=0; //队列为空的intisempty(seqqueueq ) if ) q.front==q.rear ) {return TRUE; }else {return FALSE; }//intenterqueue(seqqueue*q,QueueElemType x ) if ) ) q-rear1) % MAXSIZE==Q-front ) /队列已满} else q-rear=(q-rear1) % MAXSIZE; //重置末尾的返回真; }//intdeletequeue(seqqueue*q,QueueElemType* x ) if ) q-front==q-rear ) /队列为空返回假; }else {*x=Q-elem[Q-front]; q-front=(q-front1) % MAXSIZE; 返回真; //要求团队长度的intlenqueue(seqqueueq ) return ) ).rearmaxsize-q.front ) % MAXSIZE ); //输出团队元素intprintqueue(seqqueueq ) if ) q.front==q.rear )//队列为空的返回假; }while(true ) if ) q.rear==q.front ) {return TRUE; }else{printf('%c ',Q.elem[Q.front ] ); }}3.主函数(测试函数) int main ) ) {SeqQueue Q; int i,n,flag,len; 队列元素类型x; //初始化循环队列initqueue(q )//确定队列是否为空printf ('当前队列是否为空:'); flag=isempty(q; if (标志) {打印}当前队列为空。 \n '; }else {printf '当前队列不为空。 \n '; //入队printf ('请输入入队数。 (n ); scanf('%d ',n ); getchar (; 请输入printf ('元素。 \n ); for(I=0; i n; I () {x=getchar ); getchar (; flag=enterqueue(q,x ); if (! flag ) {printf ('当前队列已满! \n '; 布雷克; (//出队printf ) )对于一个要素(出队(n ) ); flag=删除队列(q,x ); if(flag ) ) printf ) ' %c\n ',x ); }else {printf ('队列为空! \n '; //当前队列元素的数量Len=Lenqueue(q; printf ('当前队列元素数: %d\n ',len ); //入队printf ('请输入入队数(n ); scanf('%d ',n ); getchar (; 请输入printf ('元素。 \n ); for(I=0; i n; I () {x=getchar ); getchar (; flag=enterqueue(q,x ); if (! flag ) {printf ('当前队列已满! \n '; 布雷克; }//当前队列元素的数量len=lenqueue(q ); printf ('当前队列元素数: %d\n ',len ); //所有元素均为printf (所有元素退出团队(\n ) ); wile (真) ) flag=删除队列) q,x ); if (! flag () {break; }else{printf('%c ',x ); }printf () (n ); //确定队列是否为空的printf ('当前队列是否为空:'); flag=isempty(q; if (标志) {打印}当前队列为空。 \n '; }else {printf '当前队列不为空。 \n '; }返回0; (三)运行结果

循环队列是队列的一种,循环队列图示