【数据结构】初识数据结构

news/2024/12/22 23:55:48/

引入:

哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我想让大家知道的是:数据结构非常有趣,很多算法是智慧的结晶,我希望大家在学习数据结构的过程是一种愉悦的心情感受。因此我开创了《数据结构》专栏,在这里我将把数据结构内容以有趣易懂的方式展现给大家。

1.数据结构的起源

早期人们都把计算机理解为数值计算工具,就是感觉计算机时用来计算的。所以计算机解决问题时,应该是先从具体问题中抽象出一个适当的数据类型,设计出一个解此数据模型的算法,然后在编写程序,得到一个实际的软件。

 可现实中,我们更多的不是解决数值计算的问题,而是需要一些科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好的解决问题。所以:数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的关系和操作等相关等问题的学科。这样看来是不是有点难以理解,我直接简单点概括:研究数据在计算机中的存储方式。1968年,美国的高德纳教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。同年,“数据结构”作为一门独立的课程,在计算机科学的学位课程中开始出现,也就是说,从那之后计算机相关专业的学生开始接收“数据结构”的“折磨”--其实说是享受才对。

2.基本概念和术语

说到数据结构是什么,我们得先来了解什么时数据。正所谓“巧妇难为无米之炊”,再强大的计算机,也是要有“米”下锅才可以干活的,否则就是一堆破铜烂铁,这个“米”就是数据。

2.1数据

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别的,并输入给计算机处理的符号集合,数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图片、视频等非数值类型。比如我们现在常用的一些搜索引擎,一般会有网页、图片、视频等分类,图片是图像数据、音频当然是声音类型,视频更不用说了,而网页其实指的就是全部数据的搜索,包括重要的数字和字符等文字数据。再比如我们在学校学习的各种各样的知识都可以成为数据,分享给大家使用。也就是说,我们这里说的数据,其实就是符号,而这些符号必须具备两个前提:

  1. 可以输入到计算机中
  2. 能被计算机程序处理

2.2数据元素

数据元素是组成数据的、具有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。比如:在人类中什么是数据元素,当然是人啦。

2.3数据项

数据项一个数据元素可以由若干个数据项组成,比如人这样的数据元素,可以有眼睛、耳朵、手等这些数据,也可以有姓名、年龄、性别等数据。数据项是数据不可分割的最小单位。在“数据结构”中,我们把数据项定义为最小的单位,是有助于我们解决问题的,所以,记住数据项是数据的最小单位。但当我们真正讨论问题的时候,数据元素才是数据结构中建立数据模型的着眼点。当我们讨论一本书时,是讨论这本书里面的角色这样的“数据元素”,而不是针对这些角色的姓名、年龄这些展开讨论。

2.4数据对象

数据对象:是性质相同的数据元素的集合,是数据的子集。什么叫性质相同,是数据元素相同数量和类型的数据项,比如,在刚才的例子中,人都有姓名、性别等相同的数据项。既然数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同的性质,在不产生混肴的情况下,我们都将数据对象简称为数据。

2.5数据结构

结构简单点来说就是关系,比如在化学中我们学过的分子结构,就是说组成分子的原子之间的排列方式。严格点说,结构是指各个组成部分相互搭配和排列的方式。在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称为结构,那数据结构是什么呢?数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在计算机中,数据元素并不是孤立、杂乱无章的,而是具有内在联系的数据集合,数据元素之间存在的一种或者多种特定关系,也就是数据的组成形式。

3.逻辑结构和物理结构

按照视点的不同,我们把数据结构分为了逻辑结构和物理结构两部分。

3.1逻辑结构

逻辑结构:是指数据对象中数据元素之间的相互关系。逻辑结构主要分为4种。

3.1.1集合结构

集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间又没有其他的关系。各个数据元素是“平等的”,他们的共同属性是“同属于一个集合”。数据结构中的集合关系就类似于数学中的集合。

3.1.2线性结构 

线性结构:线性结构中的数据元素之间是一对一的关系。

3.1.3树形结构

树形结构:树型结构中的元素之间存在一种一对多的层次关系。(有点像我们的族谱)

