单链表专题(上)(顺序表链表线性表)

在开始之前思考一个顺序表的问题
1. 中间/头部的插⼊删除,时间
复杂度为O(N)
2. 增容需要申请新空间,拷⻉数据,释放旧空间。会有不⼩的消耗。
3. 增容⼀般是呈2倍的增⻓,势必会有⼀定的空间浪费。例如当前容量为100,满了以后增容到
200,我们再继续插⼊了5个数据,后⾯没有数据插⼊了,那么就浪费了95个数据空间。
思考:如何解决以上问题呢?
答案是肯定的,  那就是 链表

1.链表顺序表线性表

链表和顺序表都是线性表 

线性表:

1.在逻辑结构上一定是线性的

2.在物理结构上不一定是线性的

链表在物理结构上就不是线性的。

如上图所示: 

顺序表分布是连续的一整块的,但是链表在内存的上的分布是杂乱无章的

那么这里就会有一个疑问,既然链表分布是杂乱无章的,那么数据到底是怎么找到的呢

链表就和下面的火车挺像的

火车是一节一节车厢连着的 ,火车连接的地方都有一个钩子把俩节车厢钩在一起,

同理

链表的数据也是

  说到底链表就是一个结构体,然后他分为两个部分

1.上面的数字中保存的数据

2.下一个结构体的地址

是的链表就是由一个个节点(结点)组成的

举例:

上图就是由四个节点组成的

顺序表底层是通过数组来实现的,数组的内存分布就是连续的,所以顺序表在逻辑上和物理上都是线性的

链表里面存着下一个数据的指针,他并不是一个数组,他分配的内存自然也不是连续的

顺序表扩容如果满了一般是按照1.5倍扩容,或2倍,但插入的数据一般都会小于阔如的数量,所以就会有空间存在浪费、

链表扩容,他是采用地址,那么他只需要存下那个的地址,自然也就不会存在浪费

那么我们结构体就可以定义成这样

struct SListNode
{int data;struct SListNode* next;
};

Node也就是节点的意思

链表就是List ,SLlist就是单链表  

ps:链表里面还分为很多种

2.代码实现

老样子先添加三个文件

2.1 链表的打印

SList.h头文件的内容

在text文件里面导入头文件创建四个变量 

单链表顾名思义单向的,只往一个方向走

所以我们可以在每一个的数据加上下一个数据的地址 

 

 

但是正常的链表插入不会用这种方式这种方式只是用来展示

链表的尾插

 

尾插就需要改变3原来指向的NULL改成指向四然后四指向NULL

接着找到尾节点然后才可以加上数据

 还需要写其他的插入(头插任意位置的插入)这些都需要申请空间这里直接把申请空间写成一个函数

2.2节点申请

2.3尾插

 2.4头插

 2.5尾删

 效果差不多就是这样

 

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

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

相关文章

类模板分文件编写

问题: 类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到 解决: 解决方式1:直接包含.cpp源文件 解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称…

订单系统-RPC快速入门

RPC快速入门 概述 关于rpc,只需要知道他是一种协议,项目之间能够远程调用函数。 快速入门 我们前边下载好的两个包,在idea中打开之后,我们创建这么几个文件夹。 至于是干什么的,以后细说。创建好之后我们在produc…

【Java 面试题】面向对象和面向过程的区别

面向对象和面向过程的区别? 面向对象编程(OOP)和面向过程编程(POP)是两种不同的编程范式,它们之间有一些重要的区别: 思想方式: 面向对象编程:将问题看作是一组对象之间…

【OpenStack】创建并部署自己的Web服务器和应用

【OpenStack】创建并部署自己的Web服务器和应用 目录 【OpenStack】创建并部署自己的Web服务器和应用云服务的工作原理查看Swift Python SDK连接发送请求使用其他SDK和其他语言运行项目克隆存储库安装项目依赖项定义环境配置启动服务器推荐超级课程: Docker快速入门到精通

C语言如何定义有参函教?

一、问题 有参函数是函数的重点部分,那么如何定义有参函数呢? 二、解答 有参函数定义的⼀般形式如下。 类型声明符 函数名(形式参数列表) {声明部分;语句; } 在形参列表中给出的参数称为形式参数,它们可以是各种类型…

从零开始搭建游戏服务器 第七节 创建GameServer

目录 前言正文创建GameServer模块修改配置创建NettyClient连接到登录服登录服修改创建协议游戏服注册到登录服 总结 前言 上一节我们使用自定义注解反射简化了协议解包和逻辑处理分发流程。 那么到了这里登录服登录服的架构已经搭建的差不多了,一些比较简单的、并发…

使用 Outline 构建 企业 or 个人 知识库面临的问题

