大话数据结构笔记

  • 程序设计 = 数据结构 + 算法

  • 1.绪论

  • 1.1基本概念和术语

  • 1.1.1数据

    数据:是描述客观事物的符号,是计算机中可以操作的对象,是可以被计算机识别并输入给计算机处理的符号集合。
    我们这里说的数据,其实就是符号,而且这个符号必须包含以下两个前提条件:
    1.可以输入到计算机中
    2.可以被计算机程序处理
  • 1.1.2 数据元素

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

    数据元素是由若干个数据项组成,比如说人这个数据元素是由手脚眼口鼻等数据项组成,也可以由年龄,性别等数据项组成
    数据项是数据不可分割的最小对象。虽然数据项是数据的最小单位,但是真正讨论问题时,数据元素才是数据结构中建立数据原型的着眼点
  • 1.1.4 数据对象

    数据对象:是性质相同的数据元素的集合,是数据的子集
    比如说一个数据对象,它拥有姓名,年龄,性别等相同的数据元素
  • 1.1.5 数据结构

    结构:简单的理解就是关系。不同数据之间不是独立的,而是存在特定的关系,我们将这些关系称为结构
    数据结构:相互之间存在一种或者几种关系的数据元素的集合
  • 1.2逻辑结构与物理结构

  • 1.2.1逻辑结构

    逻辑结构:指数据对象中数据元素之间的相互关系
    1.集合结构
    集合结构:集合结构中的数据元素除了属于同一集合外没有其他的关系
    2.线性结构
    线性结构:线性结构中的数据元素之间的关系都是一对一的关系
    3.树形结构
    树形结构:树形结构中的数据元素之间的关系存在一对多的层级关系
    4.图形结构
    图形结构:图形结构之间的数据元素之间的关系是多对多的关系
  • 1.2.2 物理结构

    物理结构是指数据的逻辑结构在计算机中的存储形式
    1.顺序存储结构
    是把数据元素存放在地址连续的存储单元内,其数据间的逻辑关系与物理关系是一致的
    数组就是这种,其实就是在内存中开辟一段地址空间,然后按顺序一个一个排队,不许插队,每个人占一段空间
    2.链式存储结构
    是把数据元素放在任意的存储单元里,这组存储单位可以是连续的,也可以是不连续的。
    数据元素的存储关系并不能反映其逻辑关系,因此需要一个指针来存放数据元素的地址,通过地址来找到数据元素的位置

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

  • 2.算法

  • 2.1算法定义

    算法是解决特定问题的求解步骤的描述,在计算机中表现为指令的有限数列,并且每条指令表示一个或多个操作
    算法的定义中提到了指令,指令能被人或机器等计算装置执行,他可以是计算机指令,也可以是我们平时使用的语言文字
    为了解决某个或者某类问题,需要把指令表示成一定的操作序列,操作序列包括一组操作,每一个操作完成特定的功能,这就是算法

  • 2.2算法的特性

  • 2.2.1输入输出

    算法具有零个或者多个输入,一般的算法都有多个输入,零个输入的算法比如说打印一个“HELLO WORLD!”
    算法具有一个或者多个输出,算法一定具有输出,不然这个算法就没有了存在的意义;输出的形式可以的打印也可以是返回一个或者多个值。

  • 2.2.2有穷性

    指算法在执行完有限的步骤后,自动结束而不会进行无限循环,并且每个步骤在可接受的时间内完成。如果说一个算法可以完成,但是要花上数十年,这在数学上虽然是有穷的,但是这么久的算法也没有其存在的意义

  • 2.2.3确定性

    算法的每一个步骤都具有确定的意义,不会出现二义性

  • 2.2.4可行性

    算法的每一个步骤都是可行的,每一步都是可以通过执行有限次数完成的

  • 2.3算法设计的要求

  • 2.3.1正确性

    算法的正确性是指沙发俺应该至少具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案


    算法
  • 2.3.2可读性

    算法设计的另一目的是为了便于阅读、理解和交流

  • 2.3.3健壮性

    当输入的数据不合法时,算法也能进行处理,我不是产生异常或者莫名其妙的结果

  • 2.3.4时间效率高和存储量低

  • 2.4算法效率的度量方法

  • 2.4.1事后统计方法

    这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编译的程序的运行时间进行比较,从而确定算法效率的高低
    这种方法有很大缺陷,不用这种方法度量

  • 2.4.2事前分析估算方法

    在计算机编译前,依据统计方法对算法进行估算
    消耗的时间因素:
    1.算法采用的策略、方法
    2.编译产生的代码质量
    3.问题的输入规模
    4.机器执行指令的速度

  • 2.5算法时间复杂度

  • 2.5.1算法时间复杂度定义

image.png

image.png
  • 2.5.2常见的时间复杂度

    image.png

    image.png
  • 3 线性表

  • 3.1 线性表的定义

    零个或多个数据元素的有限序列。
    线性表首先是一个序列,也就是元素之间是有顺序的,每个元素只有一个前驱和后继,当然第一个元素没有前驱和最后一个元素没有后继
    线性表中的元素是有限的,无限的数列只存在于数学模型中

    • 线性表元素个数n(n>=0)定义为线性表的长度,当n=0时,为空表
  • 3.2 线性表的抽象数据类型

    image.png
  • 3.3 线性表链式存储结构

    对于数据Ai而言,不仅仅要存储其本身的信息外,还需要存储一个指示其直接后继的信息(即其直接后继的存储位置)。
    把存储元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称作指针。这两部分信息组成数据元素Ai的存储映像,称为结点(Node)
    n个结点链结成一个链表,即为线性表的链式存储结构,因为此链表的结点只包含一个指针域,所以叫单链表。


    image.png

    对于线性表而言,总得有个头有个尾,链表也是一样。我们把链表中第一个结点的存储位置叫做头指针,整个链表的存取必须从头指针开始进行;相应的,链表的最后一个节点指针为空(通常用NULL来表示)。

  • 有时为了更加方便地对链表进行操作,会在单链表的第一个结点前附设一个结点,称为头结点。头结点的数据域可以不存储任何信息,或者可以存储如线性表的长度等附加信息,头结点的指针域存储指向第一个结点的指针


    image.png
  • 3.4 头指针和头结点的异同

  • 头指针:
    1.头指针是指链表指向头一个结点的指针 ,若链表有头结点,则是指向头结点的指针
    2.头指针具有标识作用,所以常用头指针冠以链表的名字
    3.无论链表是否为空,头指针均不为空。头指针是链表的必要元素

  • 头结点:
    1.头结点是为了操作的统一和方便而建立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度)
    2.有了头结点,对于第一元素结点前插入结点和删除第一节点,其操作与其他结点的操作就统一了
    3.头结点不一定是链表第一要素

  • 3.5 单链表的插入与删除

    • 插入步骤


      image.png
    • 代码实现


      image.png
    • 删除步骤


      image.png
    • 代码实现


      image.png
  • 3.6 单链表的整表创建

    • 算法


      image.png
    • 代码


      image.png

你可能感兴趣的:(大话数据结构笔记)