【数据结构与算法】——第一章:绪论

本文介绍了数据结构的基本概念,包括数据元素、数据对象、数据结构的逻辑结构(集合、线性、树形、图形结构)和物理结构(顺序存储、链式存储)。同时,阐述了算法的重要性及其特性,并提及了算法的时间和空间复杂度分析。此外,还总结了数据结构的逻辑结构与物理存储方法及其各自的特点。
摘要由CSDN通过智能技术生成


 ============================ 【说明】 ===================================================
  大家好,本专栏是 数据结构与算法该科目是计算机类专业必修课之一,比较重要也比较基础,有想从事算法研究的同学,这些内容是专/本科、甚至硕士期间较为基础的内容,适用范围较广:大学专业课学习、考研复习等。
  通过自己的理解进行整理,希望大家积极交流、探讨,多给意见。后面也会给大家更新其他一些知识。若有侵权,联系删除!共同维护网络知识权利!

1、绪论

1.1 数据结构

  数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

1.2 数据结构起源

  数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
  程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法。数据结构在程序设计当中占据了重要的地位。

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

1.3 数据结构基本概念与术语

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

  (1)数据
  数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。*数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
​  例如,平时我们所用的搜索中会有网页、MP3、图片、视频等分类。MP3就是声音数据,图片就是图像数据,而网页其实指的就是全部数据的搜索,包括最重要的数字和文字等文字数据。

  也就是说我们所说的数据就是符号,而且这些符号必须具备两个前提
​  1.可以输入到计算机中
​  2.能被计算机程序处理
  对于整型、实型等数值类型,可以进行数值计算。
  对于字符型数据类型,就需要进行非数值的处理。而声音、图像、视频等其实是可以通过编码的手段变成字符数据来处理的。

  (2)数据元素
  数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录
​  例如,在人类中,人就是数据元素。畜类中,牛、马、羊、鸡、猪、狗等动物就是禽类的数据元素。

  (3)数据项
  数据项:一个数据元素可以由若干个数据项组成。
​  例如,人作为一个数据元素,可以有眼、耳、鼻、嘴、手、脚这些数据项,也可以有姓名、年龄、性别、出生地址、联系电话等数据项,具体有哪些数据项,要视你做的系统来决定。
​  数据项是不可分割的最小单位。数据项是数据的最小单位。但在真正讨论问题时,数据元素才是数据结构中建立数据模型的着眼点。例如,讨论电影时,是讨论电影角色这样的“数据元素”,而不是针对这个角色的姓名或者年龄这样的“数据项”去研究分析。

  (4)数据对象
​  数据对象:是性质相同的数据元素的集合,是数据的子集。
​​  性质相同就是指数据元素具有相同数量和类型的数据项,例如,人都有姓名、生日、性别等相同的数据项。
​  在实际运用中,在不产生混淆的情况下,我们将数据对象简称为数据。

  
  注:在计算机中,数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。数据元素之间存在的一种或者多种特定关系,也就是数据的组织形式。编写一个“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系。这也就是研究数据结构的意义所在。
  根据视点的不同,数据结构可以分为逻辑结构和物理结构两大类。

1.4 数据结构的逻辑结构

  逻辑结构:是指数据对象中元素之间的相互关系。这是最需要关注的问题。逻辑结构分为以下四种:

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

在这里插入图片描述
  (2)线性结构
  线性结构:线性结构中的数据元素之间是一对一的关系(如图所示)。

在这里插入图片描述
  (3)树形结构
  树形结构:树形结构中的数据元素之间存在一种一对多的层次关系(如图所示)。

在这里插入图片描述
  (4)图形结构
  图形结构:图形结构的数据元素是多对多的关系(如图所示)。
在这里插入图片描述
  注:示意图表示数据的逻辑结构时,1.将每个元素看做一个结点,用圆圈表示。2.元素之间的逻辑关系用结点之间的连线表示,如果关系是有方向的,那么用带箭头的连线表示。
  注:由以上例子可以看出,逻辑结构是针对具体问题的,是为了解决某个问题在对问题理解的基础上,选择合适的数据结构表示数据元素之间的逻辑关系。

1.5 数据结构的物理结构

  物理结构也叫做存储结构
  物理结构:是指数据的逻辑结构在计算机中的存储形式。
​  数据是数据元素的集合,根据物理结构的定义,实际上就是如何将数据元素存储到计算机的存储器中。存储器主要针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。
​  数据的存储结构必须正确反映数据元素之间的逻辑关系,这才是最为关键的,如何存储数据元素之间的逻辑关系,是实现物理结构的难点和重点。
​  数据元素的存储结构形式有两种顺序存储和链式存储。

​  (1)顺序存储结构
​  顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的(如图所示)。
在这里插入图片描述
​  说白了就是排队占位,大家按顺序排好,每个人占一小段空间,大家谁也别插谁的队。