前不久,我写了一篇文章,介绍《如何在本地部署安装 Outline》,我之所以写这篇文章,主要原因是我最近需要做一个项目,使用 Outline 来构建一个公司级知识库。所以我需要在本地先搭建一个,来撰写一些前期的文档…

【环境配置】Ubuntu MySQL 8.0.28 安装并允许外部客户端连接

文章目录 MySQL 安装步骤配置 MySQL Server 允许外部连接 MySQL 安装步骤 步骤一:在 MySQL 官网找到 apt 仓库,下载最新的仓库 点击 Download: 输入如下命令: sudo wget -c https://dev.mysql.com/get/mysql-apt-config_0.8…

2014年认证杯SPSSPRO杯数学建模A题(第一阶段)轮胎的花纹全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 A题 轮胎的花纹 原题再现: 轮胎被广泛使用在多种陆地交通工具上。根据性能的需要,轮胎表面常会加工出不同形状的花纹。在设计轮胎时,往往要针对其使用环境,设计出相应的花纹形状。   第一阶段问…

JVM(三)——字节码技术

三、字节码技术 1、类文件结构 一个简单的 HelloWorld.java package com.mysite.jvm.t5; // HelloWorld 示例 public class HelloWorld {public static void main(String[] args) {System.out.println("hello world");} }执行 javac -parameters -d . HellowWorld.…

Selenium 自动化 —— 实战篇之自动登录163邮箱

Selenium 自动化专栏系列文章 (一)入门和 Hello World 实例(二)使用WebDriverManager自动下载驱动(三)Selenium IDE录制、回放、导出Java源码(四)浏览器窗口操作(五&…

AI时代-普通人的AI绘画工具对比(Midjouney与Stable Diffusion)

AI时代-普通人的AI绘画工具对比(Midjouney与Stable Diffusion) 前言1、基础对比Stable Diffusion(SD)SD界面安装与使用SD Midjouney(MJ) 2、硬件与运行要求对比Stable Diffusion硬件要求内存硬盘显卡 Midjo…

Linux实现m4a格式转换为wav格式

需要在linux上安装ffmpeg 参考博客 Linux上安装ffmpeg修改环境变量【这一点很重要,自己因为没有添加环境变量,捣鼓了很长时间】 将ffmpeg的绝对路径添加到 PATH 环境变量中,以让系统能找到ffmpeg的安装路径。 # /home//project/ffmpeg-6.1-a…

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件 0. 引言1. 安装 Markdown Viewer 插件2. 使用 Markdown Viewer 阅读 Markdown 格式文件 0. 引言 大部分程序员都喜欢 Markdown 格式的文件,这时给一些没有在电脑上安装 Markdown 编辑器的同事分享资料时&…

在 Code Review 中寻找什么?

当你审查别人的代码时,你会寻找什么? 无论你是通过像 Upsource 这样的工具来审查代码,还是在同事讲解他们代码的过程中进行审查,在任何情况下,有些事情都比其他事情更容易评论。比如: 格式:空…

PCA+DBO+DBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper!

PCADBODBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper! 一、蜣螂优化算法 摘要:受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发,提出了一种新的基于种群的优化算法(Dung Beetle Optim…

zookeeper面试题

文章目录 ZooKeeper 是什么?ZooKeeper 提供什么?1. 文件系统2. 通知机制 ZooKeeper 文件系统四种类型的 znode1. PERSISTENT (持久化目录节点)2. PERSISTENT_SEQUENTIAL (持久化顺序编号目录节点)3. EPHEMERAL (临时目录节点)4. EPHEMERAL_SEQUENTIAL (临…

GIMP - GNU 图像处理程序 - 工具栏窗口 (Toolbox) 显示

GIMP - GNU 图像处理程序 - 工具栏窗口 [Toolbox] 显示 1. File -> Open2. GIMP 主面板里,右击弹出菜单 -> Tools -> New Toolbox3. Windows -> Dockable Dialogs -> Tool Options4. 工具选项拖动到工具箱里面5. Always On TopReferences GIMP 是跨平…

sqlite3嵌入式开发板命令行方式使用

如何在编译嵌入式版本的sqlite3,请看我上一篇文章 sqlite3 交叉编译-CSDN博客 一、sqlite3命令行方式使用 假如我将编译好的嵌入式的sqlite3放置在如下路径: 进入bin目录进行操作 1.运行sqlite3 运行sqlite3有两种方式 1)直接在内存里面…

Django——Ajax请求

Django——Ajax请求 一、响应 Json 数据 path(str/ , views.str_view), path(json/ , views.json_view), path(jsonresponse/ , views.jsonresponse_view), path(ls/ , views.ls),from django.shortcuts import render , HttpResponse from django.http import JsonResponse …