当前位置: 首页 > news >正文

链表头文件大更新!!!

引言

原文章:链表简介及自制链表操作头文件_自己写一个链表头文件-CSDN博客。

此次更新添加了更多功能,让改头文件更 人性化

安装教程见原文章。

介绍 linked_list.h 头文件

linked_list.h 是一个 C++ 头文件,定义了一个模板类 LinkedList,用于实现单向链表。链表中的每个节点由 Node 结构体表示,包含数据和指向下一个节点的指针。LinkedList 类提供了多种操作链表的方法,包括插入、删除、查找、打印、获取链表大小、判断链表是否为空等。此外,还定义了链表的加法和减法运算。

头文件内容
#ifndef LINKED_LIST_H
#define LINKED_LIST_H
#pragma once#include <iostream>template <typename T>
struct Node {T data;Node* next;Node(T data) : data(data), next(0) {}  // 使用 0 替换 nullptr
};template <typename T>
class LinkedList {
public:LinkedList();~LinkedList();void insert(T data);void remove(T data);Node<T>* search(T data);void print() const;int size() const;bool isEmpty() const;Node<T>* getHead() const;Node<T>* getTail() const;// 加法运算LinkedList<T>& operator+(const LinkedList<T>& other);// 减法运算LinkedList<T>& operator-(const LinkedList<T>& other);private:Node<T>* head;
};template <typename T>
LinkedList<T>::LinkedList() : head(0) {}  // 使用 0 替换 nullptrtemplate <typename T>
LinkedList<T>::~LinkedList() {Node<T>* current = head;while (current) {Node<T>* next = current->next;delete current;current = next;}
}template <typename T>
void LinkedList<T>::insert(T data) {Node<T>* newNode = new Node<T>(data);if (!head) {head = newNode;} else {Node<T>* current = head;while (current->next) {current = current->next;}current->next = newNode;}
}template <typename T>
void LinkedList<T>::remove(T data) {if (!head) {return;}if (head->data == data) {Node<T>* temp = head;head = head->next;delete temp;return;}Node<T>* current = head;while (current->next && current->next->data != data) {current = current->next;}if (current->next) {Node<T>* temp = current->next;current->next = current->next->next;delete temp;}
}template <typename T>
Node<T>* LinkedList<T>::search(T data) {Node<T>* current = head;while (current) {if (current->data == data) {return current;}current = current->next;}return 0;  // 使用 0 替换 nullptr
}template <typename T>
void LinkedList<T>::print() const {Node<T>* current = head;while (current) {std::cout << current->data << " ";current = current->next;}std::cout << std::endl;
}template <typename T>
int LinkedList<T>::size() const {int count = 0;Node<T>* current = head;while (current) {count++;current = current->next;}return count;
}template <typename T>
bool LinkedList<T>::isEmpty() const {return head == 0;  // 使用 0 替换 nullptr
}template <typename T>
Node<T>* LinkedList<T>::getHead() const {return head;
}template <typename T>
Node<T>* LinkedList<T>::getTail() const {Node<T>* current = head;Node<T>* tail = 0;  // 使用 0 替换 nullptrwhile (current) {tail = current;current = current->next;}return tail;
}// 加法运算
template <typename T>
LinkedList<T>& LinkedList<T>::operator+(const LinkedList<T>& other) {Node<T>* current = other.head;while (current) {this->insert(current->data);current = current->next;}return *this;
}// 减法运算
template <typename T>
LinkedList<T>& LinkedList<T>::operator-(const LinkedList<T>& other) {Node<T>* current = other.head;while (current) {this->remove(current->data);current = current->next;}return *this;
}
#endif

使用样例

1. 创建和操作整数链表
#include "linked_list.h"int main() {LinkedList<int> list1;list1.insert(1);list1.insert(2);list1.insert(3);std::cout << "List1: ";list1.print();  // 输出: 1 2 3LinkedList<int> list2;list2.insert(4);list2.insert(5);std::cout << "List2: ";list2.print();  // 输出: 4 5// 加法运算list1 = list1 + list2;std::cout << "List1 + List2: ";list1.print();  // 输出: 1 2 3 4 5// 减法运算list1 = list1 - list2;std::cout << "List1 - List2: ";list1.print();  // 输出: 1 2 3// 查找元素Node<int>* found = list1.search(2);if (found) {std::cout << "Found: " << found->data << std::endl;  // 输出: Found: 2} else {std::cout << "Not found" << std::endl;}// 删除元素list1.remove(2);std::cout << "After removing 2: ";list1.print();  // 输出: 1 3return 0;
}
2. 创建和操作字符串链表
#include "linked_list.h"int main() {LinkedList<std::string> list1;list1.insert("apple");list1.insert("banana");list1.insert("cherry");std::cout << "List1: ";list1.print();  // 输出: apple banana cherryLinkedList<std::string> list2;list2.insert("date");list2.insert("elderberry");std::cout << "List2: ";list2.print();  // 输出: date elderberry// 加法运算list1 = list1 + list2;std::cout << "List1 + List2: ";list1.print();  // 输出: apple banana cherry date elderberry// 减法运算list1 = list1 - list2;std::cout << "List1 - List2: ";list1.print();  // 输出: apple banana cherry// 查找元素Node<std::string>* found = list1.search("banana");if (found) {std::cout << "Found: " << found->data << std::endl;  // 输出: Found: banana} else {std::cout << "Not found" << std::endl;}// 删除元素list1.remove("banana");std::cout << "After removing banana: ";list1.print();  // 输出: apple cherryreturn 0;
}

