链表单向链表跳跃链表
单向链表 link list
t数组的局限:编译期就需要知道大小; 内存连续,插入困难
// 链表节点类 包含一个信息 和指向下一个 节点的指针clas IntLLNode{public:IntLLNode(){// 默认构造函数 没有info信息nextPtr_ = 0;// 空指针}IntLLNode(int data, IntLLNode* in = 0){// 第二个构造函数info_ = data;nextPtr_ = in;}public:int info_; // 包含一个信息 对用户很重要IntLLNode* nextPtr_;// 指向下一个 节点的指针 用于将节点连接起来组成链表}// 定义一个 节点指针IntLLNode* pt = new IntLLNode(10);//新建一个节点 其地址 赋给一个指向 IntLLNode 的指针 pt//// [pt] ----> | 10 | 也就是 pt->info_ 也就是 (*pt).info_// | \ | 也就是 pt->nextPtr_ 也就是 (*pt).nextPtr_ // 再定义一个节点pt->nextPtr = new IntLLNode(30);//新建一个节点 其地址 赋给一个指向 IntLLNode 的指针 pt->nextPtr_//// [pt] ----> | 10 | // | | -----> | 30 | 也就是 pt->nextPtr_->info_// | \ | 也就是 pt->nextPtr_->nextPtr_// 再定义一个节点pt->nextPtr_->nextPtr_ = new IntLLNode(50);//新建一个节点 其地址 赋给一个指向 IntLLNode 的指针 pt->nextPtr_->nextPtr_//// [pt] ----> | 10 | // | | -----> | 30 | // | | ------> | 50 | 也就是 pt->nextPtr_->nextPtr_->info_// | \ | 也就是 pt->nextPtr_->nextPtr_->nextPtr_
使用 头结点和尾节点来存储链表结构
//************************ intSLList.h **************************// 单链表 实现类 #ifndef INT_LINKED_LIST#define INT_LINKED_LIST// 单个节点// 定义一个 节点指针// IntLLNode* pt = new IntLLNode(10);//新建一个节点 其地址 赋给一个指向 IntLLNode 的指针 pt//// [pt] ----> | 10 | 也就是 pt->info_ 也就是 (*pt).info_// | \ | 也就是 pt->nextPtr_ 也就是 (*pt).nextPtr_ class IntSLLNode {public:IntSLLNode() {// 默认构造函数 没有info信息next = 0;// 空指针}IntSLLNode(int data, IntSLLNode *ptr = 0) {// 第二个构造函数info = data; next = ptr;}public: int info; // 包含一个信息 对用户很重要IntSLLNode *next; // 指向下一个 节点的指针 用于将节点连接起来组成链表};// 链表 类 保存了一个 头节点 和 一个尾节点 class IntSLList {public:IntSLList() {// 默认构造函数 这里定义和实现 head = tail = 0;// 节点 和 一个尾节点 指针赋值为 空 }~IntSLList();// 默认析构函数 只有定义 实现在 cpp文件中 int isEmpty() {//为空链表是否 return head == 0;}void addToHead(int); // 从头部添加 节点 void addToTail(int); // 从尾部添加 节点 int deleteFromHead(); // 从头部删除 节点 并返回该节点的信息 int deleteFromTail(); // 从尾部删除 节点 并返回该节点的信息 void deleteNode(int);//删除 bool isInList(int) const;void printAll() const;//打印所有的节点的信息 private:IntSLLNode *head, *tail;// 保存了一个 头节点 和 一个尾节点};
#endif
实现类cpp intSLList.cpp
头部插入节点 head 和 tail 仅仅是保存了 一个(节点)存储的地址
head ---> | 5 | | | ---> | 7 || | ---> | 4 | <-------- tail| |新建一个节点 | 9 | head ---> | 5 | | | | | ---> | 7 || | ---> | 4 | <-------- tail| | 新节点指向 head 指向的地址 new IntSLLNode9, head);| 9 | head ---> | 5 | | | -------> | | ---> | 7 || | ---> | 4 | <-------- tail原头结点指向新节点 head = new IntSLLNode(9,head);head ---> | | | 9 | | | -------> | 5 | | | ---> | 7 || | ---> | 4 | <-------- tail
| |
尾部插入一个节点
head ---> | 5 | | | ---> | 7 || | ---> | 4 | <-------- tail| |尾部新建一个节点 new IntSLLNode(9); head ---> | 5 | | | ---> | 7 || | ---> | 4 | <-------- tail| | | 9 | | \ | tail指向的节点 指向这个新节点 tail->next = new IntSLLNode(9)head ---> | 5 | | | ---> | 7 || | ---> | 4 | <-------- tail| | --------> | 9 | | \ | 尾节点tail 指向新的 尾节点 tail = tail->next;head ---> | 5 | | | ---> | 7 || | ---> | 4 | | | --------> | 9 | <-------- tail| \ |
双向向链表 link list 节点同时包含 指向前驱节点的指针 也包含 指向后继节点的指针
双向向链表
跳跃链表
跳跃链表
标准库中的链表 list #include
//一些成员函数assign(iterator first, iterator last) 删除所有节点,在first到last插入元素assign(size_type n, el) 删除所有节点,向其中插入n个elback() 尾节点元素front() 第一个节点元素clear() 删除所有节点empty() 判断是否为空erase() 删除一个节点insert() 插入一个元素pop_back() 删除最后一个节点pop_front() 删除第一个节点push_back() 在表尾插入push_front() 在表头插入sort() 排序swap() 与另一个链表互换unique() 从有序链表中删除重复的元素
测试代码
#include <iostream>
#include <list>//链表
#include <algorithm>// 算法
#include <deque>//队列
#include <functional>using namespace std;// 打印链表每一个元素
template<class T>
void printList(const list<T>& lst, char *s) {cout << s << ": ";for (typename list<T>::const_iterator i = lst.begin(); i != lst.end(); ++i)cout << *i << ' ';cout << endl;
}int main() {list<int> lst1;// 创建空链表 printList(lst1,"lst1"); // lst1 is emptylist<int> lst2(3,7); printList(lst2,"lst2"); // lst2 = (7 7 7)for (int j = 1; j <= 5; j++)// lst1 = (1 2 3 4 5)lst1.push_back(j);//尾后插入元素 list<int>::iterator i1 = lst1.begin(), i2 = i1, i3;i2++; i2++; i2++;list<int> lst3(++i1,i2); printList(lst3,"lst3"); // lst3 = (2 3)list<int> lst4(lst1);printList(lst4,"lst4"); // lst4 = (1 2 3 4 5)i1 = lst4.begin();lst4.splice(++i1,lst2); printList(lst2,"lst2"); // lst2 is emptyprintList(lst4,"lst4"); // lst4 = (1 7 7 7 2 3 4 5)lst2 = lst1;printList(lst2,"lst2"); // lst2 = (1 2 3 4 5)i2 = lst2.begin();lst4.splice(i1,lst2,++i2); printList(lst2,"lst2"); // lst2 = (1 3 4 5)printList(lst4,"lst4"); // lst4 = (1 7 7 7 2 2 3 4 5)i2 = lst2.begin();i3 = i2;lst4.splice(i1,lst2,i2,++i3);printList(lst2,"lst2"); // lst2 = (3 4 5)printList(lst4,"lst4"); // lst4 = (1 7 7 7 2 1 2 3 4 5)lst4.remove(1); printList(lst4,"lst4"); // lst4 = (7 7 7 2 2 3 4 5)lst4.sort(); printList(lst4,"lst4"); // lst4 = (2 2 3 4 5 7 7 7)lst4.unique(); printList(lst4,"lst4"); // lst4 = (2 3 4 5 7)lst1.merge(lst2); printList(lst1,"lst1"); // lst1 = (1 2 3 3 4 4 5 5),printList(lst2,"lst2"); // lst2 is emptylst3.reverse(); printList(lst3,"lst3"); // lst3 = (3 2) lst4.reverse();printList(lst4,"lst4"); // lst4 = (7 5 4 3 2)lst3.merge(lst4,greater<int>()); printList(lst3,"lst3"); // lst3 = (7 5 4 3 3 2 2)printList(lst4,"lst4"); // lst4 is emptylst3.remove_if(bind2nd(not_equal_to<int>(),3));printList(lst3,"lst3"); // lst3 = (3 3)lst3.unique(not_equal_to<int>());printList(lst3,"lst3"); // lst3 = (3 3)return 0;
}
相关文章:
链表单向链表跳跃链表
单向链表 link list t数组的局限:编译期就需要知道大小; 内存连续,插入困难 // 链表节点类 包含一个信息 和指向下一个 节点的指针clas IntLLNode{public:IntLLNode(){// 默认构造函数 没有info信息nextPtr_ 0;// 空指针}IntLLNode(int …...
博客无限滚动加载(html、css、js)实现
介绍 这是一个简单实现了类似博客瀑布流加载功能的页面,使用html、css、js实现。简单易懂,值得学习借鉴。👍 演示地址:https://i_dog.gitee.io/easy-web-projects/infinite_scroll_blog/index.html 代码 index.html <!DOCT…...
腾讯云南京服务器性能如何?南京服务器测速IP地址
腾讯云服务器南京地域怎么样?南京地域很不错,正好处于中间的位置,南方北方用户均可以选择,网络延迟更低速度更快,并且目前南京地域有活动,南京地域可用区可选南京一区、南京二区和南京三区,腾讯…...
MySQL和Oracle中,语法的不同点以及如何在xml中书写日期比较大小
众所周知mysql和oracle的语法有点相识,又有点不同。 在MySQL和Oracle中,语法的不同点有以下几个方面: 数据类型:MySQL和Oracle支持的数据类型有所不同,比如MySQL支持的数据类型包括:整型、浮点型、字符型、…...
谈谈Redis分布式锁
目录 一、回顾分布式锁 (一)理解分布式锁的定义 (二)分布式锁的约束条件 (三)分布式锁常见实现方式 基于数据库的分布式锁 基于缓存的分布式锁 基于分布式一致性算法的分布式锁 基于文件系统的分布…...
Redis的java客户端-RedisTemplate光速入门
一.创建springboot项目 二.引入2个依赖 <!-- redis依赖-->这个已经引入了,因为创建的时候勾选了<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><…...
格点数据可视化(美国站点的日降雨数据)
获取美国站点的日降雨量的格点数据,并且可视化 导入模块 from datetime import datetime, timedelta from urllib.request import urlopenimport cartopy.crs as ccrs import cartopy.feature as cfeature import matplotlib.colors as mcolors import matplotli…...
YoloV8改进策略:LSKNet加入到YoloV8中,打造更适合小目标的YoloV8
文章目录 摘要论文:LSKNet:大选择核网络在遥感目标检测中的应用1、简介2、相关工作2.1、遥感目标检测框架2.2、大核网络2.3、注意力/选择机制3、方法3.1、LSKNet架构3.2、大核卷积3.3、空间核选择4、实验4.1、数据集4.2、实现细节4.3、消融实验4.4、主要结果4.5、分析5、结论…...
力扣-303.区域和检索-数组不可变
Idea 需计算数组nums在下标right 和 left-1 的前缀和,然后计算两个前缀和的差即可。 需要注意的是,当left为0的时候,如果还是left-1则会发生数组访问越界错误。 AC Code class NumArray { public:vector<int> sum;NumArray(vector<…...
web:[极客大挑战 2019]LoveSQL
题目 打开页面显示如下 查看源代码,查到一个check.php,还是get传参 尝试账号密码输入 题目名为sql,用万能密码 1or 11# 或 admin or 11 给了一段乱码,也不是flag 查看字段数 /check.php?usernameadmin order by 3%23&pass…...
数据结构—快速排序(续)
引言:在上一篇中我们详细介绍了快速排序和改进,并给出了其中的一种实现方式-挖坑法 但其实快速排序有多种实现方式,这篇文章再来介绍其中的另外两种-左右指针法和前后指针法。有了上一篇挖坑法的启示,下面的两种实现会容易许多。 …...
Snapdragon Profiler分析Android GPU
Snapdragon Profiler(骁龙分析器)是一款性能分析软件,在Windows、 Mac、和 Linux平台上都可以运行,主要是用来分析使用了高通骁龙处理器的Android设备。 Snapdragon Profiler通过USB连接这些Android设备,开发者可以用…...
Cannot download sources:IDEA源码无法下载
问题 Swagger的相关包,无法看到注释; 在class文件的页面,点击下载源码,源码下载不了,IDEA报下面的错误。 报错 Cannot download sources Sources not found for: io.swagger.core.v3:swagger-annotations:2.2.9 解决…...
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
IO流之字符流 1. 字符流1.1 字符输入流【Reader】1.2 FileReader类构造方法读取字符数据 1.3 字符输出流【Writer】1.4 FileWriter类构造方法基本写出数据关闭和刷新写出其他数据 2. IO异常的处理JDK7前处理JDK7的处理JDK9的改进 3. 综合练习练习1:拷贝文件夹练习2&…...
监狱工具管理系统-监狱劳动工具管理系统
监狱劳动工具管理系统(智工具DW-S308)是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对工具进行统一管理、分析的信息化、智能化、规范化的系统。 当前各级监狱工器具管理更多的是借助于传统的人工管理方法和手段,数据的采集和录入一直以…...
蓄水池算法
题目: 假设有一组数据流元素有 N 个(事先不知道 N 具体值),我们希望选择 n 个样本(N > n),使用怎样的策略进行抽样可以使得数据流中每个元素被选择的概率恰为 n / N 结论: 创建大…...
作业 day4
完成父子进程通信...
erlang练习题(四)
题目一 传入列表 L1[K|]、L2[V|]、L3[{K,V}|_],L1和L2一一对应,L1为键列表,L2为值列表,L3为随机kv列表, 将L1和L2对应位合并成KV列表L4,再将L3和L4相加,相同key的value相加 如:L…...
YoloV5实时推理最短的代码
YoloV5实时推理最简单代码 import cv2 import torch# 加载YOLOv5模型 model torch.hub.load(ultralytics/yolov5, yolov5s)# 使用CPU或GPU进行推理 device cuda if torch.cuda.is_available() else cpu model.to(device)# 打开摄像头(默认摄像头) cap…...
Tensorflow、Pytorch和Ray(张量,计算图)
1.深度学习框架(Tensorflow、Pytorch) 1.1由来 可以追溯到2016年,当年最著名的事件是alphago战胜人类围棋巅峰柯洁,在那之后,学界普遍认为人工智能已经可以在一些领域超过人类,未来也必将可以在更多领域超过…...
TinyWebServer学习笔记-让程序跑起来
目标:通过这个HTTP项目熟悉网络编程 系统:Ubuntu20.04 首先,学习的第一步就是先让程序跑起来,使用git将项目下载到虚拟机内: git clone https://github.com/qinguoyi/TinyWebServer.git 提前把MySQL数据库安装好&am…...
_tkinter.TclError: no display name and no $DISPLAY environment variable 解决
启动kohya_ss时可能会发生错误: _tkinter.TclError: no display name and no $DISPLAY environment variable 解决办法: 1、apt-get install xvfb //安装xvfb // 启动虚拟显示器 2、Xvfb :99 -screen 0 1024x768x16 & export DISPLAY:99 ps aux…...
我出手了!
时光飞逝,程序员小灰这个微信公众号,已经运营整整7年时间了。 在这7年里,小灰输出过各种各样的文章和视频,有讲编程技术的,有讲职业规划的,有讲互联网行业新闻的,也有讲自己个人生活的。 不过&a…...
springboot的配置文件(properties和yml/yaml)
springboot的配置文件有两种格式分别是properties和yml/yaml 创建配置文件 在创建springboot项目时候,会默认生成application.properties这种格式 书写风格 端口 application.propertis server.port8080 application.yml server:port: 8080 连接数据库 applica…...
SLAM面试笔记(7) — Linux面试题
目录 问题1:Linux系统基本组件? 问题2:Linux和Unix有什么区别? 问题3:Linux下编译程序 问题4:gcc基本格式和常用指令 问题5:用什么命令查找内存和交换使用情况? 问题6…...
QUIC不是TCP的替代品
QUIC取代了TCP成为HTTP3的基础传输协议,不是因为QUIC能够取代TCP的所有应用场景,而是因为QUIC更适合HTTP的请求/响应业务模型。原文: QUIC Is Not a TCP Replacement TCP新规范(RFC 9293)的发布是网络界的一件大事,值得围绕这一主题发表第二篇…...
计算机竞赛 目标检测-行人车辆检测流量计数
文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …...
GPT系列模型解读:GPT-1
GPT系列 GPT(Generative Pre-trained Transformer)是一系列基于Transformer架构的预训练语言模型,由OpenAI开发。以下是GPT系列的主要模型: GPT:GPT-1是于2018年发布的第一个版本,它使用了12个Transformer…...
王杰国庆作业day3
父子进程对话 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <my_head.h> int main(int argc, const char *argv[]) {mkfifo("./fifo1",0664);mkfifo("./fifo2",0664);pid_t cpid fork();if(0 < cp…...
量子计算基础知识—Part1
1.什么是量子计算机? 量子计算机是基于量子力学原理构建的机器,采用了一种新的方法来处理信息,从而使其具有超强的功能。量子计算机使用Qubits处理信息。 2. 什么是量子系统? 一个量子系统指的是由量子力学规则描述和控制的物理…...
推荐网站在线看兄弟们/广州疫情最新动态
2019独角兽企业重金招聘Python工程师标准>>> 一、框架原理 sqlMapConfig.xml:(是mybatis的全局配置文件,名称不固定的)配置了数据源、事务等mybatis运行环境 mapper.xml:配置sql语句 SqlSessionFactory:(会…...
网站制作如何/福建seo搜索引擎优化
分析一下发现如果每一次放进去一个新,它就会对所有覆盖这个点的所有颜色的L加1那么另add(i,j)为第一个放到i第二个放到j放完之后这种状态有多少组交叉那么有 int add(int x, int y) {int cnt 0;for(int i0;i<26;i){if(pos[i][1] < x && pos2[i][1] &…...
徐州有哪些制作网站的公司/seo流量排名工具
Jquery Mobile中pageinit等函数执行两次的问题【终极解决】参考文章: (1)Jquery Mobile中pageinit等函数执行两次的问题【终极解决】 (2)https://www.cnblogs.com/langu/p/3914987.html 备忘一下。...
惠州做棋牌网站建设哪家公司收费合理/百度营销后台
文章目录**1. 概述****2. String类的特点****3. 常见操作方法****3.1 构造方法****3.2 判断功能****3.3 获取功能****3.4 转换功能****3.5 其他功能****4. String类练习**4.1 把数组中的数据按照指定个格式拼接成一个字符串**4.2 字符串反转****4.3 统计大串中小串出现的次数**…...
腾讯建站平台官网/百度竞价培训
如何打开文件Stud.txt,然后用"Orange"替换任何出现的"A"? 请(一如既往)遵循一般问题指南,说明任何特殊限制,显示您迄今为止尝试过的内容,并询问具体让您感到困惑的内容。 另外,请用[ho…...
做网站如何躲过网警/旅游网站网页设计
刚从山东回来,一堆麻烦事情。这不,快要下班了,客户说oracle rac挂了。 这是有两个节点和一个共享存储组成的rac系统,安装了oracle 11g r2.我试着登录系统查看,发现一个服务器不能联通。另一个上去了,执行df…...