用C++实现队列的程序代码

yizhihongxing

实现队列的程序代码主要涉及以下内容:数据结构、队列的操作、C++语法等。下面我们一步步来进行讲解。

数据结构

队列可以看成是一种特殊的线性表,它具有先进先出(FIFO)的特点,即先进队列的元素将先输出,后进队列的元素将后输出。

队列通常包含以下几个基本操作:入队、出队、判空和求队列长度等。入队就是将新元素插入到队列的末尾,出队就是将队头元素删除并返回,判空就是检查队列是否为空,求队列长度就是统计当前队列中元素的数量。

在C++中,可以使用STL库提供的queue模板类来实现队列。queue模板类已经封装好了队列的基本操作,因此我们只需要了解如何使用queue模板类就能够实现队列。

队列的操作

首先需要在程序中引入queue头文件:

#include <queue>

然后定义一个队列:

queue<int> q;

上述代码定义了一个名为q的队列,元素的类型为int。

接下来介绍几个队列的常用操作:

入队

使用push函数可以将新元素插入到队列的末尾:

int num = 3;
q.push(num);

上述代码将数字3插入到了队列的末尾。

出队

使用front函数可以获取队头元素,使用pop函数可以将队头元素删除:

int front_element = q.front(); // 获取队头元素
q.pop(); // 删除队头元素

上述代码获取了队头元素并将其删除。

判空

使用empty函数可以判断队列是否为空:

if (q.empty()) {
    cout << "队列为空!" << endl;
}

上述代码判断了队列是否为空。

求队列长度

使用size函数可以获取队列中元素的数量:

int queue_size = q.size(); // 获取队列中元素的数量

上述代码获取了队列中元素的数量。

除了以上几个操作,queue模板类还提供了其他常用的操作,如清空队列、遍历队列等。

示例说明

下面通过两个示例来说明如何使用C++实现队列的程序代码。

示例一:基本的队列操作

下面的代码演示了在队列中插入元素、删除元素、判断队列是否为空以及获取队列长度:

#include <iostream>
#include <queue>

using namespace std;

int main() {
    queue<int> q;

    // 往队列中插入元素
    q.push(2);
    q.push(3);
    q.push(5);
    q.push(7);
    q.push(11);

    // 输出队列中的元素
    while (!q.empty()) {
        cout << q.front() << " ";
        q.pop();
    }
    cout << endl;

    // 判断队列是否为空
    if (q.empty()) {
        cout << "队列已经为空!" << endl;
    }

    // 获取队列中元素的个数
    int num_elem = q.size();
    cout << "队列中有" << num_elem << "个元素。" << endl;

    return 0;
}

运行结果:

2 3 5 7 11
队列已经为空!
队列中有0个元素。

示例二:使用队列实现广度优先搜索

下面的代码演示了如何使用队列实现广度优先搜索算法:

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

void bfs(vector<int> graph[], int start_node);

int main() {
    // 图中的边
    vector<int> graph[6];
    graph[1].push_back(2);
    graph[1].push_back(3);
    graph[2].push_back(4);
    graph[2].push_back(5);
    graph[3].push_back(5);
    graph[4].push_back(6);
    graph[5].push_back(6);

    // 广度优先搜索
    bfs(graph, 1);

    return 0;
}

void bfs(vector<int> graph[], int start_node) {
    bool visited[6] = {false};
    queue<int> q;

    // 将起始节点加入队列
    q.push(start_node);
    visited[start_node] = true;

    while (!q.empty()) {
        int current_node = q.front();
        cout << current_node << " ";
        q.pop();

        for (int i = 0; i < graph[current_node].size(); i++) {
            int neighbor_node = graph[current_node][i];
            if (!visited[neighbor_node]) {
                q.push(neighbor_node);
                visited[neighbor_node] = true;
            }
        }
    }
    cout << endl;
}

运行结果:

1 2 3 4 5 6

