数据结构关注的问题:
- 数据结构的相关概念和术语
- 数据结构的三要素: 逻辑结构,物理结构,数据运算
- 算法复杂度和空间复杂度的分析和计算
什么是算法?
算法是对特定问题求解步骤的一种描述,他是指令的有限集合,其中的每条指令表示一个或多个操作,算法满足:
特
征
{
有
穷
性
:
一
个
算
法
总
是
在
有
穷
步
之
后
结
束
确
定
性
:
算
法
中
的
每
一
条
指
令
都
不
会
有
二
意
可
行
性
:
算
法
中
描
述
的
操
作
过
程
,
是
可
以
在
有
限
次
的
操
作
之
后
得
到
结
果
的
输
入
:
一
个
算
法
会
有
一
个
或
多
个
输
入
,
这
些
输
入
来
自
于
某
个
特
定
的
集
合
输
出
:
一
个
算
法
会
产
生
一
个
或
者
多
个
输
出
,
这
些
输
出
是
与
输
入
对
应
的
正
确
性
:
算
法
应
该
是
可
以
解
决
实
际
问
题
的
可
读
性
:
算
法
应
该
具
有
良
好
的
可
读
性
,
使
其
他
人
可
以
理
解
健
壮
性
:
当
用
户
进
行
非
法
输
入
的
时
候
,
计
算
机
会
进
行
恰
当
处
理
特征\begin{cases} 有穷性:一个算法总是在有穷步之后结束\\ 确定性:算法中的每一条指令都不会有二意\\ 可行性:算法中描述的操作过程,是可以在有限次的操作之后得到结果的\\ 输入:一个算法会有一个或多个输入,这些输入来自于某个特定的集合\\ 输出:一个算法会产生一个或者多个输出,这些输出是与输入对应的\\ 正确性:算法应该是可以解决实际问题的\\ 可读性:算法应该具有良好的可读性,使其他人可以理解\\ 健壮性:当用户进行非法输入的时候,计算机会进行恰当处理 \end{cases}
特征⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧有穷性:一个算法总是在有穷步之后结束确定性:算法中的每一条指令都不会有二意可行性:算法中描述的操作过程,是可以在有限次的操作之后得到结果的输入:一个算法会有一个或多个输入,这些输入来自于某个特定的集合输出:一个算法会产生一个或者多个输出,这些输出是与输入对应的正确性:算法应该是可以解决实际问题的可读性:算法应该具有良好的可读性,使其他人可以理解健壮性:当用户进行非法输入的时候,计算机会进行恰当处理
基本概念:
数据:
数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
数据元素:
数据元素是数据的基本单位,在计算机中,通常作为一个整体来考虑,一个数据元素可由一个或者多个数据项来表示。
数据对象
数据对象是具有一定特征的数据元素的集合,是数据的一个子集。
数据类型
数据类型是一个值的集合,和定义在这集合上的操作。
原子类型:其值不可以再分的数据结构
结构类型:其值可以再分为若干成分的数据类型
抽象类型:抽象数据组织及与之相关的操作
抽象类型:
抽象数据类型(ADT)是指一个数学模型及定义在该模型上的一组操作,抽象数据类型的定义,取决于他的一组逻辑特性,而与其在计算机中如何实现无关,即不论其内部结构怎么变化,只要他的数学特性没有改变,那么都不影响。通常用数据对象,数据关系,基本操作集,这样的三元组来表示。
数据结构
数据元素之间的关系,称为结构,数据结构是相互之间具有一种或者多种特定关系的数据元素的集合。数据结构通常包括三方面的内容:逻辑结构,物理结构,数据运算,数据的逻辑结构和存储结构是密不可分的两个方面。一个算法的设计,取决于所选定的特定的逻辑结构,而算法的实现依赖于所采用的存储结构。
逻辑结构:
逻辑结构是从逻辑上来描述,数据元素和数据元素之间的关系,和数据元素的存储结构没有关系,是独立于计算机的。数据的逻辑结构分为线性结构和非线性结构。线性表是典型的线性结构,树、图、集合 是典型的非线性结构。
集合:结构中的数据元素,有且仅有 “同属于一个集合”这样的关系
树:结构中的元素之间只存在一对一的关系
图:结构中的数据元素之间存在一对多的关系
存储结构
存储结构是指数据结构在计算机中的表示,也叫物理结构。它包括数据元素的表示和表示之间的关系。它是依赖于计算机语言的,数据的存储结构主要有顺序结构,链式结构,索引结构,散列结构
顺序结构:数据元素在逻辑上是相邻的而且实际存储位置在物理上也是相邻的
链式存储:数据元素在逻辑上是相邻的,但是在物理存储位置上,不是相邻的
索引存储:在存储数据的同时,建立索引表
散列存储:根据数据元素的hash值来进行数据存储