zoukankan      html  css  js  c++  java
  • 循环队列

    #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;
    } 
    

      

  • 相关阅读:
    密码控件安全技术浅析及攻击实例
    一个QQ木马的逆向分析浅谈(附带源码)
    菜鸟开始学习SSDT HOOK((附带源码)
    leetcode229
    leetcode1401
    leetcode1400
    leetcode1399
    leetcode228
    leetcode223
    leetcode222
  • 原文地址:https://www.cnblogs.com/nanfengnan/p/14402711.html
Copyright © 2011-2022 走看看