c++相关的数据结构

单链表,模板加智能指针 

#include <iostream>
#include <memory>// 定义链表节点结构
template <typename T>
struct Node {T data;std::shared_ptr<Node<T>> next;Node(const T& value) : data(value), next(nullptr) {}
};// 定义链表类
template <typename T>
class LinkedList {
private:std::shared_ptr<Node<T>> head;public:LinkedList() : head(nullptr) {}// 在链表末尾插入节点void insert(const T& value) {std::shared_ptr<Node<T>> newNode = std::make_shared<Node<T>>(value);if (head == nullptr) {head = newNode;} else {std::shared_ptr<Node<T>> temp = head;while (temp->next != nullptr) {temp = temp->next;}temp->next = newNode;}}// 打印链表元素void print() {std::shared_ptr<Node<T>> temp = head;while (temp != nullptr) {std::cout << temp->data << " ";temp = temp->next;}std::cout << std::endl;}
};int main() {LinkedList<int> list;list.insert(1);list.insert(2);list.insert(3);list.insert(4);list.print(); // 输出: 1 2 3 4return 0;
}

单链表加完美转发进阶版

#include <iostream>
#include <memory>
#include <utility>template <typename T>
class LinkedList {
private:struct Node {T data;std::shared_ptr<Node> next;Node(const T& value) : data(value), next(nullptr) {}};std::shared_ptr<Node> head;public:LinkedList() : head(nullptr) {}//头插法template <typename U>void insert(U&& data) {std::shared_ptr<Node> newNode = std::make_shared<Node>(std::forward<U>(data));newNode->next = head;head = newNode;}void print() const {std::shared_ptr<Node> current = head;while (current != nullptr) {std::cout << current->data << " ";current = current->next;}std::cout << std::endl;}
};int main() {LinkedList<int> list;list.insert(3);list.insert(5);list.insert(7);list.print();  // 输出链表内容: 7 5 3return 0;
}

双链表  

#include <iostream>
#include <memory>// 定义链表节点结构
template <typename T>
struct Node {T data;std::shared_ptr<Node<T>> prev;std::shared_ptr<Node<T>> next;Node(const T& value) : data(value), prev(nullptr), next(nullptr) {}
};// 定义链表类
template <typename T>
class DoublyLinkedList {
private:std::shared_ptr<Node<T>> head;std::shared_ptr<Node<T>> tail;public:DoublyLinkedList() : head(nullptr), tail(nullptr) {}// 在链表末尾插入节点void insert(const T& value) {std::shared_ptr<Node<T>> newNode = std::make_shared<Node<T>>(value);if (head == nullptr) {head = newNode;tail = newNode;}else {tail->next = newNode;newNode->prev = tail;tail = newNode;}}// 打印链表元素void print() {std::shared_ptr<Node<T>> temp = head;while (temp != nullptr) {std::cout << temp->data << " ";temp = temp->next;}std::cout << std::endl;}
};int main() {DoublyLinkedList<int> list;list.insert(1);list.insert(2);list.insert(3);list.insert(4);list.print(); // 输出: 1 2 3 4return 0;
}

#include <iostream>
#include <memory>// 定义栈节点结构
template <typename T>
struct Node {T data;std::shared_ptr<Node<T>> next;Node(const T& value) : data(value), next(nullptr) {}
};// 定义栈类
template <typename T>
class Stack {
private:std::shared_ptr<Node<T>> top;public:Stack() : top(nullptr) {}// 入栈操作void push(const T& value) {std::shared_ptr<Node<T>> newNode = std::make_shared<Node<T>>(value);newNode->next = top;top = newNode;}// 出栈操作void pop() {if (top != nullptr) {std::shared_ptr<Node<T>> temp = top;top = top->next;temp.reset();}}// 获取栈顶元素T& peek() {if (top != nullptr) {return top->data;}throw std::runtime_error("Stack is empty.");}// 判断栈是否为空bool isEmpty() {return top == nullptr;}
};int main() {Stack<int> stack;stack.push(1);stack.push(2);stack.push(3);std::cout << "Top element: " << stack.peek() << std::endl; // 输出: Top element: 3stack.pop();std::cout << "Top element: " << stack.peek() << std::endl; // 输出: Top element: 2return 0;
}

 队列

