《大话数据结构》读书笔记(1)

  其实去年的时候就看过这本书了。只是,基本上是走马观花, 了解了一些基本概念。这次,为了看懂里面的代码,又特地去复习了一下c语言。还记得上次看的时候,感觉算法果然名不虚传,真的难!现在看来,其实这本书写的非常简单。至少,从我目前的视角来看,还是略掉了很多东西的。比如,前面的线性表部分讲的非常的详细,后面到了串、树、图就只提及了一些重要的部分。也许,大多数人也只会看前几章吧,毕竟算法还是很枯燥的。

  首先,说到数据结构,就不得不提起抽象的数据类型这个概念。有人说,程序=数据结构+算法。或者,更加形象的说,程序就是用一堆变量不断加加减减,最后得出结果。那么,这与抽象的数据类型又有什么关系呢?其实,我们都知道,每一门编程语言都有一些基本数据类型,用这些数据类型足以满足我们的编程需求。然而,我们却时常会创建一些自己的数据类型(类)。可能,很多人只是遵循语言特性,并没有考虑原因。事实上,使用抽象的数据类型是为了遵循关注点分离的原则。抽象的数据类型通常会封装很多对于基本数据的操作,它使得我们可以专注于业务逻辑,而不是过多的去关注很多细节的东西。也就是说,我们使用抽象的数据类型,即学习数据结构,是为了学习一种思想,一种抽象和简化的思想。

  这一篇就来说说我对于线性表的理解吧。线性表,顾名思义,就是直线式的数据结构。每个表中的元素都会有一个前驱元素或者后继元素,元素与元素之间是一一对应的关系。

  1、线性表的抽象数据类型

    线性表作为一种抽象的数据类型,主要操作有是否为空、清空、查找元素、插入、删除、获取长度。

   2、线性表的存储结构

    顺序存储、链式存储。顺序存储是指将线性表的数据存储到数组中,然后以这个数组为操作的对象来实现线性表的操作。而链式存储则是以链表的形式来存储数据。链表是指一些分散的数据块,不同于数组,不需要在内存上的固定位置。链表的每个数据块,称为一个节点。每个节点又由两部分组成,一个是数据域,一个是指针域。数据域自是不必多说,指针域则存放着下一个节点的地址。顺序存储的主要缺点是大小是固定的,链式存储则不受限制。所以,很多实现基本上是用的链式存储。

  3、线性表的示例

    单链表、静态链表、循环链表、双向链表。静态链表是因为某些语言没有指针或者引用类型的概念,所以应用一些特殊手段来实现指针的效果。单链表是与双向链表相对的,单链表只有一个指向下一个元素的指针,而双向链表有两个指针,一个指向上一个元素,另一个指向下一个元素。循环链表,想想都知道,它的尾指针指向了头节点,构成了一个循环。

    栈、队列。栈,是一种后进先出的结构。可以想象一叠文件,不断往上放,最上面总会先处理。队列,就更加形象了。可以想象排队买饭,排在前面的先买到,后来的只能插到队尾(理论上是这样,但还是有很多人不按套路来)。栈和队列都是一种特殊的线性表,只是在插入和删除上略有不同。

posted @ 2018-12-16 20:21  与詩为临  阅读(692)  评论(0编辑  收藏  举报