《大话数据结构》-程杰 著 阅读笔记day1 2017-9-10 周日

为何会读这本书?

       算上实习工作三年,一直是不温不火,行尸走肉般的在不大不小的公司上下班,签到打卡(相信很多刚毕业的人都会有这种体会,告诉我,我不是一个人QAQ)。前一段时间找工作的时候,看了看阿里,网易等知名互联网公司的招聘要求,发现除了对招聘岗位的技能要求之外,也都会有数据结构和设计模式这一块的要求,但是对这一块特别空白,简历连投都不敢投,为了有更大的空间和提升,我觉得有必要静下心来学习和掌握这两块技术。

       但是数据结构这东西,怎么说,很复杂很烧脑,借了同事同学的书看了看,那是相当不好啃,于是百度一顿搜,终于选定了这本程杰著的《大话数据结构》一书作为我自学数据结构的第一本书,并决定记录一下我的学习过程和总结感想。

数据结构非常有趣

        “数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学得很累。数据结构非常有趣,很多算法是智慧的结晶,学习它是去感受计算机编程技术的魅力”这是书中前言作者的原话,也是我目前的困惑和选择这本书最主要的原因,我想找到数据结构的魅力所在。

        还有一点很有意思的是这本书的目录足足有16页,基本对每一个大标题小标题都有一句点睛语录记录在上面,对我来讲很加分,哈哈,扯远了,拉回来。

        下面就是正文的阅读,今天就对第一章数据结构绪论做个笔记和总结思考。

第一章 数据结构绪论

        数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。

        也就是说,我们这里所说的数据,其实就是符号,而且必须具备两个前提:

        *可以输入到计算机中。

        *能被计算机程序处理。

