• 循环队列


    #include<iostream>
    #include<vector>
    using namespace std;
    typedef int DataType;
    #define MaxSize 50
    typedef struct {   //循环队列的存储结构
    	DataType data[MaxSize];
    	int front,rear;
    }SqQueue;
    
    /*
    	循环队列的注意事项
    	公共的:
    		队列的初始状态:Q.front=Q.rear=0
    		入队操作:Q.data[Q.rear]=x;Q.rear=(Q.rear+1)%MaxSize;
    		出队操作:x=Q.data[Q.front];Q.front=(Q.front+1)%MaxSize;
    	1.循环队列的队列满和队列空的条件一样  所以要采取特殊方法区分
    		1.牺牲一个存储单元来区分队满和队空    常用
    			队满条件:(Q.rear+1)%MaxSize==Q.front
    			队空条件:Q.rear==Q.front;
    	2.类型中增设一个表示元素个数的数据成员
    		typedef struct{
    			DataType data[MaxSize];
    			int front,rear;
    			int size; //表示队列中数据元素个数
    		}
    		队满条件:Q.size==MaxSize;
    		队空条件:Q.size==0;
    	3.类型增设tag数据成员
    		typedef struct{
    			DataType data[MaxSize];
    			int front,rear;
    			int tag;  
    		}
    		队满条件:tag==1;若因插入导致Q.rear==Q.front; 那麽表示队列为满
    		队空条件:tag==0;若因删除导致Q.rear==Q.front; 那麽表示队列为空
    */
    
    
    //初始化循环队列
    void InitQueue(SqQueue &Q){
    	Q.front=Q.rear=0;
    } 
    //判队空
    bool isEmpty(SqQueue &Q){
    	if(Q.front==Q.rear){
    		return true;
    	}else{
    		return false;
    	}
    } 
    //入队
    bool EnQueue(SqQueue &Q,DataType x){
    	if((Q.rear+1)%MaxSize==Q.front)  //队满情况  用一个空间来区分队满和队空
    	{
    		cout<<"队列已满,无法入队!"<<endl;
    		return false;
    	 } 
    	else{
    		Q.data[Q.rear]=x;  //入队
    		Q.rear=(Q.rear+1)%MaxSize;	//修改队尾指针 	
    		return true;
    	 }
    } 
    //出队
    bool DeQueue(SqQueue &Q,DataType &x){
    	if(Q.rear==Q.front){
    		cout<<"循环队列为空,无法进行出队操作!"<<endl;
    		return false;
    	}
    	else{
    		x=Q.data[Q.front];
    		Q.front=(Q.front+1)%MaxSize;
    		return true;
    	}
    } 
    
    int main(){
    	SqQueue Q;
    	InitQueue(Q);
    	if(isEmpty(Q)){
    		cout<<"队列为空!"<<endl;
    	}else{
    		cout<<"队列非空!"<<endl;
    	}
    	EnQueue(Q,100);
    	EnQueue(Q,200);
    	DataType x;
    	DeQueue(Q,x);
    	cout<<x<<endl;
    	DeQueue(Q,x);
    	cout<<x<<endl;
    	if(isEmpty(Q)){
    		cout<<"队列为空!"<<endl;
    	}else{
    		cout<<"队列非空!"<<endl;
    	}
    	return 0;
    } 
    

      

  • 相关阅读:
    SqlServer2005自动备份
    在Win7下运行使用BDE的程序
    Hibernate连接SqlServer时的小问题
    使用Delphi在SqlServer中对日期的设置
    Flex中连接J2ee的一个小问题
    np使用创建图像 霍夫圆检测 video操作,显示canny边缘
    Web.config的配置
    SQL 进制间如何转换
    jQuery 设置和获取HTML,文本和值
    通过LINQ to XML生成 XML
  • 原文地址:https://www.cnblogs.com/nanfengnan/p/14402711.html
Copyright © 2020-2023  润新知