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

#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);
}


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


  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
循环队列是一种常用的队列实现方式,相比于普通队列,它可以更好地利用数组空间。循环队列中,队首和队尾指针都可以循环移动,从而实现循环队列的效果。 下面是 C++ 实现循环队列入队出队和打印队列中所有元素的示例代码: ```c++ #include <iostream> using namespace std; const int N = 100; // 定义一个循环队列结构体 struct CircularQueue { int data[N]; int front, rear; // 队首和队尾指针 CircularQueue() : front(0), rear(0) {} // 判断队列是否为空 bool isEmpty() { return front == rear; } // 判断队列是否已满 bool isFull() { return (rear + 1) % N == front; } // 入队操作 bool enqueue(int x) { if (isFull()) return false; data[rear] = x; rear = (rear + 1) % N; return true; } // 出队操作 bool dequeue() { if (isEmpty()) return false; front = (front + 1) % N; return true; } // 打印队列中的所有元素 void printQueue() { int i = front; while (i != rear) { cout << data[i] << " "; i = (i + 1) % N; } cout << endl; } }; int main() { CircularQueue q; // 入队操作 q.enqueue(1); q.enqueue(2); q.enqueue(3); // 打印队列中的所有元素 q.printQueue(); // 出队操作 q.dequeue(); // 打印队列中的所有元素 q.printQueue(); return 0; } ``` 在这个示例中,我们定义了一个循环队列的结构体 `CircularQueue`,其中包含了队列的数据和队首、队尾指针。在入队操作中,我们首先判断队列是否已满,如果未满,则将元素插入队尾,并将队尾指针后移一位。在出队操作中,我们首先判断队列是否为空,如果不为空,则将队首指针后移一位。在打印队列中的所有元素时,我们使用一个循环变量 `i`,从队首开始遍历队列,直到遍历到队尾为止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值