线性结构

什么是数据结构

在计算机科学中,数据结构(data structure)是计算机中存储、组织数据的方式。

数据结构意味着接口或封装,一个数据结构可被视为两个函数之间的接口 ,或是由数据类型联合组成的存储内容的访问方法封装。

一个设计良好的数据结构,应该在尽可能的使用较少时间与空间资源的前提下,可以良好的运行。

常见的数据结构有

堆栈(Stack)
队列(Queue)
数组(Array)
链表(Linked List)
树(Tree)
图(Graph)
堆积(Heap)
散列表(Hash table)
数据结构中最基本的5个概念

数据
数据元素
数据项
数据对象
数据结构
数据:是描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。

数据元素:是作出的数据,有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。

数据项:一个数据元素可以由若干个数据项组成。

数据对象:是性质相同的数据元素的结合,是数据的子集。

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

struct Person { // 一种数据结构
char *name; // 数据项
int age; // 数据项
};

struct Person person; // 数据元素
struct Person workers; // 数据对象

person.age = 18; // 数据项
person.age = "Charles"; // 数据项
逻辑结构与物理结构

根据视角的不同,我们将数据分为逻辑结构与物理结构。

逻辑结构:指的是数据对象中的数据元素之间的相互关系。

逻辑结构分为以下4种

集合结构
线性结构
树形结构
图形结构
具体采用哪种数据结构,取决于实际业务需求。

集合结构:结合结构中的元素除了同属一个集合外,他们之间没有其他关系,可以理解为数学中的集合。

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

树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。

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

物理结构:指的是逻辑结构在计算机中的存储形式,也称为“存储结构”。

数据元素的存储结构形式分为顺序存储和链式存储。

顺序存储:是指把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。

链式结构:是指把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的,他们之间通过一个指针来存放数据元素的地址,从而进行关联。

算法

算法,在数学和计算机科学中,为任何一系列良好定义的具体计算步骤,常用于计算、数据处理和自动推理。

算法的特征

高德纳在他的著作《计算机程序设计艺术》中对算法的特征进行归纳:

输入:一个算法必须有0个或以上的输入量。
输出:一个算法应有一个或以上的输出量,输出量是算法计算的结构。
明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地符合要求或期望,通常要求实际运行结果是确定的。
有限性:依据图灵的定义,一个算法是能够被任何图灵系统模拟的一串运算,而图灵机只有有限个状态、有限个输入符号和有限个转移函数(指令)。而一些定义更规定算法必须在有限个步骤内完成任务。
有效性:又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。
复杂度

时间复杂度

算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法的问题规模n的函数f(n)。

算法执行时间的增长率与f(n)的增长率正相关,称作渐近时间复杂度,简称时间复杂度。

常见的时间复杂度有

常数阶O(1)
对数阶O(log n)
线性阶O(n log n)
平方阶O(n ^ 2)
立方阶O(n ^ 3)
k次方阶O(n ^ k)
指数阶O(2 ^ n) 随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
空间复杂度

算法的空间复杂度是指算法需要消耗的空间资源。其计算和表示方式与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。

posted @ 2020-04-01 21:08  tianyahui  阅读(204)  评论(0编辑  收藏  举报