首页 > 编程语言 >循环队列的定义、入队、出队等操作 C++代码实现

循环队列的定义、入队、出队等操作 C++代码实现

时间:2023-08-27 11:36:10浏览次数:44  
标签:int C++ 队列 入队 出队 circlQueue front queueSize rear



#include <iostream>
using namespace std;
 
/*循环队列的类型定义*/
const int Queue_Size=100;
 
typedef struct circlQueue
{
       char *elem;
       int rear;
       int front;
       int queueSize;
}circlQueue;
 
 
 
/*初始化*/
void initQueue_C(circlQueue &Q)
{
       Q.elem=new char[Queue_Size];
       Q.front=Q.rear=0;//首尾指针相等说明队列为空。
       Q.queueSize=Queue_Size;
}
 
 
 
/*销毁队列*/
void destroyQueue_C(circlQueue &Q)
{
       delete []Q.elem;
       Q.front=Q.rear=0;
       Q.queueSize=0;
}
 
 
 
 /*求队列的长度*/
int  lengthQueue_C(circlQueue &Q)
{
       int length;
       length=(Q.rear-Q.front+Q.queueSize)%Q.queueSize;/*一般情况下,rear在front的上方,此种算法是用于
  rear已到front的下方,即已出现假溢出的情况。*/
       return length;
}
 
 
/*入队列*/
void enterQueue_C(circlQueue &Q,char x)
{
       if(((Q.rear+1)%Q.queueSize)==Q.front)//判断栈满的情况
              cout<<"Queue OverFlow!";
       Q.elem[Q.rear]=x;
       Q.rear=(Q.rear+1)%Queue_Size;//尾指针应以此种方式加1,才会实现循环队列。
}
 
/*出队列*/
char outputQueue_C(circlQueue &Q)
{
       char e;
       if(Q.rear==Q.front)
              cout<<"Queue Empty";
       e=Q.elem[Q.front];
       Q.front=(Q.front+1)%Q.queueSize;;//头指针应以此种方式加1,才会实现循环队列。
       return e;
}
 
void main()
{
       circlQueue Q;
       initQueue_C(Q);
       enterQueue_C(Q,'a');
       enterQueue_C(Q,'b');
       enterQueue_C(Q,'c');
       cout<<outputQueue_C(Q)<<endl;
       cout<<outputQueue_C(Q)<<endl;
       destroyQueue_C(Q);
}





循环队列解决了队列“假溢出”的情况。



标签:int,C++,队列,入队,出队,circlQueue,front,queueSize,rear
From: https://blog.51cto.com/u_5173797/7251986

相关文章

  • 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
     #include<iostream>usingnamespacestd;/*顺序栈的定义*/#defineStack_Size100typedefstructsqStack{char*elem;inttop;intstackSize;//栈数组长度}sqStack;/*顺序栈的初始化*/voidinitStack_Sq(sqStack&S){S.elem=ne......
  • 用线性表实现的通讯录管理 C++代码
    /****************************************//*主控菜单处理测试程序main2.c************//***************************************/#include<iostream>#include<string>usingnamespacestd;#defineLIST_INIT_SIZE100#defineLISTINCREMENT10intOK=......
  • 用单链表实现一元多项式相加 C++代码
     #include<iostream>usingnamespacestd;/*结点的定义*/typedefstructLNode{floatcoef;intexp;structLNode*next;}LNode;typedefLNode*Polynomial;/*多项式的初始化*/voidinitDuoX(Polynomial&Px){Px=newLNode;......
  • 双链表的定义、初始化、插入、删除,C++代码实现的算法
    #include<iostream>usingnamespacestd;/*双向链表类型定义*/typedefstructduNode{chardata;structduNode*prior;structduNode*next;}duNode;typedefduNode*duLinklist;//指针类型,故访问它的成员用“->”。/*初始化双向链表*/voidinitLinkl......
  • 链队列的实现,C++代码实现
    /*链队列的实现*/#include<iostream>usingnamespacestd;/*链队列类型定义*/typedefstructQNode{structQNode*next;chardata;}QNode,*queuePtr;//结点的定义typedefstructlinkQueue{queuePtrrear;queuePtrfront;}linkQueue;//队列的定......
  • 基于QT和C++实现的停车场管理系统
    基于QT和C++实现的停车场管理系统停车场管理系统简介一、 问题描述设停车场是一个可停放若干辆辆汽车的狭多层平面区域,且只有一个大门可供汽车进出。若车场内已停满汽车,则后来的汽车只能在门外的狭长便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入。每辆停放在......
  • 力扣-2. 两数相加(C++题解)
    题目链接:https://leetcode.cn/problems/add-two-numbers/description/给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之......
  • C++11 右值引用&&、移动语义std::move、完美转发std::forward
    参考:https://blog.csdn.net/HR_Reborn/article/details/130363997 #pragmaonceclassArray{public:Array():size_(0),data_(nullptr){}Array(intsize):size_(size){data_=newint[size_];}//复制构造函数(深拷贝构造)A......
  • C++的三大特性 ,封装、继承、多态?(一)
    C++的三大特性:封装、继承、多态。一、封装:将属性和行为作为一个整体,表现生活中的事物。一般来说就是把变量和函数一起放在一个类里,此时变量叫做成员变量,函数叫做成员函数。封装的意义一:将属性和行为作为一个整体,表现生活中的事物。1#include<iostream>2usingnamespaces......
  • 力扣-228. 汇总区间(C++题解)
    题目链接:https://leetcode.cn/problems/summary-ranges/description/给定一个 无重复元素的 有序整数数组\(nums\)。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说,\(nums\)的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于\(......