1。循环队列中判断队空的方法是判断前==后,队满的方法是判断面前=(后+ 1)%最大尺寸。(我曾经想过为什么不用一个长度表示队长,当长度==最大容量时队满)原因就是,在频繁的队列操作中,多出一个变量会大量的增加执行时间,所以不如浪费一个数组空间来得划算。
2。用单链表表示的链式队列特别适合于数据元素变动较大的情形,而且不存在溢出的情况。
template<类T> 类SeqQueue { 保护: T *元素; int,后方; int最大容量; 公众: SeqQueue (int深圳=10){ 前=后=0; 最大尺寸=深圳; 元素=new T(最大尺寸); } ~ SeqQueue () { []删除元素; } bool排队(const T&x){//入队 如果(isFull()返回false; 元素(后方)=x; 后=(后+ 1)%最大容量; 返回true; } bool出列(T&x){//出队 如果(isEmpty()返回false; x=元素(前); 前面=(前+ 1)%最大容量; 返回true; } bool getFront (T&x){//获取队首元素 如果(isEmpty()返回false; x=元素(前); 返回true; } 空白makeEmpty(){//队列置空 前=后=0; } bool isEmpty () const{//判断队列是否为空 返回(后==前)& # 63;事实:假; } bool isFull () const{//队列是否为满 返回((后+ 1)%最大尺寸==前)& # 63;事实:假; } const int getSize () { 返回(rear-front +最大尺寸)%最大容量; }};
<强>测试代码如下:强>
无效的菜单(){ cout<& lt;“1。入队”& lt; & lt; endl; cout<& lt;“2。获取队首元素”& lt; & lt; endl; cout<& lt;“3。出队”& lt; & lt; endl; cout<& lt;“4队。列置空”& lt; & lt; endl; cout<& lt;“5。获取队中元素数量”& lt; & lt; endl; cout<& lt;“6。退出“& lt; & lt; endl; } void函数(int num SeqQueue*平方){ 开关(num) { int x; 案例1: ,cin>的在x; 平方→排队(x); 打破; 案例2: 平方→getFront (x); cout<& lt; x<& lt; endl; 打破; 案例3: 平方→出列(x); 打破; 案例4: 平方→makeEmpty (); 打破; 例5: x=平方→getSize (); cout<& lt; x<& lt; endl; 打破; 默认值: 退出(1); } } int主要(int命令行参数个数,char * * argv) { SeqQueue *平方=new SeqQueue ; int num; 而(真){ 菜单(); ,cin>的在num; 函数(num,平方); } 删除平方; 返回0; }
# include & lt; iostream> 使用名称空间性病; template<类T> struct LinkNode { T数据; LinkNode*链接; LinkNode (T&x, LinkNode * l=NULL) { 数据=https://www.yisu.com/zixun/x; 链接=l; } }; 模板类T> <类LinkedQueue { 保护: LinkNode *, *后; 公众: LinkedQueue () { 前面=后方=零; } ~ LinkedQueue () { makeEmpty (); } bool排队(t x) { 如果(前面==NULL) 前=后=new LinkNode (x); 其他{ 后==new LinkNode后->联系 (x); } 返回true; } bool出列(t x) { 如果(isEmpty()返回false; LinkNode * p=前面; x=前->数据; 前面=前->链接; 删除p; 返回true; } bool getFront (t x) const { 如果(isEmpty()返回false; x=前->数据; 返回true; } 空白makeEmpty () { LinkNode * p; 而(前面!=NULL) { p=前线; 前面=前->链接; 删除p; } } const bool isEmpty () { 返回(前面==NULL) ?真:假; } const int getSize () { LinkNode * p; int数=0; p=前线; 而(p !=NULL) { 数+ +; p=p ->联系; } 返回计数; } }; 无效的菜单(){ cout <" 1。入队”& lt; & lt; endl; cout<& lt;“2。获取队首元素”& lt; & lt; endl; cout<& lt;“3。出队”& lt; & lt; endl; cout<& lt;“4队。列置空”& lt; & lt; endl; cout<& lt;“5。获取队中元素数量”& lt; & lt; endl; cout<& lt;“6。退出“& lt; & lt; endl; } void函数(int num LinkedQueue * lq) { 开关(num) { int x; 案例1: ,cin>的在x; lq→排队(x); 打破; 案例2: lq→getFront (x); cout c++实现循环队列和链式队列的示例