数据结构

1.定义

一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据)

程序 = 数据结构 + 算法

程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中,并在此基础上实现某个特定的功能的操作;

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

集合:关系平等

线性结构:元素之间一对一的关系(表(数组,链表),队列。栈。。。)

树型结构:元素之间一对多的关系(二叉树)

图形结构:元素之间多对多的关系(网状结构)城市轨道交通,有当前数据可以找到多个后继

(2)数据的物理结构:数据的逻辑结构在计算机内存中的存储形式

①顺序存储:采用一段连续的内存空间保存元素(数组)

优点:空间连续,访问方便

缺点:插入删除需要移动大量的元素 | 需要预分配内存空间 | 容易造成存储空间碎片

②链式存储:采用一组非连续的内存空间保存元素(链表)

缺点:访问元素效率低

优点:插入和删除数据方便 | 不需要预分配内存

③索引存储:通过关键字构建索引表,通过索引表来来找到数据的存储位置 提高数据的存储效率 将存储位置与关键字存储在索引表

④散列存储(哈希存储):将数据元素的存储位置与关键码之间建立确定对应关系从而实现查找的存储方式 哈希函数或散列函数

3.数组和链表的区别:

数组:空间连续,数据访问方便,数据插入和删除不方便 ,需要预分配内存空间

链表:内存不连续,数据访问不方便,数据的插入和删除效率高,不需要预分配内存空间

4.内存碎片

采用分区式存储管理的系统,在储存分配过程中产生的、不能供用户作业使用的主存里的小分区称成"内存碎片"。内存碎片分为内部碎片和外部碎片。

①内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;

内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。单道连续分配只有内部碎片。多道固定连续分配既有内部碎片,又有外部碎片。

②外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。

外部碎片是出于任何已分配区域或页面外部的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。

多道可变连续分配只有外部碎片

相关推荐
smj2302_7968265238 分钟前
解决leetcode第3934题最短唯一子数组
数据结构·python·算法·leetcode
iiiiyu1 小时前
面向对象和集合编程题
java·开发语言·前端·数据结构·算法·编程语言
变量未定义~1 小时前
最长回文子串
数据结构·算法
代码中介商1 小时前
AVL树:自平衡二叉搜索树的奥秘
数据结构
玛卡巴卡ldf2 小时前
【LeetCode 手撕算法】(多维动态规划)不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离
java·数据结构·算法·leetcode·动态规划·力扣
被AI抢饭碗的人2 小时前
算法:数据结构
数据结构·算法
淞綰3 小时前
c语言的练习-字符串的练习-寻找最长连续字符以及出现次数
c语言·数据结构·学习·算法·c语言的练习
qq_296553273 小时前
[特殊字符] 搜索插入位置:从O(n)到O(log n)的优雅进化
数据结构·算法·面试·分类·柔性数组
凯瑟琳.奥古斯特3 小时前
力扣3654:二维矩阵连续空位统计
数据结构·数据库·算法·职场和发展
故事和你914 小时前
洛谷-【图论2-2】最短路3
开发语言·数据结构·c++·算法·动态规划·图论