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

DataStructure--Basic

程序设计=数据结构+算法
只谈数据结构不谈算法就跟去话剧院看梁山伯与祝英台结果只有梁山伯在演,祝英台生病了没来一样。

本文的所有内容都出自《大话数据结构》这本书中的代码实现部分,建议看书,书中比我本文写的全。
数据结构,直白地理解,就是研究数据的存储方式

1. 数据结构–概念

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。

1.1 基础概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2 数据结构分类

在这里插入图片描述

什么是数据结构?
数据对象在**计算机中的组织方式**数据对象必定与一系列加在其上的操作相关联
完成这些操作所用的方法就是算法

1.2.1 线性结构–一对一

又称 线性表。
具备“一对一”关系的数据就可以使用线性表来存储。线性表并不是一种具体的存储结构,包括: 1. 顺序存储结构(简称顺序表)2. 链式存储结构(简称链表或单链表)3. 特殊的线性表:栈 和 队列数据分散的存储在物理空间中,通过一根线保存着它们之间的逻辑关系,这种存储结构称为*链式存储结构(简称链表)*

1.2.1.1 顺序存储结构(简称顺序表)

将数据依次存储在连续的整块物理空间中,这种存储结构称为*顺序存储结构(简称顺序表)*顺序表,不能简单理解为 语言中的数组,因为数组只是语言中实现线性表的其中一种表现形式。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,物理存储是连续的。顺序表的实现借助的语言中的 数组(因为数组申请的是连续的空间)。

顺序表结构如下:
在这里插入图片描述

1.2.1.2 链式存储结构(简称链表或单链表)

使用链表存储数据时,是随用随申请,因此数据的存储位置是相互分离的。数据元素随机存储,并通过指针表示数据之间逻辑关系的存储结构就是链式存储结构链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。

在这里插入图片描述

1.2.1.3 栈

栈和队列隶属于线性表,是特殊的线性表

栈是一种只能从表的一端存取数据且遵循 "先进后出" 原则的线性存储结构。实现:既可以利用顺序存储结构实现,又可以利用练市链式存储结构实现。

在这里插入图片描述

栈的c语言实现包括

  1. 顺序栈

     借用数组实现
    
  2. 链式栈

     借用链表实现
    

1.2.1.4 队列

栈和队列隶属于线性表,是特殊的线性表

先进先出。实现:既可以利用顺序存储结构实现,又可以利用练市链式存储结构实现。

在这里插入图片描述

1.2.1.5 串存储结构

串存储结构也是一种线性存储结构,因为字符串中的字符之间也具有"一对一"的逻辑关系。串结构只用于存储字符类型的数据。串实现:1. 定长顺序存储,即普通数组(又称静态数组)存储。2. 堆分配存储:用动态数组存储字符串;3. 块链存储:用链表存储字符串;

1.2.1.6 广义表(又称列表)

参考链接

广义表一般采用链式存储实现,因为根据广义表中元素分析使用数组实现会造成空间浪费。

1.2.2 树–一对多

存储结构适合存储具有“一对多”关系的数据。

在这里插入图片描述

1.2.3 图–多对多

图存储结构适合存储具有“多对多”关系的数据。

在这里插入图片描述

2. 算法–概念

在这里插入图片描述

2.1 算法基础概念

在这里插入图片描述
在这里插入图片描述

2.2 算法效率评估

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/101197.html

相关文章:

  • Intellij IDEA 双击启动报错ClassNotFoundException: com.licel.b.z@
  • 使用 Logstash 及 enrich processor 实现数据丰富自动化
  • Django模板语法和请求
  • Android跨进程传大图思考及实现——附上原理分析
  • 【动态规划part13】| 300.最长递增子序列、674.最长连续递增序列、718.最长重复数组
  • QMainWindow
  • PV操作解决经典进程同步问题
  • 一文3000字从0到1使用Selenium进行自动化测试
  • 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v9.0版已发布
  • 交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64
  • 安防监控视频汇聚平台EasyCVR修改录像计划等待时间较长是什么原因?
  • 深度学习调参指南
  • MYSQL 优化常用方法
  • isp调试工具环境搭建及其介绍!
  • word显示书签并给书签添加颜色
  • Rust系列(四) trait备忘录(持续更新)
  • 贪心算法总结及其leetcode题目N道
  • k8s的namespace一直处于terminating的解法
  • JAVA面试总结-Redis篇章(六)——数据过期策略
  • 【LLM】大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model
  • Android是如何识别USB信号的
  • 机器学习前言
  • Java另一种debug方法(not remote jmv debug),类似python远程debug方式
  • 【QT】Day4
  • 在CSDN学Golang云原生(Kubernetes Pod 有状态部署)
  • sql-从一个或多个表中向一个表中插入 多行
  • ElementUI 实现动态表单数据校验(已解决)
  • Linux上定位线上CPU飙高
  • 06-行向量列向量_向量的运算 加法,数乘,减法,转置
  • 基于Matlab实现最大类间方差阈值与遗传算法的道路分割(附上完整源码+图像+程序运行说明)