当前位置: 首页 > news >正文

数据结构基础

1.什么是数据结构

数据结构:用来组织和存储数据

程序设计 = 数据结构  + 算法;

2.数据与数据之间的关系 

 (1)逻辑结构(数据元素与元素之间的关系)

集合:元素与元素之间是一种平等的集合关系;

线性结构:数据元素与元素之间存在一对一的关系(一一对应);

树形结构:元素与元素之间存在一对多的关系(重点:二叉树);

图形结构:元素与元素之间存在多对多的关系(网状结构,如下图);

补充:在内存中一般以线性存储,即为线性存储结构;

(2)物理结构(数据元素在计算机内存中的存储方式) 

顺序存储:在内存中选用一段连续的内存空间进行存储(例如数组);

                   1.数据查找方便,查找效率高于链式存储(O(1));

                    2.插入与删除数据时需要移动大量数据;

                    3.使用时需要预内存分配(例如数组需要提前确定元素个数与长度,避免越界访问);

链式存储:可以在内存中选用一段非连续的内存空间进行存储;

                    1.数据访问时必须从头遍历(O(n));

                     2.插入和删除元素方便;

                     3.不需要预内存分配,是一种动态存储的方式;

索引结构:将要存储的数据的关键字和存储位置之间构建一个索引表;

散列结构(哈希结构):将数据存储位置与数据元素之间的关键字建立起联系,利用元素的关键字去查找;

                      

 

补:

内存碎片:

内内存碎片:(例如结构体存储时,为了对齐内存而浪费的空间)操作系统中一些较小空间被占用,无法继续分配;

外内存碎片:定义数组时(申请较大空间),各个空间之间的内存间隙,无法被再次利用;

3.单向链表 

由结点和链表属性组成

结点:数据域:存放数据;          

          指针域:存放指针;

data
pnexd
链表属性:phead:保存第一个结点的地址,clen保存结点的个数;
phead
clen

 链表行为:

1.创建链表对象;

2.插入、删除、查找、修改数据;

3.销毁链表;注意,当释放空间后一定要让其指针=NULL避免野指针:

插入链表:

1.申请结点;

2.节点初始化;

3.插入节点;

4.链表元素加1;

 

http://www.dtcms.com/a/312204.html

相关文章:

  • Minimizing Coins(Dynamic Programming)
  • 【智能体cooragent】创建 workflow 时 候选 Agent 和 Tool 获取来源详细分析
  • Python从入门到精通——第五章 列表与元组
  • 机器人学中路径规划(Path Planning)和轨迹生成(Trajectory Generation)关系
  • 海康皓视通 对接测试和比较
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第8章 备份与恢复
  • 自进化智能体综述:通往人工超级智能之路
  • 安卓自动点击器:设置点击周期 / 滑动,抢票、游戏刷日常秒会
  • UNet改进(28):KD Attention增强UNet的知识蒸馏方法详解
  • 适 配 器 模 式
  • Anthropic最新研究Persona vector人格向量
  • C语言---函数的递归与迭代
  • 第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2023年3月12日真题
  • Python从入门到精通计划Day01: Python开发环境搭建指南:从零开始打造你的“数字厨房“
  • 【语音技术】什么是实体
  • AI原生数据库:告别SQL的新时代来了?
  • 高效截图的4款工具深度解析
  • 淘宝商品API可以获取哪些商品详情数据?
  • ARM架构ELR、LR 和 ESR寄存器含义
  • Codeforces Global Round 27
  • 衡石湖仓一体架构深度解构:统一元数据层如何破除数据孤岛?
  • C++11 -- 智能指针
  • 【故障处理】redis会话连接满导致业务系统某个模块数据不显示
  • JJWT 核心工具类 Jwts 源码解析
  • 3 数字字符串格式化
  • 安灯系统(Andon System)
  • h3c路由器查看温度是否正常
  • 记录一次Spring Cloud Gateway配置的跨域处理:解决 ‘Access-Control-Allow-Origin‘ 头包含多个值的问题
  • 【Shell自动化脚本——for循环创建账户,测试主机连通性,for循环密码的修改】
  • 【Java面试题】一分钟了解反射机制