zoukankan      html  css  js  c++  java
  • [C++] 习题 2.15 实现简单环形队列

    设计一个环形队列,用front和rear分别作为队头和队尾指针,另外用一个tag表示队列是空 ( 0 ) 还是不空 ( 1 ),这样就可以用front==rear作为队满的条件。要求设计队列的相关基本运算算法。

    前置技能

    环形队列

    队列中进出时需要大量前移后移操作,除了链式队列,使用环形队列挪动下标也是一个不错的选择。队列的数据类型定义参考书第45页。

    环形队列

    具体实现

    原理很简单,实现的时候要注意判断tag在数入队、出队时,是否要转换真假值。另外清除队列时只需要把头尾相对,队列标空。

    #include<iostream>
    
    template<class T>
    class queue{
    	private:
    		int maxsize;
    		int front;
    		int rear;
    		bool tag;
    		T *data;
    	public:
    		queue(int size){
    			maxsize = size;
    			front = 0;
    			rear = 0;
    			tag = false;
    			data = new T [size];
    		}
    		~queue(){
    			delete data;
    		}
    		void clear(){            //清除
    			rear = front;
    			tag = false;
    		}
    	    bool enqueue (T tmp){    //入队
    	    	if(full()){
    	    		return false;
    	    	}
    	    	else{
    		    	if(empty()){
                        tag = true;
    		    	}
    		    	data[rear] = tmp;
    		    	rear = (rear+1) % maxsize;
    		    	return true;
    	    	}
    	    }
    	    bool dequeue (T &tmp){   //出队
    	    	if(empty()){
    	    		return false;
    	    	}
    	    	else{
    		    	tmp = data[front];
    		    	front = (front+1) % maxsize;
    		    	if(front == rear){
    		    		tag = false;
    		    	}
    	    		return true;
    	    	}
    	    }
    	    bool getfront (T &tmp){
    	    	if(empty()){
    	    		return false;
    	    	}
    	    	else {
    	    		tmp = data[front];
    	    		return true;
    	    	}
    	    }
    		bool empty(){
    			if (rear == front && tag == false){
    				return true;
    			}
    			else{
    				return false;
    			}
    		}
    		bool full(){
    			if (rear == front && tag == true){
    				return true;
    			}
    			else{
    				return false;
    			}
    		}
    };
    
  • 相关阅读:
    解析ASP.NET Mvc开发之删除修改数据
    JavaScript module pattern精髓
    Remote验证及其改进(附源码)
    图模型的精确推理
    C#在泛型类中,通过表达式树构造lambda表达式
    类管理指针成员
    朴素贝页斯分类法
    使用Repository模式构建数据库访问层
    利用MVC的过滤器实现url的参数加密和解密
    在多线程中使用静态方法是否有线程安全问题
  • 原文地址:https://www.cnblogs.com/winng/p/algorithm_circle_queue.html
Copyright © 2011-2022 走看看