循环队列的实现

循环队列的实现

大家好,又见面了,我是全栈君。

//头文件queue.h
#pragma once
#include<assert.h>
#include<iostream>
using namespace std;
typedef int ElemType;
#define MAX_SIZE 8
typedef struct Queue
{
   ElemType *base;
   int front;
   int rear;
   size_t capacity;
}Queue;
///////////////////////////////
void Init_queue(Queue *Q)
{
   Q->base = (ElemType *)malloc(sizeof(ElemType)*(MAX_SIZE));
   assert(Q->base != NULL);
   Q->front=Q->rear=0;
   Q->capacity = MAX_SIZE;
}

bool en_queue(Queue *Q,ElemType x)
{
	if((Q->rear+1)%MAX_SIZE == Q->front)
		return false;
	Q->base[Q->rear] = x;
    Q->rear =(Q->rear+1) % MAX_SIZE;	
   return true;
}

bool de_queue(Queue *Q)
{
  if(Q->rear == Q->front)
	 return false;
  
  Q->front = (Q->front+1)%MAX_SIZE;
   return true;
}

void show_queue(Queue *Q)
{
  if(Q->front == Q->rear)
	 return ;
  int i=Q->front;
  while(i != (Q->rear))
  {
       cout<<Q->base[i]<<"<-";
	   i = (++i)%MAX_SIZE;
  }
  cout<<"endl"<<endl;
}

 

#include"queue.h"

void main()
{
  Queue sq;
  Init_queue(&sq);
  en_queue(&sq,1);
  en_queue(&sq,2);
  en_queue(&sq,3);
  en_queue(&sq,4);
  en_queue(&sq,5);
  en_queue(&sq,6);
  en_queue(&sq,7);
  de_queue(&sq);
  en_queue(&sq,8);
  de_queue(&sq);
  en_queue(&sq,9);
  show_queue(&sq);
}

 

循环队列的实现

 

注意:循环队列有一个空间用来标记,不存储数据

 

分析:首先1,2。3,4。5,6,7入队。此时已满。

           因为1出队,所以8能够入队,又因为2出对所以9能够入队。

 出入队过程:

循环队列的实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115385.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月5日 上午9:00
下一篇 2022年2月5日 上午9:00


相关推荐

  • mysql 笛卡尔积

    mysql 笛卡尔积1、mysql笛卡尔积如图:我定义3张表(A、B、C)执行如下sql,查看执行顺序是a–>b–>c此时我改变A和C表的数据个数执行顺序变成了c–>b–>a相同的sql,由于表数量的改变造成表的执行顺序不一致的原因是:笛卡尔积2、子查询情况下,id值会不同结论:1、id值相同,从上往下顺序执行,数据少的表优先执行,大的表后执行2、id值不相同,id值越大越先执行大家有疑问可以添加qq群:789318548.

    2022年7月11日
    18
  • tomcat路径怎么找_tomcat项目路径

    tomcat路径怎么找_tomcat项目路径Maven配置覆盖内嵌tomcat虚拟映射路径

    2022年4月21日
    61
  • OpenClaw“龙虾”安装部署实践:腾讯与扣子平台的技术生态解析

    OpenClaw“龙虾”安装部署实践:腾讯与扣子平台的技术生态解析

    2026年3月13日
    2
  • Linux 时间戳获取及转换

    Linux 时间戳获取及转换include stdio h include time h intmain time tt 时间戳 structtm p time amp t 获取时间戳 p localtime amp t 将时间戳转换为本地时间 printf 时间戳 ld n t printf d d d d d d n 1900 time h stdio h

    2025年11月6日
    4
  • win10查看激活时间

    win10查看激活时间win10查看激活时间1、使用Windows+R组合快捷键打开运行命令框运行:slmgr.vbs-dlv命令可以查询到Win10的激活信息,包括:激活ID、安装ID、激活截止日期等信息。看不懂的继续往下。2、运行:slmgr.vbs-dli命令可以查询到操作系统版本、部分产品密钥、许可证状态等。3、运行:slmgr.vbs-xpr命令可以查询Win10是否永久激活…

    2022年5月30日
    52
  • TLE5012B磁编码器原理及优点,径向充磁磁铁的安装。AS5047、AS5048、AS5600、TLE5012、MA730

    TLE5012B磁编码器原理及优点,径向充磁磁铁的安装。AS5047、AS5048、AS5600、TLE5012、MA730巨磁阻 GMR 磁编码器以其独特的优点 在近两年的产品应用上十分流行 它体积小巧 安装方便 分辨率高 不受灰尘油渍影响 可非接触安装 便于与电机集成一体实现伺服控制 相较于光电编码器 GMR 磁编码器的寿命几乎无限长 没有红外二极管的光衰对寿命造成影响 另外光电编码器内部需要高精度光栅 对生产的安装精度 洁净度 器件质量有严格的要求 而磁编码器在这方面则宽松了很多 只要强磁与芯片的同心度不是太差 间隔不是太远 都能良好的输出信号 本文主要以 TLE5012B MA730 AS5047P D AS50

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号