上述代码实现了如何使用队列实现广度优先搜索算法。其中,vector表示无向图,bfs函数中实现了广度优先搜索的算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用C++实现队列的程序代码 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Win8系统下运行TurboC软件具体方法(图文)

    以下是详细讲解Win8系统下运行TurboC软件具体方法的完整攻略: 1. 确定TurboC软件版本 首先需要确定TurboC软件的版本,因为不同版本的TurboC安装方法略有不同。例如:TurboC++ 3.0需要使用DOSBox来运行,而TurboC++ 4.5可以直接在Windows下运行。在确定软件版本后,可以相应地选择合适的安装方法。 2. 下载T…

    C 2023年5月23日
    00
  • C++定时器实现和时间轮介绍

    C++ 定时器实现和时间轮介绍 定时器是计算机系统中非常常见的一种机制,可以用来在一定时间间隔后执行某些操作,或在特定时间点执行某些操作。在 C++ 编程中,我们可以使用定时器来进行任务调度等操作。其中,时间轮是一种常见的定时器实现方式,下面将详细介绍时间轮的概念和实现,以及如何在 C++ 中进行定时器的编写。 什么是时间轮? 时间轮是一种基本的定时器实现方…

    C 2023年5月23日
    00
  • set_new_handler(0)有什么用

    set_new_handler是C++语言提供的一个函数,用于设置一个新的内存分配失败处理程序。当内存分配操作失败时,该处理程序将被调用。当我们在C++程序中使用new操作符申请内存时,如果系统找不到合适的内存块,就会触发内存分配失败,进而导致程序抛出std::bad_alloc异常。 set_new_handler(0)的作用是设置一个新的内存分配失败处理…

    C 2023年5月23日
    00
  • C语言实现扫雷小项目

    C语言实现扫雷小项目攻略 1. 确定游戏功能和数据结构 在开始编码前,首先需要确定扫雷游戏的基本功能和数据结构: 游戏功能:实现扫雷游戏的核心功能,包括地雷的生成、数字的计算、点击和标记等操作。 数据结构:定义并实现游戏所需的数据结构,如二维数组等。 2. 创建扫雷项目文件 创建一个新的C语言项目文件夹并进入该文件夹,输入以下命令: mkdir minesw…

    C 2023年5月23日
    00
  • 关于C++友元类的实现讲解

    关于C++友元类的实现讲解 什么是友元类 在C++中,我们可以通过友元类实现类与类之间的访问权限互相扩展,允许一个类的非成员函数或其他类的成员函数访问它的私有成员。 友元类是指在一个类中访问另一个类的私有或受保护成员,需要在另一个类的定义中将该类声明为友元类。 实现步骤 1.在目标类中声明友元类 在目标类中声明友元类的方式如下: friend class C…

    C 2023年5月23日
    00
  • C++可调用对象callable object深入分析

    C++ 可调用对象(Callable Object)深入分析 可调用对象是一个对象,它能够像函数一样被调用,包括函数指针、函数对象、成员函数指针等。在 C++11 标准中加入的可调用对象是一个非常强大的特性,我们可以利用它来编写更加灵活和高效的代码。 本文将深入介绍 C++ 中可调用对象的概念、用法以及注意事项。其中会包含两个示例,以帮助读者更好地理解可调用…

    C 2023年5月22日
    00
  • C++实现单例模式的自动释放

    C++中的单例模式指的是某个类在整个程序中只有唯一的实例,这个实例可以全局被访问。而实现单例模式的自动释放则是让这个唯一实例在程序结束时自动释放,防止内存泄漏的发生。 以下是C++实现单例模式的自动释放的完整攻略: 懒汉式单例模式 实现思路 构造函数和析构函数私有化,防止实例对象被外部创建和销毁。 用静态指针变量指向唯一实例对象,保证实例对象的唯一性。 在程…

    C 2023年5月23日
    00
  • C++如何通过ostringstream实现任意类型转string

    使用ostringstream可以方便地将任意类型转换成string类型。下面是具体的攻略: 步骤一:引入头文件 首先需要引入头文件<sstream>,因为ostringstream类定义在这个头文件中。 #include <sstream> 步骤二:定义一个ostringstream对象 ostringstream oss; 定义一…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部