编写一个完整的程序,实现队列的基本操作。 1.采用顺序存储实现循环队列的初始化、入队、出队、取队头元素操作。 2.采用链式存储(有头结点)实现队列的初始化、入队、出队、取队头元素操作。 3.在主函数中
时间: 2024-10-26 09:17:36 浏览: 42
当然,我可以为你分别解释如何用顺序存储(数组)和链式存储(链表)来实现队列。
**1. 使用顺序存储(循环队列)实现:**
```c++
#include <iostream>
#define MAX_SIZE 10
class CircularQueue {
private:
int front, rear, size;
int arr[MAX_SIZE];
public:
CircularQueue() : front(-1), rear(-1), size(0) {}
bool isEmpty() const { return front == -1; }
bool isFull() const { return (rear + 1) % MAX_SIZE == front; }
void enqueue(int value) {
if (isFull()) {
std::cout << "Queue is full." << std::endl;
return;
}
if (isEmpty()) front = rear = 0;
else rear = (rear + 1) % MAX_SIZE;
arr[rear] = value;
size++;
}
int dequeue() {
if (isEmpty()) {
std::cout << "Queue is empty." << std::endl;
return -1;
}
int value = arr[front];
if (front == rear) front = rear = -1;
else front = (front + 1) % MAX_SIZE;
size--;
return value;
}
int getFront() const {
if (isEmpty()) return -1;
return arr[front];
}
};
int main() {
CircularQueue queue;
// 入队操作...
queue.enqueue(1);
// 出队操作...
int head = queue.dequeue();
// 取队头元素操作...
int frontVal = queue.getFront();
return 0;
}
```
**2. 使用链式存储(链表)实现:**
```cpp
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
class Queue {
private:
Node* front, *rear;
public:
Queue() : front(nullptr), rear(nullptr) {}
// ...其他操作同上,这里省略链表节点的插入和删除函数...
void enqueue(int value) {
Node* newNode = new Node(value);
if (rear == nullptr) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
}
int dequeue() {
if (front == nullptr) {
cout << "Queue is empty." << endl;
return -1;
}
int value = front->data;
Node* temp = front;
front = front->next;
delete temp;
if (front == nullptr) rear = nullptr;
return value;
}
// ...获取队头元素同上,这里也省略了...
};
int main() {
Queue queue;
// ...入队、出队、取队头操作同上...
return 0;
}
```
阅读全文