#include <iostream>
#include <memory>// 定义队列节点结构
template <typename T>
struct Node {T data;std::shared_ptr<Node<T>> next;Node(const T& value) : data(value), next(nullptr) {}
};// 定义队列类
template <typename T>
class Queue {
private:std::shared_ptr<Node<T>> front;std::shared_ptr<Node<T>> rear;public:Queue() : front(nullptr), rear(nullptr) {}// 入队操作void enqueue(const T& value) {std::shared_ptr<Node<T>> newNode = std::make_shared<Node<T>>(value);if (rear == nullptr) {front = newNode;rear = newNode;} else {rear->next = newNode;rear = newNode;}}// 出队操作void dequeue() {if (front != nullptr) {std::shared_ptr<Node<T>> temp = front;front = front->next;temp.reset();if (front == nullptr) {rear = nullptr;}}}// 获取队头元素T& peek() {if (front != nullptr) {return front->data;}throw std::runtime_error("Queue is empty.");}// 判断队列是否为空bool isEmpty() {return front == nullptr;}
};int main() {Queue<int> queue;queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);std::cout << "Front element: " << queue.peek() << std::endl; // 输出: Front element: 1queue.dequeue();std::cout << "Front element: " << queue.peek() << std::endl; // 输出: Front element: 2return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML基础结构入门

HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础语言。它用于描述网页的结构和内容。让我们从最基本的HTML文档开始。 HTML基础结构 一个基本的HTML文档结构如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta …

产品应用 | 小盒子跑大模型!英码科技基于算能BM1684X平台实现大模型私有化部署

当前&#xff0c;在人工智能领域&#xff0c;大模型在丰富人工智能应用场景中扮演着重要的角色&#xff0c;经过不断的探索&#xff0c;大模型进入到落地的阶段。而大模型在落地过程中面临两大关键难题&#xff1a;对庞大计算资源的需求和对数据隐私与安全的考量。为应对这些挑…

数列a_n=1/n是柯西数列的证明方法

柯西数列 一个数列 a n a_n an​称为柯西数列&#xff08;Cauchy Sequence&#xff09;&#xff0c;如果对于任意的正数 ϵ > 0 \epsilon > 0 ϵ>0&#xff0c;存在一个正整数 N N N&#xff0c;使得对于所有的 m , n ≥ N m, n \geq N m,n≥N&#xff0c;都有&am…

保护模式下的内存访问(笔记)

;代码清单12-1;文件名&#xff1a;c12_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码;创建日期&#xff1a;2011-5-16 19:54&#xff1b;修改于2022-02-16 11:15;设置堆栈段和栈指针mov ax, csmov ss, axmov sp, 0x7c00;计算GDT所在的逻辑段地址mov ax, [cs: gdt_base 0x7c…

Ubuntu插无线网卡后没反应-安装驱动

工作站的网卡驱动坏了两次了…记录一下重装过程吧&#xff0c;可能对大家帮助不大&#xff0c;仅供参考。 首先检查一下网卡插上后是否被识别了&#xff0c;在终端输入 lsusb&#xff0c;得到的设备中有一个 Edimax Technology Co., Ltd Edimax AC1200 USB 这个设备就是无线网…

POI:接收上传上来的excel,解析并导入到数据库

目录 1、控制层 2、业务层&#xff08;主要逻辑&#xff09; 1、控制层 因为前端设置了只能上传1个文件&#xff0c;这里直接取一个。 RequestMapping(value "/shebeiDaoru.ctrl", method RequestMethod.POST, produces "application/json;charsetUTF-8&q…

Chatgpt、Chatglm、Gemini、通义千问、文心一言、Kimi、字节豆包 AI 写高考作文,附各大模型体验案例~

六月&#xff0c;高考季&#xff0c;AI 来帮 阅读材料 要求&#xff1a;选准角度&#xff0c;确定立意&#xff0c;明确文体&#xff0c;自拟标题&#xff1b;不要套作&#xff0c;不得抄袭&#xff1b;不得泄露个人信息&#xff1b;不少于800字。 Ai 来写作 【构建提示…

python17 字符串的常用操作

字符串常用方法 代码 字符串常用方法s i am SyLar, I LOVE YOU s1 s.capitalize()# 首字母变成大写 print(s1) s2s.lower() # 全部变成小写 print(s2) s3 s.upper()#全部变成大写 忽略大小写 推荐用这个 print(s3)title abc_def_hi print(标题:,title.title())s4 HelloWor…

SwitchHosts 简明教程

转载请标明出处&#xff1a;https://blog.csdn.net/donkor_/article/details/139743047 文章目录 一、SwitchHosts 是什么二、功能特性三、安装四、使用4.1 本地添加host4.2 本地127.0.0.1添加指定IP 五、修改 hosts 后不生效 一、SwitchHosts 是什么 SwitchHosts 是一个管理 …

