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
  • 相关阅读:
    终于,我还是对自己的博客下手了
    对字典进行排序
    小米官网的css3导航菜单
    背景色渐变
    处理手机上点击链接出现的蓝色边框
    如何修改HTML5 input placeholder 颜色
    自定义浏览器滚动条样式
    两行文字,固定宽高,超出部分以三点隐藏
    css3控制div上下跳动-效果图
    css3控制div上下跳动
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/5379552.html
Copyright © 2011-2022 走看看