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

devtools/2025/3/19 5:02:08/

一.链表的概念

【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.ppmy.cn/devtools/168247.html

相关文章

2024山东大学计算机复试上机真题

2024山东大学计算机复试上机真题 2024山东大学计算机复试机试真题 历年山东大学计算机复试上机真题 历年山东大学计算机复试机试真题 在线评测:传动门:pgcode.cn 最长递减子序列 题目描述 输入数字 n,和 n 个整数,输出该数字…

Windows11 新机开荒(二)电脑优化设置

目录 前言: 一、注册微软账号绑定权益 二、此电脑 桌面图标 三、系统分盘及默认存储位置更改 3.1 系统分盘 3.2 默认存储位置更改 四、精简任务栏 总结: 前言: 本文承接上一篇 新机开荒(一) 上一篇文章地址&…

Flink State 是处理有状态流计算的核心机制,其典型应用场景及具体说明

1. 实时数据去重(Deduplication) 场景:在实时处理中避免重复处理相同数据(如订单ID、日志唯一标识)。实现:使用 KeyedState(如 ValueState 或 MapState)记录已处理的数据标识。示例:ValueState<Boolean> seenState = getRuntimeContext().getState(new ValueSta…

基于Springboot+服务器磁盘的本地文件存储方案

[local-file-system]基于服务器磁盘的本地文件存储方案 仅提供后端方案 github 环境 JDK11linux/windows/mac 应用场景 适用于ToB业务&#xff0c;中小企业的单体服务&#xff0c;仅使用磁盘存储文件的解决方案 仅使用服务器磁盘存储 与业务实体相结合的文件存储方案&…

golang算法二叉搜索树

98. 验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示…

文件系统 linux ─── 第19课

前面博客讲解的是内存级文件管理,接下来介绍磁盘级文件管理 文件系统分为两部分 内存级文件系统 : OS加载进程 ,进程打开文件, OS为文件创建struct file 和文件描述符表 ,将进程与打开的文件相连, struct file 内还函数有指针表, 屏蔽了底层操作的差异,struct file中还有内核级…

IDEA 一键完成:打包 + 推送 + 部署docker镜像

1、本方案要解决场景&#xff1f; 想直接通过本地 IDEA 将最新的代码部署到远程服务器上。 2、本方案适用于什么样的项目&#xff1f; 项目是一个 Spring Boot 的 Java 项目。项目用 maven 进行管理。项目的运行基于 docker 容器&#xff08;即项目将被打成 docker image&am…

手写Tomcat

手写Tomcat Tomcat详解划分结构详解结构代码示例reqHttpServletRequestHttpServletResponse Servlet 接口GenericServlet 抽象类HttpServlet 抽象类Util 工具包ResponseUtilSearchClassUtilWebservlet 注解 webapps.mywebLoginServletShowServlet ServletConfigMappingMyTomcat…