以太网基础知识(三)—FEC概念以及编码原理介绍

1&#xff1a;前言 KR4(528,514) FEC表示的意思&#xff1a; KR4 RS(528,514) FEC 是一种以太网中使用的FEC&#xff08;Forward Error Correction&#xff09;编码方案。在这个方案中&#xff0c;采用的是Reed-Solomon (RS) 编码算法&#xff0c;它被设计用于提高数据传输的…

考试系统提供源码能做什么?

考试系统提供源码&#xff0c;无疑为现代教育领域注入了新的活力。源码&#xff0c;作为软件开发的基石&#xff0c;其开放与共享的特性使得考试系统具备了前所未有的灵活性和可定制性。那么&#xff0c;考试系统提供源码究竟能做什么呢&#xff1f;本文将详细探讨其多重功能与…

初识数据库及Mysql安装管理

初识数据库及Mysql安装管理 了解数据库数据库的概念数据库的分类关系型数据库&#xff08;SQL&#xff09;非关系型的数据库&#xff08;NoSQL&#xff09; SQL语句SQL语言分类&#xff1a; MySQL中6种常见的约束&#xff1a; Mysql安装&#xff08;CentOS7&#xff09;源码编译…

dialog弹窗显示不全

弹框显示不全&#xff0c;编辑框不可见 打开可编辑的dialog对话框后&#xff0c;编辑view获取到焦点弹出软键盘输入时&#xff0c;由于屏幕分辨率和屏幕高度问题&#xff0c;导致软键盘高度太高向上挤压dialog对话框&#xff0c;当dialog对话框被向上挤压到状态栏位置时&#…

接手一个系统并快速入手 这里是一些建议

接手一个陈旧而极其重要的系统&#xff0c;需要系统性和全面的了解。以下是你可以从多个方面入手的步骤和建议&#xff1a; 1. 文档和架构图 系统架构图&#xff1a;了解系统的整体架构&#xff0c;包括各个微服务的分布、上下游依赖关系、数据流向等。接口文档&#xff1a;获…

AI应用中心:搭建上线了,发现出色的人工智能的网站软件

https://aiapp.ai-51.com 1w 个最佳人工智能应用和服务 AI 应用中心拥有丰富的国内外 AI 应用&#xff0c;收录了超过 1w 个出色的人工智能网站和应用&#xff0c;覆盖了 40 多个不同的领域&#xff0c;如 Ai 绘画生成、Ai 文案写作、Ai 视频编辑、Ai 智能营销等。您可以通过我…

LeetCode347:前K个高频元素

题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 解题思想 使用优先队列 priority_queue<Type, Container, Functional> Type 就是数据类型&#xff0c;Container 就是容器类型&#xff08;C…

C++互斥代码实现

1 #include <windows.h>HANDLE hMutex; hMutex CreateMutex(NULL, FALSE, NULL); WaitForSingleObject(hMutex, INFINITE); //TODO: 添加互斥代码ReleaseMutex(hMutex);2 #include <mutex>std::mutex m_mutex; m_mutex.lock(); //TODO: 添加互斥代码m_mutex.unl…

移动操作系统更新管理

移动操作系统更新管理是大多数移动设备管理&#xff08;MDM&#xff09;解决方案中提供的一项功能&#xff0c;它允许组织管理移动设备上的操作系统更新。MDM解决方案定期扫描设备以检查可用的移动操作系统更新&#xff0c;并根据配置的策略管理操作系统更新。操作系统更新管理…

【ubuntu22.04】切换图形界面和命令行界面解决方案

切换命令行 sudo systemctl set-default multi-user.target sudo reboot 安装驱动 # 切换到驱动目录 cd /home/user/download/ # 权限 sudo chmod ax NVIDIA-Linux-x86_64-520.56.06.run # 安装 sudo ./NVIDIA-Linux-x86_64-520.56.06.run 安装过程中&#xff0c;有个是否安…

QBrush的setColor函数不能改变画刷颜色的原因及解决方法

如下代码&#xff1a; void QtWidgetsApplication1::paintEvent(QPaintEvent* event) {QPainter p(this);QBrush brush;brush.setColor(Qt::red);p.setBrush(brush);p.drawRect(10, 10, 300, 100); } 本意是想绘制一个红色矩形&#xff0c;但结果是矩形没有被红色填充&#x…