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

yizhihongxing

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

链表

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

下面是一个用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日

相关文章

  • SpringBoot加载读取配置文件过程详细分析

    SpringBoot加载读取配置文件的过程 SpringBoot在启动过程中会对其内部的配置文件和外部的配置文件进行加载,这里主要介绍其在启动过程中读取配置文件的过程。 具体的过程如下: 第一步:SpringBoot在启动过程中会先加载其内部的配置文件,包括 application.properties 和 application.yml。如果两个文件都存在…

    other 2023年6月25日
    00
  • python之model模块和包的介绍

    Python之model模块和包的介绍 在 Python 编程中,模块和包是非常重要的概念。它们可以帮助你组织你的代码并使其易于重用。本文将介绍 Python 中的模块和包的概念、语法和用法。 模块 在 Python 中,一个模块就是一个包含 Python 代码的文件。使用 import 语句可以在另一个 Python 文件中使用这个模块的代码。比如,我们可…

    其他 2023年3月29日
    00
  • 华为p30pro开发人员选项如何关闭?华为p30pro关闭开发人员选项的方法

    华为P30 Pro是一款非常出色的手机,具有丰富的功能和优秀的性能。在使用过程中,开发人员选项可能不是每个用户都需要的,因此关闭开发人员选项可以让界面更加简洁和易于使用。 下面是关闭华为P30 Pro开发人员选项的完整攻略,包括具体步骤和示例说明。 第一步:打开设置应用 首先打开手机的主屏幕,点击“设置”应用。如果您无法在主屏幕上找到“设置”,可以从应用列表…

    other 2023年6月28日
    00
  • Python __all__变量用法示例详解

    Python __all__变量用法示例详解 在Python中,__all__是一个特殊的变量,用于定义模块中可以被导入的公共接口。它是一个包含字符串的列表,指定了模块中哪些对象可以被其他模块导入。在本文中,我们将详细讲解__all__变量的用法,并提供两个示例说明。 1. __all__变量的基本用法 __all__变量通常在模块的顶层定义,它的值是一个字…

    other 2023年8月15日
    00
  • Discuz和jQuery变量名冲突的3种解决方法

    解决Discuz和jQuery变量名冲突的3种方法 在使用Discuz和jQuery的同时,可能会遇到变量名冲突的问题。这是因为Discuz和jQuery都使用了一些常见的变量名,例如$和jQuery。为了解决这个问题,我们可以采取以下三种方法。 方法一:使用jQuery.noConflict() jQuery.noConflict()是一个jQuery提供…

    other 2023年8月8日
    00
  • 详解Android控件状态依赖框架

    详解Android控件状态依赖框架 什么是控件状态依赖框架 Android控件状态依赖框架(Control State Dependency Framework)是一种Android开发中常用的框架,用于设置和管理同一界面内不同控件之间的状态依赖关系,以便根据不同条件自动控制控件的状态,提高用户交互效果,简化开发者的开发难度。该框架可以用于任何Android…

    other 2023年6月27日
    00
  • 5分钟搭建一个WebRTC视频聊天

    为了给你提供更详细的信息,我将按步骤列出完整的WebRTC视频聊天搭建攻略,包括示例。希望对你有所帮助。 步骤1:安装Node.js和npm Node.js是一种基于Chrome V8 JavaScript引擎的JavaScript运行环境,用于构建服务器端应用程序。npm是一个包管理器,用于在Node.js软件包生态系统中安装和管理包。 在开始之前,请确保…

    other 2023年6月27日
    00
  • vue 面包屑导航组件封装

    实现 Vue 面包屑导航组件封装的过程中,可以按照如下步骤进行: 第一步:创建面包屑组件 创建面包屑组件 Breadcrumb.vue 文件 在 Breadcrumb.vue 文件中编写模板和样式 在 Breadcrumb.vue 文件中导出 Breadcrumb 组件 以下是 Breadcrumb.vue 文件示例: <template> &l…

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