应用实例

1. 数据管理

链表可以用于管理动态数据,例如在内存管理中,链表可以用于管理空闲内存块。每个节点可以表示一个空闲内存块,链表可以动态地插入和删除节点,以适应内存分配和释放的需求。

2. 文件系统

在文件系统中,链表可以用于管理文件和目录的链接。每个节点可以表示一个文件或目录,链表可以动态地插入和删除节点,以适应文件系统的增删改查操作。

3. 队列和栈

链表可以用于实现队列和栈。队列可以通过在链表的尾部插入元素和在头部删除元素来实现,而栈可以通过在链表的头部插入和删除元素来实现。

4. 图形用户界面

在图形用户界面中,链表可以用于管理窗口和控件的层次关系。每个节点可以表示一个窗口或控件,链表可以动态地插入和删除节点,以适应用户界面的动态变化。

以上就是本文章的全部内容。安装教程见链表简介及自制链表操作头文件_自己写一个链表头文件-CSDN博客。

关煮一下吧你的认可就是我最大的动力~~


求关注~

相关文章:

链表头文件大更新!!!

引言 原文章:链表简介及自制链表操作头文件_自己写一个链表头文件-CSDN博客。 此次更新添加了更多功能&#xff0c;让改头文件更 人性化 。 安装教程见原文章。 介绍 linked_list.h 头文件 linked_list.h 是一个 C 头文件&#xff0c;定义了一个模板类 LinkedList&#xff…...

力扣3381.长度可被K整除的子数组的最大元素和

力扣3381.长度可被K整除的子数组的最大元素和 题目 题目解析及思路 题目要求返回一段长度为K的倍数的最大子数组和 同余前缀和 代码 class Solution { public:long long maxSubarraySum(vector<int>& nums, int k) {int n nums.size();vector<long long>…...

http.ServeMux多路复用器的设置

package mainimport ("fmt""net/http" )func first(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "多函数-first") }func second(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "多函数-second") }func ma…...

优化器与优化方法:在现代科学与工程中的应用

目录 ​编辑 优化器&#xff1a;机器学习中的参数调整 1. 梯度下降系列 2. 动量法&#xff08;Momentum&#xff09; 3. Adagrad 4. RMSprop 5. Adam 优化方法&#xff1a;寻找系统最优解 线性规划 非线性规划 凸优化 非凸优化 结论 在当今的科学和工程领域&#…...

笔记本外接显示屏没声音

1、笔记本正常有声音&#xff0c;但是外接显示屏后没有声音了怎么回事呢&#xff1f;原来外接显示屏后笔记本的声音输出会自动选择显示屏的音频输出&#xff0c;但是显示屏可能没有声音输出所以导致笔记本没有声音。 2、解决办法&#xff1a;打开笔记本设置&#xff0c;选择声…...

vue框架

Vue.js是一种用于构建用户界面的JavaScript框架。它是一个轻量级框架&#xff0c;被设计为逐渐采用的渐进式框架&#xff0c;可以与现有项目集成&#xff0c;也可以作为一个完整的单页应用程序框架使用。 Vue.js具有以下特点&#xff1a; 简单易学&#xff1a;Vue.js的API简单…...

Vue指令(一)--v-html、v-show、v-if、v-else、v-else-if、v-on、v-bind、v-for、v-model

目录 &#xff08;一&#xff09;初识指令和内容渲染指令v-html 1.v-html 案例&#xff1a; 官网的API文档 &#xff08;二&#xff09;条件渲染指令v-show和v-if 1. v-show 2. v-if &#xff08;三&#xff09;条件渲染指令v-else和v-else-if 案例 &#xff08;四…...

