首页 > 其他分享 >链表实现队列

链表实现队列

时间:2024-06-24 09:42:18浏览次数:23  
标签:Node 队列 nullptr 链表 实现 empty front new rear

#include <iostream>
#include <stdexcept>

// 定义链表节点结构
struct Node {
    int data;
    Node* next;
};

// 链表队列类
class LinkedListQueue {
private:
    Node* front; // 队头指针
    Node* rear;  // 队尾指针

public:
    // 构造函数,初始化队头和队尾指针
    LinkedListQueue() {
        front = nullptr;
        rear = nullptr;
    }

    // 析构函数,释放所有节点内存
    ~LinkedListQueue() {
        while (!is_empty()) {
            dequeue();
        }
    }

    // 判断队列是否为空
    bool is_empty() const {
        return front == nullptr;
    }

    // 入队操作,将元素添加到队列尾部
    void enqueue(int item) {
        Node* new_node = new Node();
        new_node->data = item;
        new_node->next = nullptr;

        if (rear == nullptr) {
            front = rear = new_node;
        } else {
            rear->next = new_node;
            rear = new_node;
        }
    }

    // 出队操作,移除并返回队头元素
    int dequeue() {
        if (is_empty()) {
            throw std::runtime_error("Queue is empty");
        }

        Node* temp = front;
        int item = temp->data;
        front = front->next;

        if (front == nullptr) {
            rear = nullptr;
        }

        delete temp;
        return item;
    }

    // 查看队头元素但不移除
    int peek() const {
        if (is_empty()) {
            throw std::runtime_error("Queue is empty");
        }
        return front->data;
    }
};

公有(PUBLIC)与私有(private)的访问控制符:

两者都使用在类当中,均包括成员及函数

私有成员及函数(外冷内热)只能在友元函数和类的其他成员函数中使用,不能被外部代码或派生类使用

公有函数(social 达人)

析构函数:

 

 

bool 函数的dilidili:

// 判断队列是否为空
    bool is_empty() {
        return front == nullptr;
    }

在C++中,布尔类型的值可以直接用 true(非零值)和 false(零值)表示。在你提供的代码中,使用 return front == nullptr; 可以直接返回一个布尔值,因为 front == nullptr 这个表达式会得到一个布尔结果,即 truefalse。因此,这种方式更直观和简洁,避免了显式地返回 01。这样的设计使代码更易读和理解。

 

标签:Node,队列,nullptr,链表,实现,empty,front,new,rear
From: https://www.cnblogs.com/sly-345/p/18264394

相关文章

  • 基于SpringBoot+AIGC的智能数据分析平台的设计与实现【源码】
    一、引言随着大数据时代的到来,企业和组织迫切需要一种能够自动化处理、分析大量数据,并从中提取有价值信息的智能系统。本项目旨在设计并实现一个基于SpringBoot框架,整合人工智能生成内容(AIGC)技术的智能数据分析平台。该平台将利用机器学习和自然语言处理技术,对数据进行深......
  • 基于Java的工单管理系统的设计与实现【源码】
    一、引言在企业日常运营中,工单管理系统扮演着至关重要的角色,它帮助组织高效地管理客户请求、问题报告、任务指派等事项,确保每一项工作都能得到及时响应和妥善处理。本项目旨在设计并实现一个基于Java的工单管理系统,该系统将涵盖工单的创建、分配、处理、反馈和统计分析等功能......
  • 如何利用窗口函数实现精确排名计算?
    前言SQL语句中,聚合函数在统计业务数据结果时起到了重要作用,比如计算每个业务地区的业务总数、每个班级的学生平均分以及每个分类的最大值等。然而,今天小编将为大家介绍窗口函数,与聚合函数相比,它们也是一组函数,但在使用方法和适用场景上有所不同。在本章节中,我将重点介绍窗口函数......
  • 带有ttl的Lru在Rust中的实现及源码解析
    TTL是TimeToLive的缩写,通常意味着元素的生存时间是多长。应用场景数据库:在redis中我们最常见的就是缓存我们的数据元素,但是我们又不想其保留太长的时间,因为数据时间越长污染的可能性就越大,我们又不想在后续的程序中设置删除,所以我们此时需要设置过期时间来让数据自动淘汰。......
  • 【NAS】绿联NAS+alist+lsky+natfrp 实现图床服务
    alist安装与配置值得一提的就是,映射的data是配置相关的,让绿联直接默认路径就行,不需要手动设置但是文件保存位置的映射的话,为了方便,可以单独映射到一个方便访问的文件夹,(但是要注意下权限问题)端口,穿透的是(20010:5244)这个端口创建完毕,账号默认admin,密码在运行日志里面查看nat......
  • 如何使用JMeter 中beanshell sample实现 POST 请求并处理响应
    如何使用JMeter中beanshellsample实现POST请求并处理响应在JMeter的性能测试中,可以通过Java代码来实现复杂的POST请求并处理响应。以下是一个详细的示例代码解析:importjava.io.OutputStreamWriter;importjava.io.InputStreamReader;importjava.io.BufferedReade......
  • 接入效率提升90%,华为云空间助力开发者高效实现应用数据同步
    十年铸剑,破茧成蝶。从2015年立项,到2019年8月9日HarmonyOS操作系统正式发布,再到HarmonyOSNEXT携六大原生鸿蒙体验正式吹响商用号角,HarmonyOSNEXT开创性的为行业和开发者带来了新发展机遇。ArkData作为统一的数据访问框架,构建统一的鸿蒙数据标准,实现“书同文,车同轨”;同时将跨设备......
  • 数组和链表-《算法图解》学习
    内存工作原理需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它们的差别很重要。接下来介绍数组和链表以及它们的优缺点。 ==============tobeconntinued......
  • 高校毕业设计管理系统的设计与实现(论文+源码)_kaic
     目  录第1章绪  论1.1课题研究目的和意义1.2国外发展状况1.3开发环境1.4本文研究的主要内容第2章技术概述2.1设计原理2.2系统设计模式选定2.3数据库介绍2.4Struts介绍2.5系统中所应用的脚本和Ajax技术第3章需求分析3.1项目概述3.1.......
  • CSS实现边框旋转
    CSS旋转边框这个旋转边框的效果主要通过CSS中的动画、位置和伪元素技术实现。下面我将逐步分析和解释每个关键部分的功能和作用:1.HTML结构<divclass="button">旋转边框</div>这里定义了一个div元素,类名为button,这是按钮的主体。内容为“旋转边框”,这是按钮显示的文......