DataStructure--Basic

news/2024/10/23 23:29:50/

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

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

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.ppmy.cn/news/989993.html

相关文章

Android 面试题 虚拟机、进程、线程 七

🔥 安卓虚拟机 🔥 虽然Android程序是使用Java语言开发的,当然,现在也可以使用kotlin语言。但是实际上我们开发出来的Android程序并不能运行在JVM上,而是只能运行在一个类似JVM的Android虚拟机上。Android虚拟机有两种&…

使用低代码开发,需要注意哪些?

低代码平台的历史相对较短,大约始于 2000 年初,源于快速应用程序开发工具。随着低代码平台和工具的日益普及和优势,它不断发展以满足各种领域和角色的需求。 本文将研究各种低代码和无代码应用程序开发方法、业务用例、挑战和未来预测等。 一…

《算法竞赛·快冲300题》每日一题:“单峰数组”

《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 单…

UE5.1.1 创建C++项目失败

因一直使用Unity开发环境,安装Unreal后,并未详细配置过其开发环境,默认创建蓝图工程无异常,但创建UE C项目时总共遇到两个错误: 错误一 Running /Epic/UE/UE_5.1/Engine/Build/BatchFiles/Build.bat -projectfiles -…

MYSQL 优化常用方法

1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可…

Android Hook系统 Handler 消息实现

前言 主线程的Handler 主要依赖于 ActivityThread,Android是消息驱动,比如view的刷新,activity的创建等,如果能打印系统层Handler消息日志,就需要对于系统层的Handler 进行Hook 原理 ActivityThread中 mH对象主要负责…

Manjaro KDE 22.1.3vmware无法复制文件

Wayland 是 X11 的现代替代品,几十年来 X11 一直是 Linux 上的默认窗口系统。 Wayland 是一种通信协议,定义 X Window 显示服务器和客户端应用程序之间的消息传递。 软件还不兼容 使用X11即可

2023 年还推荐报计算机专业吗?

计算机科学是一个很好的专业,因为它由各种课程组成,为学生在成熟和新兴专业就业做好准备。以下是一些通常属于计算机科学专业的课程: 基本编程介绍了用于构建和维护数字架构和基础设施的编程语言和标准。 微积分为制定高级计算和设计概念提供…