Linux-数据结构-线性表-单链表

一.链表的概念

【1】线性表的链式存储


    解决顺序存储的缺点,插入和删除,动态存储问题。


【2】特点:


       线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存储在任意内存未被占用的位置上。
    
       所以前面的顺序表只需要存储数据元素信息就可以了。在链式结构中还需要一个元素存储下一个元素的地址。


   
【3】结构:

    为了表示每个数据元素,ai与其直接后继数据元素ai+1之间的逻辑关系,对ai来说,除了存储其本身的信息外,还需要存一个指示器直接后续的信息。把存储元素信息的域叫数据域,把存储直接后继位置的域叫指针域。这两部分信息组成数据元素ai的存储映像,叫结点(Node);

二.链表的常规操作  ADT

单链表中,c语言的描述
typedef struct person {
    char name[32];
    char sex;
    int age;
    int score;
}DATATYPE;

typedef struct node {
    DATATYPE data;
    struct node *next,*prev;
}LinkNode;

typedef struct list {
    LinkNode *head;
    int tlen;
    int clen;
}LinkList;

LinkList *CreateLinkList(int len);
int InsertHeadLinkList(LinkList *list, DATATYPE data);
int ShowLinkList(LinkList *list);
LinkNode *FindLinkList(LinkList *list, char *name);
int DeleteLinkList(LinkList *list, char *name);
int ReviseLinkList(LinkList *list, char *name, DATATYPE data);
int DestroyLinkList(LinkList *list);
int InsertTailLinkList(LinkList *list, DATATYPE data);


  三.  顺序表和链表 优缺点

    【1】存储方式:


        顺序表是一段连续的存储单元
        链表是逻辑结构连续物理结构(在内存中的表现形式)不连续

    【2】时间性能

             查找 顺序表O(1)
             链表  O(n)


    【3】插入和删除

            顺序表 O(n)
            链表   O(1)


    【4】空间性能

            顺序表 需要预先分配空间,大小固定
            链表, 不需要预先分配,大小可变,动态分配

四.源码

【1】linklist.h

   (1)定义存放数据的结构体,这里data不使用指针的原因是单链表有专门的指针域指向下一个节        点的地址

(2)定义结点包含指针域和数据域

(3)定义头,后来用于存放第一个节点的地址

【2】linklist.c

(1)创建链表头

(2)从头插入数据
1.思维导图

2.代码

(3)打印链表

(4)获取长度

(5)从尾插入

(6)查找

(7)按位置插入

(8)删除

(9)修改

(10)消除

    
 

    

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

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

相关文章

Apifox Helper 自动生成API接口文档

在我们开发过程中我们在编写请求地址和编写请求参数的时候特别花费时间耗费了我们很多时间,作为一个程序员,更应该把精力时间集中在开发上, Apifox Helper 是 Apifox 团队针对 IntelliJ IDEA 环境所推出的插件,可以在 IDEA 环境中…

【软考-架构】13.1、软件架构概述-构件技术

✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 ✨【重点】系统架构设计软件架构概述软件架构设计与生命周期构件🌟软件架构风格数据流风格调用/返回风格独立构件风格虚拟机风格仓库风格闭环控制风格C2体系结…

C++特性——智能指针

为什么需要智能指针 对于定义的局部变量,当作用域结束之后,就会自动回收,这没有什么问题。 当时用new delete的时候,就是动态分配对象的时候,如果new了一个变量,但却没有delete,这会造成内存泄…

基于SpringBoot+Vue的幼儿园管理系统+LW示例参考

1.项目介绍 系统角色:管理员、教师、普通用户功能模块:用户管理、教师管理、班级管理、幼儿信息管理、会议记录管理、待办事项、职工考核、请假信息、缴费信息、体检管理、资源管理、原料管理、菜品信息管理等技术选型:SpringBoot&#xff0…

网络通信(传输层协议:TCP/IP ,UDP):

Socket是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。 网络协议:一台电脑的数据怎么传递给另一台电脑,是由网络协议来规定的 端口号&#…

Qt之自定义界面组件 一

通过qt中的painter绘图事件绘制一个电池电量图的变化。效果如下图 创建一个基于界面widget工程,在wdiget界面添加一个widget界面,将添加的widget界面的类提升为Tbattery.在Tbattery类中重写painEvent电池电量代码 文件目录结构 主要部分代码 //Tbattery.cpp #inc…

AP AR

混淆矩阵 真实值正例真实值负例预测值正例TPFP预测值负例FNTN (根据阈值预测) P精确度计算:TP/(TPFP) R召回率计算:TP/(TPFN) AP 综合考虑P R 根据不同的阈值计算出不同的PR组合, 画出PR曲线,计算曲线…

