数据结构------线性表

一、线性表顺序存储详解


(一)线性表核心概念

1. 结构定义
// 数据元素类型
typedef struct person {char name[32];char sex;int age;int score;
} DATATYPE;// 顺序表结构
typedef struct list {DATATYPE *head;  // 存储空间基地址int tlen;        // 表总长度int clen;        // 当前元素个数
} SeqList;
2. 核心特性
  • 有限性:元素个数n ≥ 0
  • 有序性:元素位置由序号确定(a₁~aₙ)
  • 同类型:所有元素属于同一数据类

(二)基本操作接口

1. 创建/销毁
// 创建顺序表
SeqList *CreateSeqList(int len) {SeqList *list = (SeqList *)malloc(sizeof(SeqList));list->head = (DATATYPE *)malloc(len * sizeof(DATATYPE));list->tlen = len;list->clen = 0;return list;
}// 销毁顺序表
int DestroySeqList(SeqList *list) {free(list->head);free(list);return 0;
}
2. 状态判断
// 判断表满
int IsFullSeqList(SeqList *list) {return list->clen >= list->tlen;
}// 判断表空
int IsEmptySeqList(SeqList *list) {return list->clen == 0;
}

(三)核心操作实现

1. 插入操作
// 尾部插入
int InsertTailSeqList(SeqList *list, DATATYPE data) {if (IsFullSeqList(list)) return -1;list->head[list->clen++] = data;return 0;
}// 指定位置插入
int InsertPosSeqList(SeqList *list, DATATYPE data, int pos) {if (pos < 0 || pos > list->clen) return -1;if (IsFullSeqList(list)) return -1;// 移动后续元素for(int i = list->clen; i > pos; i--) {list->head[i] = list->head[i-1];}list->head[pos] = data;list->clen++;return 0;
}
2. 删除操作
// 按姓名删除
int DeleteSeqList(SeqList *list, char *name) {for(int i = 0; i < list->clen; i++) {if(strcmp(list->head[i].name, name) == 0) {// 前移后续元素for(int j = i; j < list->clen-1; j++) {list->head[j] = list->head[j+1];}list->clen--;return 0;}}return -1;
}

(四)性能分析

1. 时间复杂度对比
操作最好情况最坏情况平均情况
随机访问O(1)O(1)O(1)
插入/删除O(1)O(n)O(n)
查找O(1)O(n)O(n)
2. 空间复杂度
  • 存储空间:O(n)
  • 额外空间:O(1)

(五)内存管理实践

1. 内存管理要点
  1. malloc/free配对:确保每个分配都有释放
  2. 越界访问检查:严格验证索引范围
  3. 野指针处理:释放后置空指针
    free(list->head);
    list->head = NULL;  // 重要!
    

(六)顺序存储优劣分析

1. 优势场景
  • 高频随机访问:学生成绩快速查询
  • 数据规模稳定:固定长度的传感器数据缓存
  • 内存敏感场景:无额外指针开销
2. 局限场景
  • 动态数据管理:实时消息队列
  • 高频插入删除:聊天记录管理
  • 超大稀疏数据:地图坐标存储

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

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

相关文章

【WPF】在System.Drawing.Rectangle中限制鼠标保持在Rectangle中移动?

方案一&#xff0c;在OnMouseMove方法限制 在WPF应用程序中&#xff0c;鼠标在移动过程中保持在这个矩形区域内&#xff0c;可以通过监听鼠标的移动事件并根据鼠标的当前位置调整其坐标来实现。不过需要注意的是&#xff0c;WPF原生使用的是System.Windows.Rect而不是System.D…

基于银河麒麟系统ARM架构安装达梦数据库并配置主从模式

达梦数据库简要概述 达梦数据库&#xff08;DM Database&#xff09;是一款由武汉达梦公司开发的关系型数据库管理系统&#xff0c;支持多种高可用性和数据同步方案。在主从模式&#xff08;也称为 Master-Slave 或 Primary-Secondary 模式&#xff09;中&#xff0c;主要通过…

系统思考全球化落地

感谢加密货币公司Bybit的再次邀请&#xff0c;为全球团队分享系统思考课程&#xff01;虽然大家来自不同国家&#xff0c;线上学习的形式依然让大家充满热情与互动&#xff0c;思维的碰撞不断激发新的灵感。 尽管时间存在挑战&#xff0c;但我看到大家的讨论异常积极&#xff…

Figma的汉化

Figma的汉化插件有客户端版本与Chrome版本&#xff0c;大家可根据自己的需要进行选择。 下载插件 进入Figma软件汉化-Figma中文版下载-Figma中文社区使用客户端&#xff1a;直接下载客户端使用网页版&#xff1a;安装chrome浏览器汉化插件国外推荐前往chrome商店安装国内推荐下…

【Go语言圣经2.5】

目标 了解类型定义不仅告诉编译器如何在内存中存储和处理数据&#xff0c;还对程序设计产生深远影响&#xff1a; 内存结构&#xff1a;类型决定了变量的底层存储&#xff08;比如占用多少字节、内存布局等&#xff09;。操作符与方法集&#xff1a;类型决定了哪些内置运算符…

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

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

SpringBoot 第一课(Ⅲ) 配置类注解

目录 一、PropertySource 二、ImportResource ①SpringConfig &#xff08;Spring框架全注解&#xff09; ②ImportResource注解实现 三、Bean 四、多配置文件 多Profile文件的使用 文件命名约定&#xff1a; 激活Profile&#xff1a; YAML文件支持多文档块&#xff…

深度解析React Native底层核心架构

React Native 工作原理深度解析 一、核心架构&#xff1a;三层异构协作体系 React Native 的跨平台能力源于其独特的 JS层-Shadow层-Native层 架构设计&#xff0c;三者在不同线程中协同工作&#xff1a; JS层 运行于JavaScriptCore&#xff08;iOS&#xff09;或Hermes&…

对话智能体的正确打开方式:解析主流AI聊天工具的核心能力与使用方式

一、人机对话的黄金法则 在与人工智能对话系统交互时&#xff0c;掌握以下七项核心原则可显著提升沟通效率&#xff1a;文末有教程分享地址 意图精准表达术 采用"背景需求限定条件"的结构化表达 示例优化&#xff1a;"请用Python编写一个网络爬虫&#xff08…

Xinference大模型配置介绍并通过git-lfs、hf-mirror安装

文章目录 一、Xinference开机服务systemd二、语言&#xff08;LLM&#xff09;模型2.1 配置介绍2.2 DeepSeek-R1-Distill-Qwen-32B&#xff08;大杯&#xff09;工具下载git-lfs&#xff08;可以绕过Hugging Face&#xff09; 2.3 DeepSeek-R1-Distill-Qwen-32B-Q4_K_M-GGUF&am…

MyBatis操纵数据库-XML实现(补充)

目录 一.多表查询二.MyBatis参数赋值(#{ }和${ })2.1 #{ }和${ }的使用2.2 #{ }和${ }的区别2.3 SQL注入2.3 ${ }的应用场景2.3.1 排序功能2.3.2 like查询 一.多表查询 多表查询的操作和单表查询基本相同&#xff0c;只需改变一下SQL语句&#xff0c;同时也要在实体类中创建出…

快速导出接口设计表——基于DOMParser的Swagger接口详情半自动化提取方法

作者声明&#xff1a;不想看作者声明的&#xff08;需要生成接口设计表的&#xff09;直接前往https://capujin.github.io/A2T/。 注&#xff1a;Github Pages生成的页面可能会出现访问不稳定&#xff0c;暂时没将源码上传至Github&#xff0c;如有需要&#xff0c;可联系我私…

TS常见内置映射类型的实现及应用场景

以下是 TypeScript 在前端项目中 常用的映射类型&#xff08;Mapped Types&#xff09;&#xff0c;结合具体场景和代码示例&#xff0c;帮助开发者高效处理复杂类型&#xff1a; 一、基础映射类型 1. Partial<T> 作用&#xff1a;将对象类型 T 的所有属性变为可选。 实…

介绍如何使用YOLOv8模型进行基于深度学习的吸烟行为检测

下面为你详细介绍如何使用YOLOv8模型进行基于深度学习的吸烟行为检测&#xff0c;包含环境配置、数据准备、模型训练以及推理等步骤。 1. 环境配置 首先&#xff0c;你需要安装必要的库&#xff0c;主要是ultralytics库&#xff0c;它包含了YOLOv8模型。你可以使用以下命令进…

AI-医学影像分割方法与流程

AI医学影像分割方法与流程–基于低场磁共振影像的病灶识别 – 作者:coder_fang AI框架&#xff1a;PaddleSeg 数据准备&#xff0c;使用MedicalLabelMe进行dcm文件标注&#xff0c;产生同名.json文件。 编写程序生成训练集图片&#xff0c;包括掩码图。 代码如下: def doC…

【Python】09、字典

文章目录 1. 字典简介2. 字典的使用2.1 字典创建2.2 字典值获取2.3 字典值修改2.4 字典的删除 3. 字典的遍历 1. 字典简介 字典(dict)属于一种新的数据结构&#xff0c;称为映射(mapping)。 字典的作用和列表类似&#xff0c;但是查询性能比列表好&#xff1b;在字典中每个元…

【贪心算法4】

力扣452.用最少数量的剪引爆气球 链接: link 思路 这道题的第一想法就是如果气球重叠得越多那么用箭越少&#xff0c;所以先将气球按照开始坐标从小到大排序&#xff0c;遇到有重叠的气球&#xff0c;在重叠区域右边界最小值之前的区域一定需要一支箭&#xff0c;这道题有两…

SGMEA: Structure-Guided Multimodal Entity Alignment

3 Method 3.1 Problem Definition 3.2 Framework Description 总体框架如图2所示&#xff0c;由三个主要部分组成&#xff1a;初始嵌入采集模块、结构引导模块和模态融合模块。 3.3 Initial Embedding Acquisition 3.3.1 Structural Embedding 3.3.2 Relation, Attribute, …

KY-038 声音传感器如何工作以及如何将其与 ESP32 连接

想为您的项目赋予声音感!然后跟着做,因为在这个项目中,我们将连接一个声音传感器,用它构建一些有趣的项目。我们使用的 KY-038 声音传感器使用电容式麦克风来检测声波,这为我们提供了稳定性和可靠性的完美平衡。因此,在本文中,我们决定将 KY-038 传感器与 ESP32 连接,并…

《基于超高频RFID的图书馆管理系统的设计与实现》开题报告

一、研究背景与意义 1.研究背景 随着信息化时代的到来&#xff0c;运用计算机科学技术实现图书馆的管理工作已成为优势。更加科学地管理图书馆会大大提高工作效率。我国的图书管理体系发展经历了三个阶段&#xff1a;传统图书管理模式、现代图书管理模式以及基于无线射频识别&…