队列的基本操作代码实现
时间: 2023-09-11 15:07:25 浏览: 113
c代码-队列操作练习
队列是一种先进先出(FIFO)的数据结构,常见的操作包括入队(enqueue)、出队(dequeue)、获取队头元素(get_front)和获取队列长度(get_size)。
以下是基于数组实现的队列基本操作代码:
```c++
#include <iostream>
using namespace std;
const int MAX_SIZE = 100;
class Queue {
private:
int data[MAX_SIZE];
int front, rear;
public:
Queue() : front(0), rear(0) {}
bool is_empty() {
return front == rear;
}
bool is_full() {
return (rear + 1) % MAX_SIZE == front;
}
void enqueue(int x) {
if (is_full()) {
cout << "Queue overflow" << endl;
return;
}
data[rear] = x;
rear = (rear + 1) % MAX_SIZE;
}
void dequeue() {
if (is_empty()) {
cout << "Queue underflow" << endl;
return;
}
front = (front + 1) % MAX_SIZE;
}
int get_front() {
if (is_empty()) {
cout << "Queue is empty" << endl;
return -1;
}
return data[front];
}
int get_size() {
return (rear - front + MAX_SIZE) % MAX_SIZE;
}
};
int main() {
Queue q;
cout << q.is_empty() << endl; // 1
q.enqueue(1);
q.enqueue(2);
cout << q.get_front() << endl; // 1
cout << q.get_size() << endl; // 2
q.dequeue();
cout << q.get_front() << endl; // 2
cout << q.get_size() << endl; // 1
return 0;
}
```
以上代码中,我们用 `data` 数组存储队列元素,用 `front` 和 `rear` 两个下标分别指向队头和队尾。注意,为了避免数组越界,我们需要使用取模操作来实现循环队列。
在 `enqueue` 操作中,我们首先检查队列是否已满,如果已满则输出错误信息;否则,将元素插入到队尾,并将 `rear` 指针向后移动一位。
在 `dequeue` 操作中,我们首先检查队列是否为空,如果为空则输出错误信息;否则,将 `front` 指针向后移动一位,表示队头元素已经出队。
在 `get_front` 操作中,我们首先检查队列是否为空,如果为空则输出错误信息;否则,返回队头元素。
在 `get_size` 操作中,我们直接计算队列长度,即 `(rear - front + MAX_SIZE) % MAX_SIZE`。注意,由于队列是循环的,因此可能存在 `rear < front` 的情况,需要加上 `MAX_SIZE` 来保证计算结果非负。
阅读全文