赞
踩
为了一位同学作此篇
在数据结构和算法中,队列(Queue)是一种非常重要的数据结构。它遵循“先进先出”(FIFO,First In First Out)的原则,即最先进入队列的元素将最先被移除。队列在计算机科学中有广泛的应用,如任务调度、打印任务管理、数据包处理等。
举个简单的例子,日常生活中排队就是一种队列。先进入队列的人将先进行操作然后离开队列。
在C++标准库中,头文件为我们提供了队列的实现。本文将详细介绍C++标准库中的队列,并通过示例来演示其使用方法。
C++标准库中的std::queue是一个容器适配器,它提供了一个队列的数据结构。std::queue的成员函数主要包括:
push(const value_type& val): 在队尾插入一个元素。
pop(): 移除队头的元素。
front(): 返回队头的元素(但不会移除)。
back(): 返回队尾的元素(但不会移除)。
size(): 返回队列中的元素个数。
empty(): 检查队列是否为空。
三、队列的基本操作示例
下面是一个简单的C++程序,演示了如何使用std::queue进行基本操作:
#include <iostream> #include <queue> int main() { // 创建一个int类型的队列 std::queue<int> q; //也可以写queue<int> q; // 向队列中添加元素 q.push(1); q.push(2); q.push(3); // 输出队列的大小 std::cout << "Size of queue: " << q.size() << std::endl; // 检查队列是否为空 std::cout << "Is queue empty? " << (q.empty() ? "Yes" : "No") << std::endl; // 访问队头和队尾的元素 std::cout << "Front element: " << q.front() << std::endl; std::cout << "Back element: " << q.back() << std::endl; // 移除队头的元素 q.pop(); // 再次访问队头的元素 std::cout << "Front element after pop: " << q.front() << std::endl; return 0; }
#include <iostream> using namespace std; // 定义队列节点 struct Node { int data; Node* next; }; // 定义队列 class Queue { private: Node* front; Node* rear; public: // 构造函数 Queue() { front = rear = nullptr; } // 判断队列是否为空 bool isEmpty() { return front == nullptr; } // 入队操作 void enqueue(int value) { Node* newNode = new Node; newNode->data = value; newNode->next = nullptr; if (isEmpty()) { front = rear = newNode; return; } rear->next = newNode; rear = newNode; } // 出队操作 int dequeue() { if (isEmpty()) { cout << "Queue is empty!" << endl; return -1; } Node* temp = front; int value = front->data; front = front->next; if (front == nullptr) { rear = nullptr; } delete temp; return value; } // 显示队列元素 void display() { Node* temp = front; cout << "Queue elements: "; while (temp != nullptr) { cout << temp->data << " "; temp = temp->next; } cout << endl; } }; int main() { Queue q; q.enqueue(10); q.enqueue(20); q.enqueue(30); q.display(); cout << "Dequeue element: " << q.dequeue() << endl; q.display(); return 0; }
#include <iostream> using namespace std; // 定义队列节点 struct Node { int data; Node* next; }; // 定义队列 class Queue { private: Node* front; Node* rear; public: // 构造函数 Queue() { front = rear = nullptr; } // 判断队列是否为空 bool isEmpty() { return front == nullptr; } // 入队操作 void enqueue(int value) { Node* newNode = new Node; newNode->data = value; newNode->next = nullptr; if (isEmpty()) { front = rear = newNode; return; } rear->next = newNode; rear = newNode; } // 出队操作 int dequeue() { if (isEmpty()) { cout << "Queue is empty!" << endl; return -1; } Node* temp = front; int value = front->data; front = front->next; if (front == nullptr) { rear = nullptr; } delete temp; return value; } // 显示队列元素 void display() { Node* temp = front; cout << "Queue elements: "; while (temp != nullptr) { cout << temp->data << " "; temp = temp->next; } cout << endl; } }; int main() { Queue q; q.enqueue(10); q.enqueue(20); q.enqueue(30); q.display(); cout << "Dequeue element: " << q.dequeue() << endl; q.display(); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。