C++11 数据结构2 线性表的链式存储,实现,测试

线性表的链式存储 --单链表

前面我们写的线性表的顺序存储(动态数组)的案例,最大的缺点是插入和删除时需要移动大量元素,这显然需要耗费时间,能不能想办法解决呢?链表。

链表为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。

线性表的链式存储结构中,每个节点中只包含一个指针域,这样的链表叫单链表。

一 单链表中任意一个节点的 数据模型

通过一组任意的存储单元来存储线性表中的数据元素。每给元素存放元素自身的信息外,还需要存放一个指向其后继的指针,其中data为数据域,存放数据元素;next为指针域,存放后继指针,next的后继指针中的内容也是   和当前节点一样 的数据模型

LNode

typedef struct LNode{    //定义单链表结点类型
    int data;            //数据域
    struct LNode *next;  //指针域
}LNode;

其中 int data; 是数据域,当然这里只是用int 类型进行演示。实际代码中可以有很多的类型。链表的示意图如下

传统链表问题的提出

当我们 的   数据域  变化的时候怎么弄呢?

现在  数据域 只有一个 int data, 当我们还要添加 string name , char * othername的时候,怎么办?

也就是说:我们的数据域是 千变万化 的,因此  传统链表  不适用。

Linux内核链式链表

因此 Linux 的内核大神,想到了一个方法

让 数据域  和 指针域 分离, 让业务域包含一个 链式节点,,这个节点也只有一个指向 同样的链式节点。

让数据域 包裹 指针域

typedef struct LNode{    //定义单链表结点类型
    struct LNode *next;  //指针域
}LNode;

typedef struct Teacher{
    int age;
    string name;
    char *othername;
    LNode pnext;
}

企业级链式链表

上述Linux 链式链表的每次都要求 pnext 对于 整个struct 的偏移,

于是企业在开发过程中,就改了一版,让 链表节点在 业务节点的最开始

typedef struct LNode{    //定义单链表结点类型
    struct LNode *next;  //指针域
}LNode;

typedef struct Teacher{
    LNode pnext;
    int age;
    string name;
    char *othername;
}

二 各个链表的模型

三,代码实现

底层开发 和 上层调用 公用的 002linklist.h

上层调用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于spring boot的留守儿童爱心管理系统

基于spring boot的留守儿童爱心管理系统设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开…

python输入某年某月某日判断这一天是这一年的第几天

如何使用python实现输入某年某月某日判断这一天是这一年的第几天 from datetime import datetime #引入日期类 def is_leap_year(year):"""判断是否为闰年"""return (year % 4 0 and year % 100 ! 0) or (year % 400 0)# 根据年份和月份返回当…

熟悉数电知识

23.数电 1. 建立时间、保持时间 建立时间setup time:时钟上升沿到来之前,输入端数据已经来到并稳定持续的时间。 保持时间hold time:时钟上升沿到来之后,传输端数据保持稳定并持续的时间。 2.二分频电路 每当输入一个时钟信号…

学习基于pytorch的VGG图像分类 day5

注:本系列博客在于汇总CSDN的精华帖,类似自用笔记,不做学习交流,方便以后的复习回顾,博文中的引用都注明出处,并点赞收藏原博主. 目录 VGG的数据集处理 1.数据的分类 2.对数据集的处理 VGG的分类标签设置 …

idea工具使用Tomcat创建jsp 部署servlet到服务器

使用tomcat创建jsp 在tomcat官网中下载对应windows版本的tomcat文件 Apache Tomcat - Welcome! 解压到系统目录中,记得不要有中文路径 新建一个java项目 点击右上角 点击加号 找到Tomcat Service的 Local 点击右下角的Fix一下,然后ok关闭 再重新打开一…

前端HTML入门基础6(框架标签,实体,全局属性,meta元信息)

前端HTML入门基础6(框架标签,实体,全局属性,meta元信息) 框架标签iframeHTML实体全局属性bdo标签里的dir,div里的dirmeta元信息 框架标签iframe 框架标签是HTML中用于创建网页布局的标签。常见的框架标签有…

vue2响应式原理----发布订阅模式

很多人感觉vue2的响应式其实用到了观察者发布订阅。我们先来看一下简单的发布订阅的代码: // 调度中心 class Dep {static subscribes {}// 订阅所有需求static subscribe (key, demand) {// 对需求分类收集if (!Dep.subscribes[key]) Dep.subscribes[key] []Dep…

C语言-详解内存函数

