Python描述数据结构之基本概念篇

前言

  enmmmm,仔仔细细反反复复斟酌之后,我还是喜欢用Python来描述数据结构,毕竟日常用Python做东西。虽然当时学习数据结构时用的都是C,其实原理都是一样的,语言只是一个工具,哪个顺手用哪个。
  从本篇开始,我将用Python来描述数据结构,并通过LeetCode题库进行实战,希望能够熟练运用数据结构解决问题。GO ─=≡Σ(((つ•̀ω•́)つ

1. 数据

  数据 ( d a t a ) (data) :通常是对客观事物的符号表示,在计算机中是指所有能输入到计算机中并被计算机程序处理的符号的总称,例如文字,图像等。

2. 数据元素

  数据元素 ( d a t a (data e l e m e n t ) element) :数据的基本单元,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,例如,学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。

3. 数据项

  数据项 ( d a t a (data i t e m ) item) :构成数据元素的不可分割的最小单位。

4. 数据对象

  数据对象 ( d a t a (data o b j e c t ) object) :性质相同的数据元素的集合,是数据的一个子集。例如,正整数的数据对象是集合 N = { 1 , 2 , 3 , . . . } N=\{1,2,3,...\}

5. 数据类型

  数据类型 ( d a t a (data t y p e ) type) :一组值的集合和定义在此集合上一组操作的总称。例如,Python中字符串类型String的集合是由单引号或双引号标识的一连串字符,定义在其上的操作有连接、切片等操作。除此之外,Python的数据类型还有数字类型Number、列表类型List、元组类型Tuple、集合类型Set、字典类型Dictionary

  • 原子类型:值不可以分解,例如上述的数字类型Number
  • 结构类型:值可以分解,例如上述的列表类型List
  • 抽象数据类型 ( a b s t r a c t (abstract d a t a data t y p e , A D T ) type,ADT) :指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,与其在计算机内部如何表示和实现无关。例如后面将要定义的链表LinkList

6. 结构

  结构 ( s t r u c t u r e ) (structure) :数据元素不是孤立存在的,它们之间存在着某种关系,这种数据元素相互之间的逻辑关系称为结构,又称为数据的逻辑结构。通常有以下四类基本结构:

  • 集合:该结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他的关系。
  • 线性结构:该结构中的元素之间存在一对一的关系。
  • 树结构:该结构中的元素之间存在一对多的关系。
  • 图结构:该结构中的元素之间存在多对多的关系。

7. 数据结构

  数据结构 ( d a t a (data s t r u c t u r e ) structure) :指相互之间存在一种或多种特定关系的数据元素的集合。

  • 数据的逻辑结构:上述的结构。
  • 数据的物理结构:数据结构在计算机中的表示(映像),又称存储结构,存储结构结构又分为顺序存储结构和链式存储结构。
    • 顺序存储结构:用一组地址连续的存储单元依次存储数据元素,使得逻辑上相邻的两个元素在物理位置上也相邻。
    • 链式存储结构:用一组任意的存储单元来存储数据元素,逻辑上相邻的两个元素其在物理位置上不一定相邻。
  • 数据的操作:包括运算操作的定义和实现。

8. 算法

  算法 ( a l g o r i t h m ) (algorithm) :是对特定问题求解步骤的一种描述,是指令的有限序列。程序 = = 数据结构 + + 算法。一个算法还具有五个重要特性:有穷性、确定性、可行性、输入和输出,一个好的算法,应达到四个目标,即正确性、可读性、健壮性和效率与低存储量需求。

9. 时间复杂度

  时间复杂度 ( t i m e (time c o m p l e x i t y ) complexity) :一个语句的频度是指该语句在算法中被执行的次数,算法的时间复杂度就是该算法中所有语句的频度之和,是问题规模 n n 的函数。一般总是考虑最坏情况下的时间复杂度。

10. 空间复杂度

  空间复杂度 ( s p a c e (space c o m p l e x i t y ) complexity) :该算法所消耗的存储空间,也是问题规模 n n 的函数。

  常见时间复杂度排序如下:
     O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)

结束语

  enmmmm,我觉得其实数据结构和算法就是定义一个合适的ADT,用最少的时间和空间去解决问题,没错,就是酱紫─=≡Σ(((つ•̀ω•́)つ

猜你喜欢

转载自blog.csdn.net/qq_42730750/article/details/107868879