ElK 8 收集 MySQL 慢查询日志并通过 ElastAlert2 告警至飞书

文章目录 1. 说明2. 启个 mysql3. 设置慢查询4. filebeat 设置5. 触发慢查询6. MySQL 告警至飞书 1. 说明 elk 版本&#xff1a;8.15.0 2. 启个 mysql docker-compose.yml 中 mysql&#xff1a; mysql:# restart: alwaysimage: mysql:8.0.27# ports:# - "3306:3306&q…...

QT通过在线安装器安装【详细】

在线安装器地址&#xff1a; 官方在线安装器&#xff1a;Index of /official_releases/online_installers (qt.io) 通过命令行启动安装页面 直接双击qt安装程序&#xff0c;在线安装会非常慢&#xff0c;甚至安装失败&#xff0c;所以通过命令行页面启动安装页面。点击wind…...

34.1 uber开源的m3db简介

本节重点介绍 : m3db自己的定位m3db自己的架构m3db自己的组件 两句话简介 M3最初是在优步开发的&#xff0c;目的是提供对优步业务运营&#xff0c;微服务和基础架构的可视性由于M3具有轻松进行水平扩展的能力&#xff0c;因此它为所有监视用例提供了一个集中式存储解决方案…...

MATLAB 最小二乘点云拟合球 (89)

MATLAB 最小二乘点云拟合球 (89) 一、算法介绍二、算法实现1.代码2.结果这是缘,亦是最美的相见 一、算法介绍 球面拟合算法是一种通过数学方法将一组三维点(通常在三维空间中分布)拟合到一个理想的球形表面上。这个过程通常涉及使用最小二乘法来最小化实际数据点与拟合的…...

【Altium Designer 】AD如何使用嘉立创元器件的3D封装

1.下载3D封装 以STM32F407VGT6为例&#xff0c;进入嘉立创商城网站&#xff0c;找到需要的元器件封装 复制编号&#xff0c;打开嘉立创EDA&#xff0c;编译器选择专业版&#xff0c;新建工程&#xff0c;点击PCB1 复制编号在搜索框中&#xff0c;点击搜索&#xff0c;然后放置…...

G15沈海高速茶白高架自动化监测

1. 项目简介 G15 沈海高速公路北起辽宁省沈阳市苏家屯区金宝台枢纽&#xff0c;与沈阳市绕城高速公路&#xff08;国家高速 G1501&#xff09;相接&#xff0c;南至海南省海口市秀英区粤海枢纽&#xff0c;与海南地区环线高速公路&#xff08;国家高速 G98&#xff09;相交&am…...

网站从渗透到mssql提权全过程

2|0渗透全过程 1.信息收集-端口探测 1&#xff09;Nmap端口探测&#xff1a;namp -sS -p 1-65535 172.16.12.103 可以看到端口开放情况 2.判断系统情况 根据端口情况初步判定为IISmssql.net系统&#xff0c;访问web站点URL应该为&#xff1a;http:172.16.12.103:27689 访问…...

Qt多线程与QTimer详解

引用 Qt多线程中使用QTimer&#xff08;常见问题汇总&#xff09; [多线程]多线程使用QTimer Qt::ConnectionType&#xff1a;Qt不同类型connect的详细区别说明与应用 Qt的4种多线程实现方式 一文搞定之Qt多线程(QThread、moveToThread) QTimer The QTimer class provides repe…...

基于stm23的智慧宿舍系统 (DAY10)_小程序

好久没记录开发进度了&#xff0c;今天小程序差不多开发完了&#xff0c;UI这块算是比较常见了&#xff0c;主要功能是能连接onenet查看设备上传的数据&#xff0c;同时也能对设备进行一些控制下面是几个主要的函数&#xff0c;功能比较简单 wx.request({url: ${apiBaseUrl}/t…...

深入理解Spring事务

目录 什么是Spring事务为什么需要Spring事务Spring事务的实现 Spring事务的传播机制Spring事务的底层原理 EnableTransactionManagement --开启Spring管理事务Import(TransactionManagementConfigurationSelector.class) --提供两个beanAutoProxyRegistrar --启用AOP的功能&am…...

Ubuntu22.04深度学习环境安装【Anaconda+Pycharm】

anaconda可以提供多个独立的虚拟环境&#xff0c;方便我们学习深度学习&#xff08;比如复现论文&#xff09;&#xff1b; Pycharm编辑器可以高效的编写python代码&#xff0c;也是一个很不错的工具。 下面就记录下Ubuntu22.04的安装流程&#xff1a; 1.Anaconda安装 下载Ana…...

五、docker的网络模式

