C++利用链表模板类实现简易队列

首先我们需要了解链表和模板类,然后才能进一步学习如何利用链表模板类实现队列。

链表

链表是一种非常常用的数据结构,它通过“链”把一系列节点串在一起。每个节点包含一个存储数据的值和一个指向下一个节点的指针。链表可以分为单向链表和双向链表,其中单向链表中只能指向下一个节点,而双向链表中可以同时指向上一个和下一个节点。

下面是一个用C++实现单向链表的示例代码:

template<class T>
struct Node {
    T data;
    Node* next;
};

template<class T>
class LinkedList {
public:
    LinkedList() : head(nullptr), tail(nullptr), size(0) {}

    void push_back(T data) {
        Node<T>* newNode = new Node<T>;
        newNode->data = data;
        if (!head) {
            head = newNode;
        }
        else {
            tail->next = newNode;
        }
        tail = newNode;
        size++;
    }

    void pop_front() {
        if (head == nullptr) return;

        Node<T>* oldHead = head;
        head = head->next;
        delete oldHead;

        if (head == nullptr) tail = nullptr;

        size--;
    }

    T front() const {
        return head->data;
    }

    T back() const {
        return tail->data;
    }

    bool empty() const {
        return size == 0;
    }

    int getSize() const {
        return size;
    }

private:
    Node<T>* head;
    Node<T>* tail;
    int size;
};

模板类

模板类是C++中的一种很有用的构件,它可以帮助我们实现泛型程序设计。模板类可以定义成员变量、成员函数和嵌套类等,同时可以接受任何数据类型作为其参数。

下面是一个用C++实现模板类的示例代码:

template<class T>
class Stack {
public:
    Stack() : top(-1) {}

    void push(T data) {
        arr[++top] = data;
    }

    T pop() {
        return arr[top--];
    }

private:
    static const int MAX_SIZE = 100;
    T arr[MAX_SIZE];
    int top;
};

队列

队列是一种先进先出的简单数据结构,通常可以用数组或链表来实现。我们可以利用链表模板类来实现自己的队列。

下面是一个用C++利用链表模板类实现队列的示例代码:

template<class T>
class Queue {
public:
    Queue() : linkedList(LinkedList<T>()) {}

    void enqueue(T data) {
        linkedList.push_back(data);
    }

    void dequeue() {
        linkedList.pop_front();
    }

    T front() const {
        return linkedList.front();
    }

    T back() const {
        return linkedList.back();
    }

    bool empty() const {
        return linkedList.empty();
    }

    int getSize() const {
        return linkedList.getSize();
    }

private:
    LinkedList<T> linkedList;
};

这样就实现了一个用链表模板类实现的队列。我们可以通过调用enqueue、dequeue、front等函数来操作队列。

此外,下面是一个用Queue类实现的示例程序:

int main() {
    Queue<int> q;

    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);
    q.enqueue(4);

    while (!q.empty()) {
        cout << q.front() << " ";
        q.dequeue();
    }

    return 0;
}

输出结果为:1 2 3 4

这是一个很简单的队列示例程序,它会把1、2、3、4依次加入队列中,并出队时按顺序输出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++利用链表模板类实现简易队列 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • mysqld.exe

    以下是关于“mysqld.exe”的完整攻略: mysqld.exe是什么? mysqld.exe是MySQL数据库服务器的主要可执行文件。它是MySQL服务器的核心组件,负责处理客户端请求、管理数据库和执行查询等任务。如果您想使用MySQL数据库,您需要了解如何使用mysqld.exe。 启动mysqld.exe 要启动mysqld.exe,请按照以下步骤…

    other 2023年5月6日
    00
  • Java反射获取实例的速度对比分析

    Java反射获取实例的速度对比分析是一个非常重要的话题。在该攻略中,我将提供以下内容: 什么是Java反射? 反射获取实例的速度对比分析的背景和重要性 反射获取实例的三种方式 反射获取实例的速度对比分析的示例说明 1. 什么是Java反射? Java反射是指程序在运行时可以访问、检测和修改它本身所属应用程序运行状态或者代码的一种能力。 具体来说,反射可以让程…

    other 2023年6月27日
    00
  • Ajax实现动态加载数据

    当我们需要在网页中不刷新页面的情况下更新数据时,可以使用Ajax实现动态加载数据。下面是一些详细步骤,以及两个示例说明。 步骤 1.创建XMLHttpRequest对象 首先,在页面中创建一个XMLHttpRequest对象,它会在后面的过程中用于向服务器发送请求和接收响应。 var xhr = new XMLHttpRequest(); 2.发送请求 接下…

    other 2023年6月25日
    00
  • 基于Java语言实现Socket通信的实例

    关于“基于Java语言实现Socket通信的实例”的攻略,下面会提供详细的步骤以及示例说明。 目录 简介 环境搭建 编写客户端 编写服务器端 示例说明 总结 简介 Socket(套接字)是一种用于在不同程序之间传递数据的机制。在Java中,可以通过java.net.Socket类实现Socket通信,建立服务器和客户端之间的连接。在这个攻略中,我们将会演示如…

    other 2023年6月27日
    00
  • 鼠标左键失灵怎么设置右键代替左键?

    要将鼠标左键设置为右键代替,有几种方法可以尝试: 方法一:使用鼠标设置 转到控制面板并搜索“鼠标”,然后打开“鼠标属性”。 在“按钮”选项卡中,将“左键按钮”设置为“右键单击”。 点击“应用”并确认更改。 以下是示例: 1. 打开控制面板,搜索“鼠标”,进入“鼠标属性”。 2. 定位到“按钮”选项卡,选择“右键单击”代替“左键按钮”。 3. 点击“应用”并确…

    other 2023年6月27日
    00
  • 图文详解Java中class的初始化顺序

    下面我将为大家详细讲解“图文详解Java中class的初始化顺序”的完整攻略。 1. 为什么需要了解Java中class的初始化顺序? Java中的class在被实例化之前需要先进行初始化操作,而初始化的顺序直接影响到程序最终的正确性和性能。因此了解Java中class的初始化顺序是非常必要的,可以帮助我们在编写程序时更好地理解代码、避免出现错误和提升程序性…

    other 2023年6月20日
    00
  • 魔兽世界7.3.5生存猎怎么堆属性 wow7.35生存猎配装属性优先级攻略

    魔兽世界7.3.5生存猎怎么堆属性 – 配装属性优先级攻略 简介 生存猎是魔兽世界中一个相对容易上手的近战职业,掌握好其属性堆叠和配装优先级可以提高其输出能力和生存能力。本文主要介绍如何堆叠生存猎的属性以及配装的优先级。 属性堆叠原则 熟练度 熟练度是生存猎最主要的属性之一,可以提升其输出和生存能力。要尽量提升熟练度,建议选择装备和宝石。 爆击 爆击是提高生…

    other 2023年6月27日
    00
  • javascript基础进阶_深入剖析执行环境及作用域链

    JavaScript基础进阶: 深入剖析执行环境及作用域链攻略 1. 执行环境(Execution Context) 执行环境是JavaScript中代码执行的环境,它包含了变量、函数和对象等。在执行JavaScript代码时,会创建一个全局执行环境,并且每当函数被调用时,都会创建一个新的执行环境。 执行环境的创建过程包括以下几个步骤:- 创建变量对象(Va…

    other 2023年8月19日
    00
合作推广
合作推广
分享本页
返回顶部