登陆

极彩平台登录密码-程序员有必要把握的数据结构基础知识

admin 2019-10-31 278人围观 ,发现0个评论

闻名的瑞士科学家Niklaus Wirth教授提出:数据结构+算法=程序。数据结构是程序的骨架,算法是程极彩平台登录密码-程序员有必要把握的数据结构基础知识序的魂灵。

1.1 数据结构基础知识

学习数据结构首要从知道以下几个概念开端。

1.数据

数据是指一切能输入到核算机中的描绘客观事物的符号,包含文本、声响、图画、符号等。咱们常常运用的“扫一扫”的二维码,也是数据。

2.数据元素

数据元素是数据的根本单位,也称节点或记载,如图1-1所示。

图1-1 数据元素

3.数据项

数据项表明有独立意义的数据最小单位,也称域。若干个数据项构成一个数据元素,数据项是不可分割的最小单位,如图1-1所示的“86”。

4.数据目标

数据目标是指相同特性的数据元素的调集,是数据的一个子集。

5.数据结构

数据结构是指相互之间存在一种或多种特定联系的数据元素的调集。

数据结构是带“结构”的数据元素的调集,“结构”极彩平台登录密码-程序员有必要把握的数据结构基础知识是指数据元素之间存在的联系。数据结构研讨的问题是将带有联系的数据存储在核算机中,并进行相关操作。数据结构包含逻辑结构、存储结构和运算三个要素。

6.逻辑结构和存储结构

逻辑结构是数据元素之间的联系,存储结构是数据元素及其联系在核算机中的存储办法。例如,小明和小勇是表兄弟,这是他们之间的逻辑联系;他们在教室里面的方位是他们的存储结构。不管他们的座位怎样组织,是挨着坐,仍是分隔坐,都不影响他们的表兄弟联系。

逻辑结构:数据元素间笼统化的相互联系,与数据的存储无关,独立于核算机,它是从详细问题中笼统出来的数学模型。

数据结构的逻辑结构共有以下4种。

(1)调集——数据元素间除“同归于一个调集”外,无其他联系。

调集中的元素是离散、无序的,就像鸡圈中的小鸡相同,能够随意走动,它们之间没有什么联系,仅有的亲密联系便是极彩平台登录密码-程序员有必要把握的数据结构基础知识在同一个鸡圈里,如图1-2所示。数据结构要点研讨的是数据之间的联系,而调集中的元素是离散的,没有什么联系。因而,调集虽然是一种数据结构,但在数据结构书中不讲,在离散数学的调集论部分有要点叙述。

图1-2 调集

(2)线性结构——一个对一个,如线性表、栈、行列、数组、广义表。

线性结构就像穿珠子,是一条线,不会分叉,如图1-3所示。有仅有的开端和仅有的完毕,除了第一个元素外,每个元素都有仅有的直接前驱(前面那个);除了最终一个元素外,每个元素都有仅有的直接后继(后边那个)。

图1-3 线性结构

(3)树形结构——一个对多个,如树。

树形结构就像一棵倒竖的树,树根能够宣布多个分支,每个每支也能够持续宣布分支,树枝和树枝之间是不相交的,如图1-4所示。

(4)图形结构——多个对多个,如图、网。

图形结构就像咱们常常见到的地图,任何一个节点都或许和其他节点有联系,就像一张扑朔迷离的网,如图1-5所示。

图1-4 树形结构

图1-5 图形结构

存储结构:数据元素及其联系在核算机中的存储办法。

存储结构能够分为4种:次序存储、链式存储、散列存储和索引存储。许多数据结构类书籍只介绍了前两种根本的存储结构,这儿加上后两种,以便读者了解。

(1)次序存储

次序存储是指逻辑上相邻的元素在核算机内的存储方位也是相邻的。例如,张小明是哥哥,张小波是弟弟,他们的逻辑联系是兄弟,假如他们住的房子是前后院,也是相邻的,就能够说他们是次序存储,如图1-6所示。

图1-6 兄弟两家前后相邻