对于整型、实型等数值类型,可以进行数值计算。对于字符数据类型,就需要进行非数值的处理,声音、图像、视频等可以通过编码的手段变成字符数据来处理。

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

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

       这里需要注意的是数据项是数据不可分割的最小单位。但真正讨论问题的时候,数据元素才是数据结构中建立数据模型的着眼点。比如:我们讨论一部电影,讨论的是电影角色(“数据元素”),而不是电影角色的眼睛,鼻子,嘴巴(“数据项”)去分析。

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

       总结:一开始我觉得数据元素特别像一个类或者Model,然后数据项就相当于类或Model的属性(是不是很像?!!),但是数据对象的概念我就理解不了了,难道是具有相同属性的不同类,然后这么几个类组成一个对象?(我想没人会这么干吧...)。

       这里我们需要明确一点就是,我们的关注点是数据,而不是程序,所以上面的想法完全就是错误的,正确的着眼应该是从数据出发。这样就很好理解了。比如数据库中的一张成绩表,这张表就是数据对象,表中的每一条记录就是一个数据元素,而表的每一个列就是数据项。因为数据元素是数据的基本单元,所以我们可以说一条记录是一个数据;且数据对象也是数据的子集,那么我们也可以说这张表是一个数据;当然我们更可以说表中的一个成绩也是一个数据。所以数据的概念是最大的。


       数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 在计算机中,数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。数据集合之间存在的一种或多种特定关系,也就是数据的组织形式。   

       数据之间的结构又分为逻辑结构和物理结构(也有叫存储结构)。

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

       物理结构:指数据的逻辑结构在计算机中的存储形式。数据元素的物理存储。

       逻辑结构分为以下四种:

       1.集合结构:数据元素除了同属于一个集合外,相互之间没有其他关系。就相当于数学中的集合。

       2.线性结构:数据元素之间是一对一的关系。众多数据元素排成一条线。

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

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

       物理结构分为以下两种:

       1.顺序存储结构:把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。这种存储结构其实很简单,就是排队占位。大家都按顺序排好,每个人占一小段空间,大家谁也别插队。结合语言,就相当于数组。当你告诉计算机你要建立一个9个整型数据的数组时,计算机就在内存中(堆)找了片空地,按照一个整型所占位置的大小乘以9,开辟一段连续的空间,于是第一个数组数据就放在第一个位置,第二个数据放在第二个,这样一次排列。数组名是第一个位置的指针。

       2.链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置。指针:存放数据元素的地址,通过指针就可以找到数据元素在内存中的位置。

        书中有两句话:“数据的存储结构应正确反映数据元素之间的逻辑关系,这才是最为关键的”,“数据元素的存储关系并不能反映其逻辑关系”,有点难以理解。我个人的一些理解是:本身数据元素的存储关系是不能反映其逻辑关系的,就是两者是两回事,但是我们如果做数据结构的优化,就需要正确选用逻辑关系和存储关系,让存储关系可以反映出逻辑关系。简而言之就是,如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点(要先确定优秀或者合适的逻辑结构,再选用合适的物理结构)。(ps.有点迷糊,继续看下去,希望可以自己想明白,也希望有大神可以帮我解答一下这个困惑。)

        逻辑结构是面向问题的,而物理结构就是面向计算机的,其基本的目标就是将数据及其逻辑关系存储在计算机的内存中


       数据类型:指一组性质相同的值的集合及定义在此集合上的一些操作的总称

       数据类型是按照值的不同进行区分的,比如java中整数和小数可以区分成整型和浮点型;又根据整型的大小可以分为short,int,long,浮点型又可以分为float和double。

       至于为什么会有数据类型的概念呢,就跟我们租房子一样,如果一个人住就可以租个单间,当然可以租两室一厅或几室几厅,但可能会造成浪费。在计算机中,因为计算机的内存是有限的,为了不造成不必要的浪费,就定义几种数据类型,规定好长度和分类。

        java中分为四类八种基本类型,分别是:

        *整型:byte,short,int,long;

        *浮点型:float,double;

        *逻辑型:boolean;

        *字符型:char;

       抽象数据类型:我们对已有的数据类型进行抽象,就有了抽象数据类型。指一个数学模型及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。

       抽象:指取出事物具有的普遍性的本质。它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括。抽象是一种思考问题的方式,它隐藏了复杂的细节,只保留实现目标所必需的信息。       

       不同的计算机有不同的硬件系统,这就要求程序语言最终通过编译器来转换成底层语言。可事实上高级程序语言并不会管你整型在底层语言是怎么定义的,怎么进行加减乘除运算的,也不想知道CPU为了运算进行了多少次开关操作;同时不同的高级程序语言之间对于整型的实现方法可能也不一样,但由于其定义的数学特性相同,在计算机变成看来,它们都是相同的。所以所谓的整型其实是抽象数据类型。也因此,“抽象”的意义在于数据类型的数学抽象特性

       抽象数据类型不仅仅指那些已经定义并实现的数据类型,还可以是计算机编程者在设计软件程序时自己定义的数据类型。比如OC中CGSize,CGPoint这些几何数据类型。

       根据抽象数据类型的定义,它还包括定义在该模型上的一组操作。事实上,抽象数据类型体现了程序设计中的问题分解、抽象和信息隐藏的特性。把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而是具体实现过程隐藏起来。

        总结:个人感觉抽象数据类型,很像java中的抽象类的概念,也是将一个事物的特性和相同的动作抽取出来,并不需要关心具体的实现。


       啊,伸个懒腰,感觉做笔记比看书还累(...),文章中加引用的是书中的定义,其他都是个人对于书中内容进行的一些思考的记录和总结,也不知道对不对,哈哈。

       尽量保证每个星期更新一篇,内容的话基本都是对于书单上三本书的学习记录(笔记),也有可能是吐槽文...

       对了,刚在电梯看到物业贴的登革热提醒,希望同在杭州的小伙伴注意身体,祝大家长命百岁,身体健康,哈哈。欢迎大家留言讨论,共同进步。



Better Late Than Never!
努力是为了当机会来临时不会错失机会。
       共勉!


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容