数据结构--基本概念和学习目标

1968年美国克努特教授开创了数据结构的最初体系,所著《计算机程序设计的艺术》一书被誉为程序员的圣经。那么到底什么是数据结构呢?

其实,数据结构就是研究计算机中数据与数据之间的关系,包括逻辑结构和存储结构。

数据的逻辑结构

数据的逻辑结构表示数据运算之间的抽象关系。
按每个元素可能具有的直接前趋数和直接后继数将逻辑结构分为“线性结构”和“非线性结构”两大类。

通常有:集合、线性表、树、图等常见的逻辑结构。
逻辑结构是指数据内部的数据的本身的属性,与我们如何处理没有任何关系。

1.集合:
集合——数据元素间除“同属于一个集合”外,无其它关系。
image.png
2.线性结构:
一个对一个,比如线性表、栈、队列等。
image.png
3.树形结构:
一个对多个,有一个前趋、多个后继。比如二叉树。
数据结构--基本概念和学习目标_第1张图片
4.图:
多个对多个。
数据结构--基本概念和学习目标_第2张图片


数据的存储结构

存储结构:逻辑结构在计算机中的具体实现方法。
存储结构是通过计算机语言所编制的程序来实现的,因而是依赖于具体的计算机语言的。
存储结构主要有顺序存储、链式存储、索引存储、散列存储。

1.顺序存储:
顾名思义,就是数据在内存中一个挨一个,按照顺序进行存储。这样的存储结构最为简单,当我们知道某一个元素的存储位置,可以推断出该结构中所有元素的存储位置。
比如数组类型就属于顺序存储,我们可以根据数组下标来找到每一个数组元素。
数据结构--基本概念和学习目标_第3张图片
2.链式存储(重点)
链式存储也是一种线性结构存储方式,但是和顺序存储不同的是,链式存储结构中的每个元素的地址是不连续的,各元素分布在存储器的不同点,通过地址(或链指针)方式建立它们之间的联系。
数据结构中元素之间的关系在计算机内部很大程度上是通过地址或指针来建立的。
因为链式存储在内存中的特殊结构,使用链式存储比顺序存储的效率更高,因此我们很多情况下都会选择链式存储结构。
数据结构--基本概念和学习目标_第4张图片
3.索引存储
在存储数据的同时,建立一个附加的索引表,即索引存储结构=数据文件+索引表。
相当于一本书的目录和正文。
4.散列存储
根据数据元素的特殊字段(称为关键字key),计算数据元素的存放地址,然后数据元素按地址存放

总结:

数据结构--基本概念和学习目标_第5张图片


算法的时间/空间复杂度

其实数据结构是一门研究如何有效组织数据以及提高数据的处理效率。通过研究数据内部的逻辑关系, 根据数据内部的关系选择某种适合的存储形式来进行存储。这些各种操作就称为广义上的算法。

算法的好坏如何评判?

  1. 算法对应程序的时间消耗(按某一条语句执行的次数)— 时间复杂度
  2. 算法对应的程序所消耗的空间(该运算模块所需的内存) — 空间复杂度
  3. 算法的结构+可读性+调试+移植等。

时间复杂度:对于一个算法而言,不应该直接去计算某个算法的运行时间,而是计算某个算法它某个语句的重复调用的次数。因为不同的硬件参数不同,会导致运算的效率不一样,因此考察时间是没有意义的。

空间复杂度:实现某个目的使用的算法需要使用的内存的大小。

你可能感兴趣的:(数据结构入门,数据结构,c语言)