zoukankan      html  css  js  c++  java
  • 数据结构之队列(三)——循环队列

    循环队列采用顺序存储的方式(数组),基本思想是通过一个数组存储数据,两个下标front和rear分别指向队头和队尾

    由于假溢出现象:采用循环队列,又由于循环队列无法判断队列是空还是满,所以采用损失一个元素为空的代价来分别队列为空还是为满

    与链队列不同的是:

    循环队列的队头指针(下标)不是指向什么头结点,而是直接指向当前队头的元素

    循环队列的队尾指针(下标)不是指向最后一个元素,而是指向最后一个元素的下一个下标

    当循环队列为空的时候,队尾和队头下标均指向啊a[0]

    循环队列的定义

    一个数组存放数据,两个下标分别存放队头和队尾下标

    typedef char DataType;
    typedef struct Queue{
    	DataType elem[MAXSIZE];
    	int front;
    	int rear;
    }SeqQueue;
    

    循环队列的初始化

    队头下标和队尾下标均初始化为0

    InitQueue(SeqQueue* Q)
    {
    	Q->front=0;
    	Q->rear=0;	
    }
    

      

    入队操作

    先判断是否已满:条件:(Q->rear+1)%MAXSIZE==Q->front

    以上为牺牲一个空间的例子

    bool EnterQueue(SeqQueue* Q,DataType x)
    {
    	if((Q->rear+1)%MAXSIZE==Q->front)
    	{
    		return false;
    	}
    	else
    	{
    		Q->elem[Q->rear]=x;
    		Q->rear=(Q->rear+1)%MAXSIZE;
    		return true;
    	}
    }
    

      

    出对操作

    先判断是否为空:条件:Q->front==Q->rear

    bool DeleteQueue(SeqQueue* Q,DataType* x)
    {
    	if(Q->front==Q->rear)
    	{
    		return false;
    	}
    	else
    	{
    		*x=Q->elem[Q->front];
    		Q->front=(Q->front+1)%MAXSIZE;
    		return true;
    	}
    }
    

      

    亲爱的听众朋友我是你的代班DJ
  • 相关阅读:
    南阳1071
    hdu5110 dp
    hdu1199 线段树
    hdu5107 线段树
    hdu5106 数位dp
    hdu 5103 状态压缩dp
    C Strange Sorting
    hdu5102 枚举每条边的长度
    uva672
    uva473
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/5379552.html
Copyright © 2011-2022 走看看