• 循环队列


    问题:主要是队列为空和满的条件.

             为空:cqueue->front==cqueue->rear  为满(cqueue->rear+1)==cqueue->front

    代码:

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    #define MAXSIZE 20
    typedef struct CQueue
    {
    	int front;
    	int rear;
    	int data[MAXSIZE];
    }*CirQueue;
    
    void initCQueue(CirQueue &cqueue)
    {
    	cqueue=(CirQueue)malloc(sizeof(struct CQueue));
    	if(!cqueue)
    	{
    		cout<<"allocate fail"<<endl;
    		exit(-1);
    	}
    	else
    	{
    		cqueue->front=cqueue->rear=0;
    	}
    }
    
    void enCQueue(CirQueue cqueue,int elem)
    {
    	if((cqueue->rear+1)%MAXSIZE==cqueue->front)
    	{
    		cout<<"循环队列已满"<<endl;
    		exit(0);
    	}
    	else
    	{
    		cqueue->data[cqueue->rear%MAXSIZE]=elem;
    		cqueue->rear++;
    	}
    }
    
    int deCQueue(CirQueue cqueue)
    {
    	int elem;
    	if(cqueue->front==cqueue->rear)
    	{
    		cout<<"队列已空"<<endl;
    		exit(0);
    	}
    	else
    	{
    		elem=cqueue->data[cqueue->front%MAXSIZE];
    		cqueue->front++;
    	}
    	return elem;
    }
    
    int main()
    {
    	CirQueue cqueue;
    	int arr[]={1,2,3,4,5,6,7,9,0};
    
    	initCQueue(cqueue);
    
    	cout<<"循环队列入队:1 2 3 4 5 6 7 9 0:"<<endl;  
    	for(int i=0;i<9;i++)
    	{
    		enCQueue(cqueue,arr[i]);
    	}
    
    	cout<<"循环队列出队:"<<endl;
    	while(cqueue->front!=cqueue->rear)
    	{
    	    cout<<deCQueue(cqueue)<<"  ";
    	}
    	cout<<endl;
    	return 0;
    }
    

    运行结果:

  • 相关阅读:
    拓扑排序笔记
    最小生成树——垃圾佬抓宠物
    次小生成树
    关于 海平面上升 与 fold的毒瘤题(easy) 的思考
    看正月点灯笼老师的笔记—01背包
    欧拉图的判定欧拉路的求法
    离散实验——关系闭包运算
    Floyd 求最短路
    离散实验——二元关系及其性质
    最小生成树
  • 原文地址:https://www.cnblogs.com/xshang/p/3033975.html
Copyright © 2020-2023  润新知