文章目录 1.memcpy使用和模拟实现1.1 memcpy函数的使用规则1.2 memcpy函数的使用1.2 模拟实现memcpy函数 2.memmove 函数的使用和模拟实现2.1 memmove 函数使用规则2.2 memmove函数的使用2.3 模拟实现memmove函数2.3.1 从后往前移2.3.2 从前往后移 2.4 算法实现2.4.1 从前往后移…

基于Springboot+Vue的Java项目-旅游网站系统(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

JavaScript中的Blob、Buffer、ArrayBuffer和TypedArray详解

文章的更新路线:JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题(HTML基础知识和CSS基础知识已经更新完毕) 正文 摘要:本文详细介绍了JavaS…

我是如何快速上线项目文档的

Hello , 我是"小恒不会java" 本文适合有使用Markdown,HTML,nginx经验的读者阅读 其中每一个小标题代表作者的突破点,每个技巧都是小tip 说说我的上线流程 使用mkdocs生成模板写入写好的Markdown文件mkdocs build生成静态文件&…

C语言基础(四)

C语言基础 一维数组数组初始化全部初始化部分初始化数组的默认值冒泡排序 字符数组 二维数组初始化行数是否可省略列数是否可以省略部分初始化 访问二维字符数组 函数分类库函数自定义函数调用自定义函数函数声明 一维数组 概念&#xff1a;一组数据类型相同的元素的集合 <…

计算点到线的距离(友元)

计算点到直线的距离。类定义的基本要求&#xff1a; 定义一个点类Point&#xff0c;包含有2 个私有数据成员x和y,表示点的坐标&#xff1b;一个构造函数。定义一个直线类Line&#xff0c;包含有3 个私有数据成员a,b和c&#xff0c;表示直线方程axbyc 0&#xff1b;一个构造函数…

[大模型]# Yi-6B-Chat Lora 微调

Yi-6B-Chat Lora 微调 概述 本节我们介绍如何基于 transformers、peft 等框架&#xff0c;对 Yi-6B-Chat 模型进行 Lora 微调。Lora 是一种高效微调方法&#xff0c;深入了解其原理可参见博客&#xff1a;知乎|深入浅出Lora。 本节所讲述的代码脚本在同级目录 04-Yi-6B-Chat…

ThignsBoard通过服务端订阅共享属性

MQTT基础 客户端 MQTT连接 通过服务端订阅属性 案例 1、首先需要创建整个设备的信息&#xff0c;并复制访问令牌 ​​2、通过工具MQTTX连接上对应的Topic 3、测试链接是否成功 4、在MQTT上订阅对应的Topic 5、在客户端添加共享属性信息 6、查看整个设备的遥测数据 M…

数据库(2)

目录 6.buffer pool,redo log buffer和undo logo&#xff0c;redo logo,bin log概念以及关系&#xff1f; 7.从准备更新一条数据到事务的提交的流程描述&#xff1f; 8.能说下myisam和innodb的区别吗&#xff1f; 9.说下MySQL的索引有哪些吧&#xff1f; 10.什么是B树&…

基于Pytorch实现图像分类——基于jupyter

分类任务 网络基本构建与训练方法&#xff0c;常用函数解torch.nn.functional模块nn.Module模块 MNIST数据集下载 from pathlib import Path import requestsDATA_PATH Path("data") PATH DATA_PATH / "mnist"PATH.mkdir(parentsTrue, exist_okTrue)U…

vue3中使用webstocket

1.在项目中创建webstocket.ts文件 export default class SocketService {// 单例static instance null;static get Instance() {if (!this.instance) {this.instance new SocketService();}return this.instance;}// 和服务端连接的socket对象ws null;// 存储回调函数callB…

202206青少年软件编程(scratch图形化) 等级考试试卷(四级)

第1题&#xff1a;【 单选题】 执行下列程序&#xff0c; 说的内容是&#xff1f; &#xff08; &#xff09; A:使 B:命 C:初 D:心 【正确答案】: D 【试题解析】 : 注意标点符号也是一个字符&#xff0c; 连接后字符串是“牢记使命&#xff01; 不忘初心&#xff0c; …

宝藏免费音乐软件LX music

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 宝藏免费音乐软件LX music 前言LX Music的特色功能&#xff1a;音乐播放的新境界安装与配置&#xff1a;在不同平台上使用LX Music下载页面 主题定制 本文将深入研究LX Music&#xff0c;一款备受欢迎…