次序存储选用一段接连的存储空间,将逻辑上相邻的元素存储在接连的空间内,中心不允许有空。次序存储能够快速定位第几个元素的地址,可是刺进和删去时需求移动许多元素,如图1-7所示。

图1-7 次序存储

(2)链式存储

链式存储是指逻辑上相邻的元素在核算机内的存储方位纷歧定是相邻的。例如,哥哥张小明由于工作调动去了北京,弟弟仍然在郑州,他们的方位是不相邻的,可是哥哥有弟弟家的地址,很简单能够找到弟弟,就能够说他们是链式存储,如图1-8所示。

图1-8 哥哥有弟弟家地址

链式存储就像一个铁链子,一环扣一环才干连在一起。每个节点除了数据域,还有一个指针域,记载下一个元素的存储地址,如图1-9所示。

(3)散列存储

散列存储,又称哈希(Hash)存储,由节点的关键码值决议节点的存储地址。用散列函数确认数据元素的存储方覃瑶位与关键码之间的对应联系,如图1-10所示。

图极彩平台登录密码-程序员有必要把握的数据结构基础知识1-9 链式存储

图1-10 散列存储

例如,假定散列表的地址规模为0~9,散列函数为H(key)=key%10。输入关键码序列:(24,10,32,17,41,15,49),结构散列表,如图1-11所示。

24%10=4:存储在下标为4的方位。

10%10=0:存储在下标为0的方位。

32%10=2:存储在下标为2的方位。

17%10=7:存储在下标为7的方位。

41%10=1:存储在下标为1的方位。

15%10=5:存储在下标为5的方位。

49%10=9:存储在下标为9的方位。

图1-11 散列表

散列存储能够经过把关键码值映射到表中一个方位来访问记载,以加速查找的速度。假如有抵触,则有多种处理抵触的办法。

(4)索引存储

索引存储是指除树立存储节点信息外,还树立附加的索引表来标识节点的地址。索引表由若干索引项组成。假如每个节点在索引表中都有一个索引项,则该索引表称为稠密索引。若一组节点在索引表中只对应于一个索引项,则该索引表称为稀少索引。索引项的一般方式是关键字、地址,如图1-12所示。

图1-12 索引存储

在搜索引擎中,需求按某些关键字的值来查找记载,为此能够按关键字树立索引,这种索引称为倒排索引。为什么称为倒排索引呢?由于正常情况下,都是由记载来确认特点值的,而这儿是依据特点值来查找记载。这种索引表中的每一项都包含一个特点值和具有该特点值的各记载的地址。带有倒排索引的文件称为倒排索引文件,又称为倒排文件。倒排文件能够完结快速检索,索引存储是现在搜索引擎最常用的存储办法,如图1-13所示。

图1-13 倒排索引

7.笼统数据类型

笼统数据类型(Abstract Data Type,ADT)是将数据目标、数据目标之间的联系和数据目标的根本操作封装在一起的一种表达办法,它和工程中的使用是共同的。在工程项目中,开端编程之前,首要列出程序需求完结的功用使命,先不必管详细怎样完结,完结细节在项目后期完结,一开端只是笼统出有哪些根本操作。把这些操作项封装为笼统数据类型,等候后边详细完结这些操作。而其他目标假如想调用这些操作,只需求依照规定好的参数接口调用,并不需求知道详细是怎样完结的,然后完结了数据封装和信息躲藏。在C++中能够用类的声明表明笼统数据类型,用类的完结来完结笼统数据类型的详细操作。

笼统数据类型能够用以下的三元组来表明。

ADT笼统数据类型名{

数据目标:<数据目标的界说>

数据联系:<数据联系的界说>

根本操作:<根本操作的界说>

} ADT笼统数据类型名

例如,线性表的笼统数据类型的界说:

ADT List{

数据目标:D={ai|ai∈Elemset, i=1,2,…,n,n≥0}

数据联系:R={i−1,ai>|ai−1,ai∈D, i=2,…,n}

根本操作:

InitList(&L)

操作成果:结构一个空的线性表L

DestroyList(&L)

初始条件:线性表已存在

操作成果:毁掉线性表L

ClearList(&L)

初始条件:线性表已存在

操作成果:置线性表L为空表

ListEmpty(L)

初始条件:线性表已存在

操作成果:若线性表L为空表,则回来TRUE,不然回来FALSE

ListLenght(L)

初始条件:线性表已存在

操作成果:回来线性表L数据元素个数

GetElem(L, i, &e)

初始条件:线性表已存在(1≤i≤ListLenght(L))

操作成果:用e回来线性表L中第i个数据元素的值

locatElem(L, e, comare())

初始条件:线性表已存在,comare()是数据元素断定函数

操作成果:回来线性表L中第1个与e满意联系comare()的数据元素的位序

PriorElem(L, cur_e, &pre_e)

初始条件:线性表已存在

操作成果:若cur_e是线性表L的数据元素,且不是第一个,则用pre_e回来它

的前驱,不然操作失利,pre_e无界说

NextElem(L, cur_e, &next_e)

初始条件:线性表已存在

操作成果:若cur_e是线性表L的数据元素,且不是第最终一个,则用next_e返

回它的后继,不然操作失利,next_e无界说

ListInsert(&L, i, e)

初始条件:线性表已存在(1≤i≤ListLenght(L)+1)

操作成果:在线性表L中第i个数据元素之前刺进新元素e,L长度加1

ListDelete(&L, i, &e)

初始条件:线性表已存在(1≤i≤ListLenght(L))

操作成果:删去线性表L中第i个数据元素,用e回来其值,L长度减1

ListTraverse(L, visit())

初始条件:线性表已存在

操作成果:顺次对线性表L的每个数据元素调用visit()函数,一旦visit()失利,

则操作失利

}ADT List

(1)为什么要运用笼统数据类型?

笼统数据类型的首要作用是数据封装和信息躲藏,让完结与运用相别离。数据及其相关操作的结合称为数据封装。目标能够对其他目标躲藏某些操作细节,然后使这些操作不会遭到其他目标的影响,这便是信息躲藏。笼统数据类型独立于运算的详细完结,运用户程序只能经过笼统数据类型界说的某些操作来访问其间的数据,完结了信息躲藏。

(2)为什么许多书中没有运用笼统数据类型?

已然笼统数据类型契合工程化需求,能够完结数据封装和信息躲藏,为什么许多数据结构书中的程序并没有运用笼统数据类型呢?由于许多人觉得数据结构难以了解,学习起来十分费劲,因而只是将数据结构的根本操作作为要点,把每一个根本操作解说清楚,使读者学会和把握数据结构的根本操作,便完结了数据结构书的根本使命。在实践工程中,需求依据实践情况融会贯通,灵活运用,这是后续论题。现在要把握的便是各种数据结构的根本操作,本书也将根本操作作为要点叙述,并结合实例解说数据结构的使用。

数据结构和算法相得益彰,密不可分,在学习数据结构之前,首要要了解什么是算法、好算法的衡量标准,以及算法复杂度的核算办法。

京东网上商城 京东购书

(1)完美图解+丰厚实例,复杂问题简单化

为根本操作配以图解,用数据结构处理日子中的实践问题,学习进程愈加轻松风趣。

(2)原理剖析+实战演练,真实地学以致用

通俗化解说基础知识,在实战中领会数据结构的规划和操作,训练独立思考的才能。

(3)配套代码+在线答疑,为学习保驾护航

极彩平台登录密码-程序员有必要把握的数据结构基础知识供给书中的典范程序源代码、练习题以及答案解析,并在博客和QQ群中答疑解惑。

信誉债规划10年扩10倍 出资与投机之间分解加重

2019-12-06
  • 鼓舞全民终身学习 无妨给每个市民发放1000元
  • 极彩平台登录密码-逆回购利率时隔四年下调 货币政策长短调配稳流动性
  • 请关注微信公众号
    微信二维码
    不容错过
    Powered By Z-BlogPHP