当前位置:实例文章 » JAVA Web实例» [文章]C++-stack 和 queue

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++ 中栈和队列的实现,包括基本操作、成员变量和函数,以及使用示例代码。

相关标签:c++java开发语言
其他信息

其他资源

Top