C++-stack 和 queue
发布人:shili8
发布时间:2025-03-13 05:18
阅读次数:0
**栈和队列在 C++ 中的实现**
在计算机科学中,栈和队列是两种基本的数据结构,它们分别用于存储和管理元素的顺序。栈是一种后进先出(LIFO)的数据结构,即最后添加的元素将首先被移除,而队列则是一种先进先出(FIFO)的数据结构,即最先添加的元素将首先被移除。在本文中,我们将讨论 C++ 中栈和队列的实现。
### 栈栈是一种后进先出(LIFO)的线性数据结构。它遵循以下规则:
* 最近添加的元素将首先被移除。
* 只能在栈顶部添加或删除元素。
#### 栈的基本操作栈支持以下基本操作:
* `push(element)`: 将一个元素添加到栈顶部。
* `pop()`: 移除栈顶部的元素。
* `peek()`: 返回栈顶部的元素,但不移除它。
* `isEmpty()`: 检查栈是否为空。
#### C++ 中栈的实现我们可以使用一个类来实现栈。这个类将包含以下成员变量和函数:
cpp#include <iostream>
using namespace std;
class Stack {
private:
int *elements;
int capacity;
int topIndex;
public:
// 构造函数 Stack(int capacity) {
this->capacity = capacity;
elements = new int[capacity];
topIndex = -1; // 表示栈为空 }
// 销毁函数 ~Stack() {
delete[] elements;
}
// 添加元素到栈顶部 void push(int element) {
if (topIndex == capacity -1) {
cout << "栈已满,无法添加新元素。" << endl;
return;
}
topIndex++;
elements[topIndex] = element;
}
// 移除栈顶部的元素 int pop() {
if (topIndex == -1) {
cout << "栈为空,无法移除元素。" << endl;
return -1; // 表示错误 }
int element = elements[topIndex];
topIndex--;
return element;
}
// 返回栈顶部的元素,但不移除它 int peek() {
if (topIndex == -1) {
cout << "栈为空,无法返回元素。" << endl;
return -1; // 表示错误 }
return elements[topIndex];
}
// 检查栈是否为空 bool isEmpty() {
return topIndex == -1;
}
};
#### 栈的使用示例
cppint main() {
Stack stack(5);
// 添加元素到栈顶部 stack.push(10);
stack.push(20);
stack.push(30);
// 移除栈顶部的元素 cout << "移除的元素:" << stack.pop() << endl;
cout << "移除的元素:" << stack.pop() << endl;
// 返回栈顶部的元素,但不移除它 cout << "栈顶部的元素(不移除):" << stack.peek() << endl;
// 检查栈是否为空 if (stack.isEmpty()) {
cout << "栈已空。" << endl;
} else {
cout << "栈未空。" << endl;
}
return0;
}
### 队列队列是一种先进先出(FIFO)的线性数据结构。它遵循以下规则:
* 最先添加的元素将首先被移除。
* 只能在队列头部添加或删除元素。
#### 队列的基本操作队列支持以下基本操作:
* `enqueue(element)`: 将一个元素添加到队列尾部。
* `dequeue()`: 移除队列头部的元素。
* `peek()`: 返回队列头部的元素,但不移除它。
* `isEmpty()`: 检查队列是否为空。
#### C++ 中队列的实现我们可以使用一个类来实现队列。这个类将包含以下成员变量和函数:
cpp#include <iostream>
using namespace std;
class Queue {
private:
int *elements;
int capacity;
int frontIndex; // 队列头部索引 int rearIndex; // 队列尾部索引public:
// 构造函数 Queue(int capacity) {
this->capacity = capacity;
elements = new int[capacity];
frontIndex = -1;
rearIndex = -1; // 表示队列为空 }
// 销毁函数 ~Queue() {
delete[] elements;
}
// 添加元素到队列尾部 void enqueue(int element) {
if (rearIndex == capacity -1) {
cout << "队列已满,无法添加新元素。" << endl;
return;
}
rearIndex++;
elements[rearIndex] = element;
// 如果队列头部索引小于尾部索引,则需要移动元素 if (frontIndex == -1) {
frontIndex =0;
} else {
for (int i = frontIndex; i < rearIndex; i++) {
elements[i] = elements[i +1];
}
}
}
// 移除队列头部的元素 int dequeue() {
if (frontIndex == -1) {
cout << "队列为空,无法移除元素。" << endl;
return -1; // 表示错误 }
int element = elements[frontIndex];
frontIndex++;
return element;
}
// 返回队列头部的元素,但不移除它 int peek() {
if (frontIndex == -1) {
cout << "队列为空,无法返回元素。" << endl;
return -1; // 表示错误 }
return elements[frontIndex];
}
// 检查队列是否为空 bool isEmpty() {
return frontIndex == -1;
}
};
#### 队列的使用示例
cppint main() {
Queue queue(5);
// 添加元素到队列尾部 queue.enqueue(10);
queue.enqueue(20);
queue.enqueue(30);
// 移除队列头部的元素 cout << "移除的元素:" << queue.dequeue() << endl;
cout << "移除的元素:" << queue.dequeue() << endl;
// 返回队列头部的元素,但不移除它 cout << "队列头部的元素(不移除):" << queue.peek() << endl;
// 检查队列是否为空 if (queue.isEmpty()) {
cout << "队列已空。" << endl;
} else {
cout << "队列未空。" << endl;
}
return0;
}
在本文中,我们讨论了 C++ 中栈和队列的实现,包括基本操作、成员变量和函数,以及使用示例代码。