学习单片机需要多长时间才能进行简单的项目开发?

之前有老铁问我,学单片机到底要多久,才能进行简单的项目开发?是三个月速成,还是三年磨一剑? 今天咱们就来聊聊这个话题,我不是什么高高在上的专家,就是个踩过无数坑、烧过几块板子的“技术老友”…

数学建模:MATLAB循环神经网络

一、简述 1.循环神经网络 循环神经网络(RNN)是一种用于处理序列数据的神经网络。不同于传统的前馈神经网络,RNN在隐藏层中加入了自反馈连接,使得网络能够对序列中的每个元素执行相同的操作,同时保持一个“记忆”状态…

《GitHub网路访问不稳定:解决办法》:此文为AI自动生成

《GitHub网路访问不稳定:解决办法》:此文为AI自动生成 GitHub 网路访问不稳定初现 在当今数字化时代,软件开发行业蓬勃发展,GitHub 作为全球最大的代码托管平台,已然成为无数开发者不可或缺的 “宝库”。它不仅汇聚了海…

SpringCloud 学习笔记2(Nacos)

Nacos Nacos 下载 Nacos Server 下载 | Nacos 官网 下载、解压、打开文件: 更改 Nacos 的启动方式 Nacos 的启动模式默认是集群模式。在学习时需要把他改为单机模式。 把 cluster 改为 standalone,记得保存! 启动startup.cmd Ubuntu 启动…

在windows10系统上安装docker,然后在容器中运行GPU版本的Pytorch,并使用vscode连接该容器

一 . 安装Docker Desktop 首先打开网址https://docs.docker.com/desktop/install/windows-install/ 下载完后,双击下面的exe文件进行安装,默认情况下,Docker Desktop 安装在C:\Program Files\Docker\Docker 出现提示时,请确保…

AI入门7:python三种API方式调用本地Ollama+DeepSeek

回顾 书接上篇:各种方式搭建了本地知识库: AI入门:AI模型管家婆ollama的安装和使用-CSDN博客 AI入门2:本地AI部署,用ollama部署deepseek(私有化部署)-CSDN博客 AI入门3:给本地d…

Unity导出WebGL

在Build Settings页面中平台(Platform)切换到WebGL平台 如何没有安装WebGL扩展插件,点击下载(Open Download Page) 下载扩展安装文件WebGL-Support-for-Editor-2023.1.0f1c1.exe 下载地址: http://downlo…

深入理解静态与动态代理设计模式:从理论到实践

静态代理设计模式 1.为什么需要代理设计模式? javaEE分层开发中,哪个层次对于我们来讲最重要 DAO---->Service---->Controller JavaEE分层中,最为重要的是Service层 Service层包含了那些代码 Service层核心功能(几十行 上百代码) 额外…

4.JVM-垃圾回收介绍

记录个人学习中记录笔记,如有错误请您指正,谢谢🙏 垃圾回收器发展史 传统垃圾回收: 分代回收 不同代有不同的垃圾回收机制 保底 标记清除算法 垃圾识别算法 引用计数法 缺陷:下图2 出现循环引用 无法解决 可达性分析 大部分(Java,pytho…

解决qt中自定插件加载失败,不显示问题。

这个问题断断续续搞了一天多,主要是版本不匹配问题。 我们先来看下 Based on Qt 6.6.0 → 说明 Qt Creator 本身 是基于 Qt 6.6.0 框架构建的。MSVC 2019, 64-bit → 说明 Qt Creator 是使用 Microsoft Visual C 2019 编译器(64 位) 编译的。…

MySQL的行级锁锁的到底是什么?

大家好,我是锋哥。今天分享关于【Mysql自增主键会遇到什么问题?】面试题。希望对大家有帮助; MySQL的行级锁锁的到底是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL的行级锁(Row-level Locking)是一种…

gitlab将本地项目提交到远程dev分支

获取Git路径 首先从远程获取到git路径,将给的git地址进行克隆到本地文件; git clone http:************.git 按照git地址的文件路径将本地项目,拷贝到目标文件中 在该路径中,初始化命令; # 初始化项目 git init #…

深度学习-服务器训练SparseDrive过程记录

1、cuda安装 1.1 卸载安装失败的cuda 参考:https://blog.csdn.net/weixin_40826634/article/details/127493809 注意:因为/usr/local/cuda-xx.x/bin/下没有卸载脚本,很可能是apt安装的,所以通过执行下面的命令删除: a…