​  (2)链式存储结构
​  【示例】在实际中,总有人会插队,也会有人要去上厕所、有人放弃排队,所以这个队伍会有新成员添加,也会去掉老元素,在面对这样要时常变化的结构时,顺序存储是不科学的。
​  现在在银行、医院等地方,设置了排队系统,也就是每个人先领一个号,等着叫号,叫到时去办理业务或者看病。等待的过程你可以想在哪就在哪待着,你只需要关注的是你前一个号有没有被叫到,叫到了,下一个就轮到你了。

​  链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的也可以不是连续的。 *数据元素的存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置(如图所示)。
在这里插入图片描述
​  显然,链式存储就灵活多了,数据存在哪里不重要,只要有一个指针存放相应的地址就能找到它了。
​  逻辑结构是面向问题的,而物理结构(存储结构)就是面向计算机的。其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。

1.6 算法

​  算法是解决特定问题求解步骤的描述。
​  在计算机中表现为指令的有限序列、并且每条指令表示一个或多个操作。
​  简而言之,算法是描述解决问题的方法。

1.7 算法特性

​  (1)输入和输出
在这里插入图片描述

​  (2)有穷性

在这里插入图片描述
​  (3)确定性

在这里插入图片描述
​  (4)可行性

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

1.8 算法设计

​  (设计要求)好的算法:应该具有正确性,可读性,健壮性,高效率和低存储量的特征。

1.9 时间与空间复杂度

​  关于时间与空间复杂度这边推荐两个博主写的内容比较通俗易懂:
​  时间复杂度
​  空间复杂度

2、简要总结

​  (1)数据是客观事物的符号表示
​  (2)数据元素是数据的基本单位。一个数据元素可由若干个数据项组成,数据项是数据不可分割的最小单位
​  (3)数据对象是性质相同的数据元素的集合
数据结构是数据元素相互之间的关系。4种逻辑结构:(1)集合(2)线性(3)树形(4)图状/网状
​  (4)逻辑结构:数据元素之间的逻辑关系
​  (5)物理结构/存储结构:数据结构在计算机中的表示(又称映像)称为存储结构
​  (6)ADT三要素:数据对象,数据关系,基本操作
​  (7)算法分析的目的是为了比较谁快
​  (8)算法分析的主要方面:时间复杂度(主要),空间复杂度(次要)
​  (9)数据模型是由数据结构、数据操作、数据约束条件三部分组成
​  (10)数据结构由数据的逻辑结构、存储结构、运算三部分组成
​  (11)算法和程序的区别:算法是解决问题的步骤,程序是算法的代码实现;算法可以用流程图、自然语言、伪代码来表示,而程序是机器实际可执行的。

3、附习题

​  (1)数据存储结构包括哪几种类型?数据逻辑结构包括哪几种类型?
​  :存储结构包括顺序存储,链式存储,索引存储和散列存储;
逻辑结构包括线性结构和非线性结构。更细分的说,逻辑结构包括集合、线性结构、树形结构和图形(网状)结构。

​  (2)数据结构是一门研究什么内容的学科?
​  :数据结构是一门研究在非数值计算的程序设计问题中,计算机的操作对象及 对象间的关系和施加于对象的操作等的学科。

​  (3)数据元素之间的关系在计算机中有几种表示方法?各有什么特点?
​  :四种表示方法。
​  1、顺序存储方式。数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据元素间的逻辑关系。存储密度大,但有些操作(如插入、删除)效率较差。
​  2、链式存储方式。每个存储结点除包含数据元素信息外还包含一组(至少一个)指针。指针反映数据元素间的逻辑关系。这种方式不要求存储空间连续,便于动态操作(如插入、删除等),但存储空间开销大(用于指针),另外不能折半查找等。
​  3、索引存储方式。除数据元素存储在一地址连续的存储空间外,尚需建立一个索引表,索引表的索引项指示存储结点的存储位置(下标)或存储区间端点(下标,非稠密索引)兼有静态和动态特性。
​  4、散列存储方式。利用散列函数和解决冲突的方法,将关键字散列在连续的有限的地址空间内,并将散列函数的值解释成关键字所在元素的存储地址。其特点是存取速度快,只能按关键字随机存取,不能顺序存取,也不能折半存取。
​  (4)评价一个好的算法,你是从哪几方面来考虑的?
答:1、算法的正确性。 2、算法的易读性。 3、算法的健壮性 4、算法的时空效率。

​  (5)对于一个数据结构,一般包括哪三个方面的讨论?
​  :逻辑结构,存储结构,操作(运算)。

​  (6)数据结构与数据类型有什么区别?
​  :“数据结构”这一术语有两种含义,一是作为一门课程的名称;二是作为一个科学的概念作为科学概念,目前尚无公认定义,一般认为,讨论数据结构要包括三个方面,一是数据的逻辑结构,二是数据的存储结构,三是对数据进行的操作(运算)。而数据类型是值的集合和操作的集合,可以看作是已实现了的数据结构,后者是前者的一种简化情况。

​  (7)算法的五个重要特征是什么?
​  :有穷性,确定性,可行性,零个或多个输入和1至多个输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqy阳

预祝上岸,感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值