🏍基本概念
🚚数据结构
⛽️
- 是研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的一门课程。
- 算法+数据结构=程序
🏍常用术语
⛽️
-
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整形、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
-
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
比如 畜类 牛、马、羊、鸡、猪、狗等动物当然就是畜类的数据元素。 -
数据项:一个数据元素可以由若干个数据项组成。
比如人这样的元素,可以有眼、耳、鼻、嘴等数据项,也可以有姓名、年龄、性别等数据项。
数据项是数据不可分割的最小单位。 -
数据的逻辑结构:数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的。数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。包括线性结构和非线性结构。
-
线性结构:有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。
线性表就是一个典型的线性结构,它有四个基本特征: 集合中必存在唯一的一个"第一个元素";集合中必存在唯一的一个"最后的元素";除最后元素之外,其它数据元素均有唯一的"后继";除第一元素之外,其它数据元素均有唯一的"前驱"。 -
非线性结构:非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个直接后继。常见的非线性结构有:树(二叉树等),图(网等)。
-
数据的存储结构:顺序、链式、索引、散列
顺序存储:把逻辑上相邻的结点存储在物理位置相邻的存储单元里;
链式存储:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。
索引存储:以理解成是顺序存储结构和链式存储结构的结合;
散列存储:选取某个函数,依照改函数来计算元素的存储位置,形成函数值和存储位置之间的一一对应,例如hash函数。 -
数据的运算:对数据元素施加的操作。
🚚算法与算法分析
⛽️
- 算法描述的五个重要特性:输入、输出、有穷性、确定性和可行性。
输入/输出:算法具有零个或多个输入,算法至少具有一个或多个输出。
有穷性:是指算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每个步骤在可接受的时间内完成。
确定性:算法的每个步骤都有明确的含义,不会出现二义性。
可行性:算法的每一步都必须是可行的,也就是说,每一步都通过执行有限次数完成。 - 算法的评价标准:正确性、可读性、健壮性、高效性。
- 算法分析:时间复杂度和空间复杂度。
时间复杂度:时间复杂度即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。但是,一个算法的执行时间往往无法精确估计。通常需要在实际的计算机运行才知道具体的执行时间。但是,也可以大致进行估计,得到算法的时间复杂度。算法的执行时间往往和算法代码中语句执行的数量有关。由于一段代码中,每条语句的执行都需要时间,因此,可以这么认为,代码执行次数越多,程序耗费的时间越长,效率越差。因此,我们需要多写一些短小精悍的代码来提高代码的执行效率。
空间复杂度:空间复杂度通常指的是算法程序在计算机只想中只想所需要的存储空间。空间复杂度可从以下两个方面去描述:
(1)程序保存所需要的存储空间,即程序的大小;
(2)程序在执行过程中所需要消耗的存储空间资源,例如,程序在执行过程中的中间变量。