3.1.4图形结构 

图形结构:图形结构的数据元素是多对多的关系。

 我们在用示意图表示数据的逻辑结构时,要注意两点:

  1. 将每一个数据元素看作一个结点,用圆圈表示。
  2. 元素之间的逻辑关系用结点之间的连线表示。如果这个关系是有方向的,那就像我这个一样用箭头表示。

3.2 物理结构

物理结构:是指数据的逻辑结构在计算机中的存储形式。数据的存储结构正确反映数据元素之间的逻辑关系这才是最为关键的,数据元素的存储结构形式有两种:顺序存储和链式存储。在未来我们学习顺序表和链表时会更加深入学习。

3.2.1顺序存储结构

顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。这种存储结构说来也简单,就是排队,数组元素都按顺序排好,每个元素占一小段空间。和我们学习过的数组一样。

3.2.2链式存储结构

链式存储结构:把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的,也可以是不连续的。打个比方就像我们去医院挂号,每个人去领个号,等待的时候你想去哪就去哪,只要及时回来就行。数据元素的存储关系并不能反映他的逻辑关系,因此需要一个指针存放数据元素的地址,这样就能通过地址找到相关数据元素的位置了。


http://www.ppmy.cn/news/1453326.html

相关文章

「Pudding Monsters」Solution

简述题意 给定一个 n n n \times n nn 的棋盘,其中有 n n n 个棋子,每行每列恰好有一个棋子。 对于所有的 1 ≤ k ≤ n 1 \leq k \leq n 1≤k≤n,求有多少个 k k k \times k kk 的子棋盘中恰好有 k k k 个棋子,输出其总和…

Ubuntu 18.0.4 安装 libc6 2.28 及公钥验证相关

今天打算在 window 11 上安装一个 OWT-Server 环境。照着网上的 OWT-Server 5.0编译与运行指南 通过 docker pull registry.cn-hangzhou.aliyuncs.com/wisefeng/owt-server:v5.0 安装了已打包好的 docker 文件(即已执行了 ./scripts/pack.js -t all步骤)…

tomcat的实现

在一台电脑上启动tomcat,tomcat即是server,即服务器。服务器只会被实例化一次,tomcat这只猫就是服务器。服务器下包含多个子节点服务,即service,顾名思义就是对外提供服务。服务器通常只有一个服务,默认是卡…

Linux的socket详解

一、本机直接的进程通信方式 管道(Pipes): 匿名管道(Anonymous pipes):通常用于父子进程间的通信,它是单向的。命名管道(Named pipes,也称FIFO):允…

c++使用mysqlclient库开发mysql

使用libmysqlclient库对mysql进行c开发 安装 sudo apt update && sudo apt install libmysqlclient-dev -y封装客户端 一般都是封装一个客户端类进行开发&#xff0c;如下的mysql.h&#xff1a; #pragma once #include <mysql/mysql.h> #include <string&…

个人直播/流媒体服务解决方案实践

1. 说明 - 在本地局域网建立流媒体服务&#xff0c;并发布到公网服务器供终端&#xff08;机顶盒/移动设备&#xff09;订阅浏览 - 整个方案费用&#xff1a;本地硬件&#xff0c;本地上网费&#xff0c;公网服务器费, 域名费 1.1 拓扑结构图 其中&#xff1a; 流媒体服务器…

H.265码流解析

这一篇内容旨在对H.265码流中的一些概念做简单了解,部分概念与H.264相同,本篇中将不再重复。 1、NALU H.265(HEVC)码流的NALU结构和AVC有一些不同,属于增强版,HEVC NALU结构如下: NALU Header: Forbidden_zero_bit:1位,必须为0,如果不是则表示NALU非法;Nal_unit_t…

Nodejs-异步并发控制

异步并发控制 在 node 中可以利用异步发起并行调用。但是如果并发量过大&#xff0c;就会导致下层服务器吃不消。 bagpipe 解决方案 解决方案 通过一个队列来控制并发量如果当前活跃的异步调用小于限定值&#xff0c;从队列中取出执行如果活跃调用达到限定值&#xff0c;调…