五、docker的网络模式 5.1 Docker的四种网络模式 当你安装docker时&#xff0c;它会自动创建三个网络&#xff0c;可使用如下命令查看&#xff1a; [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 7390284b02d6 bridge bridge lo…...

使用el-row和el-col混合table设计栅格化,实现表头自适应宽度,表格高度占位

演示效果&#xff1a; 如上图,由于地址信息很长,需要占多个格子,所以需要错开,若想实现这种混合效果,可以这样搭建: 页面效果&#xff1a; 代码分析: 上面使用el-row和el-col搭建表单显示 第一排三个8,第二排8和16 下面混合table实现&#xff0c;并使用border来自适应宽度…...

Python数据聚合抓取工具:从配置化引擎到实战避坑指南

1. 项目概述&#xff1a;一个多功能的“聚合爪”工具最近在GitHub上闲逛&#xff0c;发现了一个名字挺有意思的项目&#xff1a;al1enjesus/polyclawster。这个名字拆开看&#xff0c;“poly”代表多&#xff0c;“clawster”听起来像是“claw”&#xff08;爪子&#xff09;和…...

CN2628 可用太阳能供电 5 伏特低压差电压调制集成电路

概述: CN2628是一款可用太阳能供电的低噪声线性电压调制集成电路&#xff0c;采用固定5.0V输出电压&#xff0c;最大 输出电流可达1安培&#xff0c;在5.5V到7V的输入电压范围内输出电压精度可达1%。CN2628工作电流只有520微安&#xff0c;而且同输入和输出的压差没有关系。 CN…...

Kubernetes上Jenkins全栈部署:动态Agent与生产环境调优指南

1. 项目概述&#xff1a;一个面向Kubernetes的Jenkins全栈部署方案在容器化和云原生技术成为主流的今天&#xff0c;如何高效、稳定地部署和管理持续集成/持续交付&#xff08;CI/CD&#xff09;流水线&#xff0c;是每个开发团队和运维工程师必须面对的课题。传统的单体Jenkin…...

【最新v2.7.1 版本安装包】OpenClaw 小白入门必看,零基础无需命令零代码保姆级教学

OpenClaw v2.7.1 一键安装部署教程&#xff5c;可视化傻瓜式搭建 ✨适配系统&#xff1a;Windows10/11 64 位 ✨当前版本&#xff1a;v2.7.1 版本&#xff08;虾壳云版&#xff09; ✨安装包大小&#xff1a;58.7MB 【点击下载最新安装包】https://xiake.yun/api/download/…...

Docker容器MCP服务镜像:AI安全运维与自动化实践

1. 项目概述&#xff1a;一个为Docker容器提供MCP服务的镜像最近在折腾一些自动化工作流&#xff0c;发现很多工具都开始支持一种叫做MCP&#xff08;Model Context Protocol&#xff09;的协议。简单来说&#xff0c;MCP就像是一个标准化的“插座”&#xff0c;让各种AI模型&a…...

基于二维码的文件分片传输:原理、实现与安全应用

1. 项目概述&#xff1a;一个基于二维码的智能文件分发系统 最近在折腾一个挺有意思的小项目&#xff0c;源于一个很实际的需求&#xff1a;如何在不同的设备之间&#xff0c;安全、便捷地传输一些敏感或临时的文件&#xff0c;而不依赖任何第三方云存储或即时通讯工具。你可能…...

湿版摄影风格失效的5个致命误区,第4个连Midjourney官方文档都未披露——基于217组AB测试的权威归因报告

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;湿版摄影风格失效的5个致命误区&#xff0c;第4个连Midjourney官方文档都未披露——基于217组AB测试的权威归因报告 为何“wet plate collodion”提示词突然失灵&#xff1f; 在 Midjourney v6.1 及 N…...

基于Slack Bolt与OpenAI API构建企业级AI助手:从集成部署到高级应用

1. 项目概述&#xff1a;当ChatGPT遇上Slack&#xff0c;团队协作的智能革命 如果你和我一样&#xff0c;每天的工作都泡在Slack里&#xff0c;与团队沟通、同步进度、处理各种消息&#xff0c;那你一定也经历过这样的时刻&#xff1a;一个技术问题卡住了&#xff0c;需要快速…...

Sunshine游戏串流架构深度解析:3种高效部署方案完全指南

Sunshine游戏串流架构深度解析&#xff1a;3种高效部署方案完全指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine作为一款开源自托管的游戏串流服务器&#xff0c;为Mo…...

百度网盘Mac版破解插件:免费解锁SVIP高速下载的终极指南

百度网盘Mac版破解插件&#xff1a;免费解锁SVIP高速下载的终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版的龟速下载而烦…...