• 循环队列


    /* 1.初始化
      2.进队列
      3.出队列
      4.读取队列
      5.判断队列是否为空
      6.判断队列是否已满
      7.求队列长度 
    */
    
    #include<stdio.h>
    #define maxsize 5
    typedef struct {
    	int data[maxsize];
    	int front,rear;
    }CircQueue;
    
    //循环队列的初始化,令对头队尾指针归零 
    void InitQueue(CircQueue &L){
    	L.rear=L.front=0; 
    } 
    
    //进队列
    void EnQueue(CircQueue &L,int x){
    	if((L.rear+1)%maxsize==L.front){
    		printf("循环队列已满!不能再输入数据!
    ");
    		return; 
    	}
        L.data[L.rear]=x;
        L.rear=(L.rear+1)%maxsize;	
        return;
    	}
    	
    //出队列
    void DeQueue(CircQueue &L){
    	if(L.rear==L.front){
    		printf("循环队列为空!");
    		return;
    	}
    	printf("%d",L.data[L.front]);
    	L.front=(L.front+1)%maxsize;
    	return; 
    }
    
    //读取对头元素
    void GetFront(CircQueue &L){
    	int x;
    	if(L.rear==L.front){
    		printf("循环队列为空,不存在对头元素!");
    		return;
    	}
    	x=L.data[L.front];
    	printf("对头元素为:%d
    ",x);
    	return; 
    }
    
    //半段队列是否为空
    void QueueEmpty(CircQueue &L){
    	if(L.rear==L.front){
    		printf("循环队列为空!");
    		return;
    	}
    }	
    
    //半段队列是否已满
    void QueueFull(CircQueue &L){
    	if((L.rear+1)%maxsize==L.front){
    		printf("循环队列已满!");
    		return;
    	}
    } 
    
    //求队列长度
    int QueueSize(CircQueue &L){
    	int count;
    	count=(L.rear-L.front+maxsize)%maxsize;
    	//printf("循环队列的长度为:",count);
    	return count;
    } 
    
    //删除对头元素
    void DeQueue1(CircQueue &L){
    	if(L.rear==L.front){
    		return;
    	}
    	L.front=(L.front+1)%maxsize;
    	printf("删除对头元素后的对头元素为:%d
    ",L.data[L.front]);
    	return;
    } 
    
    //主函数
    int main(){
    	int i,n,x,k;
    	CircQueue L;
    	InitQueue(L);
    	printf("请约定一个结束进队的数:");
    	scanf("%d",&n);
    	for(i=0;i<maxsize;i++){
    		printf("请输入数据:");
    		scanf("%d",&x);	
    		if(x==n){
    			break;
    		}
    	    EnQueue(L,x);
    		if(L.rear==maxsize-1){
    			break;
    		}	
    	}	
    	GetFront(L); 
    	DeQueue1(L);
    	k=QueueSize(L);
    	printf("循环队列长度为:%d
    ",k);
    	
    	printf("出对!
    ");
    	for(i=0;i<k;i++){
    		DeQueue(L);	
    	}
    
    	return 0;
    } 
    	
    	
    

      

     

  • 相关阅读:
    线程池优化之充分利用线程池资源
    Spring异步调用原理及SpringAop拦截器链原理
    使用pdfBox实现pdf转图片,解决中文方块乱码等问题
    Spring BPP中优雅的创建动态代理Bean
    转载:ThreadPoolExecutor 源码阅读
    Springboot定时任务原理及如何动态创建定时任务
    SpringSecurity整合JWT
    SpringMvc接口中转设计(策略+模板方法)
    HashMap 源码阅读
    支付宝敏感信息解密
  • 原文地址:https://www.cnblogs.com/lusilin/p/10871620.html
Copyright © 2020-2023  润新知