引入

之前我们都在学习什么是数据结构以及如何评价一个算法的时间、空间复杂度,今天开始,我们学习一个最简单的数据结构,线性表。

感受数据结构

还记得小时候,排队去参加升旗仪式,老师们会按照高矮个将同学们分好位置,全班50多个人,怎么记住自己的位置呢?

1号小红
2号小明
3号小强

55号小美
56号小力

老师肯定不能告诉你,Bliner 你在32位,那你站队的时候还要从1数到32…如果8号没来..你还少数了…这样肯定不行。
所以,老师们一般都会这么告诉你,记住你前面的同学,下次你就站在这儿。
并且,如果有谁不在,也可以一下子就知道,因为肯定有同学会说,我前面的 XX 没来

线性表

线性表就像刚才排队一样,具有线一样的性质。

**定义:**由 0 个或者多个数据元素组成的有限序列,就称为线性表。

  • **必须是序列:**线性表是一个序列,元素之间有先来后到的关系。
  • **多个元素:**如果存在多个元素,那么第一个元素无前驱,最后一个元素无后继,其他的元素只有一个前驱和后继。(类似 C 学指针时候的双链表)
  • **有限:**线性表强调的是有限,事实上无论计算机发展到多强大,处理的数据一定是有限的。

**数学表达:**若将线性表记为(a1,…ai-1,ai,ai+1,….an),则表中 ai-1 领先于 ai , ai 领先于 ai+1。
称 ai-1 是 ai 的直接前驱元素,ai+1 是 ai 的直接后继元素

  • **元素个数:**所以线性表的元素个数 n (n>=0) 定义为线性表的长度,n=0时,称为空表。(即:有多少个数据,则线性表就有多长,线性表可以为空

例题

例1: 公司的组织架构属于线性关系吗

  • 答: 不是。因为一个CEO 对应多个总监,一个总监对应多个经历,一个经理对应多个员工,这是一对多的关系。
  • **讲解:**线性关系的条件是,如果存在多个元素,则第一个元素无前驱,最后一个元素无后继,其他元素只能有一个前驱和后继。不符合最后一句。

**例2:**一个班级同学之间的友谊是线性关系吗?

  • **答:**不是。因为我们每个人都可以跟其他人建立友谊。

**例3:**一个班级里面的点名册是线性关系吗?

  • **答:**是的。因为我们的点名册是根据学号来排序的。
  • **分析:**点名册根据学号排序,有限、有序列、有先来后到,我的学号前后只对应两个学生,我的直接前驱和我的直接后继,所以是线性表。

抽象数据类型

下一节,我们会说线性表的抽象数据类型,我们先来铺垫一下什么是抽象数据类型。

什么是数据类型?

**定义:**是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
例如:整形、字符型、浮点型,这些都是数据类型。

为什么要用数据类型呢?

因为不同的数据在内存中占中不同的长度。
例如,int i=3float j = 3.1415926 ,在内存中占用的空间肯定是不一样的。
给 int 类型放:3.1415926 就会放不下
给 float 类型放:3 就会浪费内存空间
所以,我们在声明变量前,首先要声明数据类型,告诉系统你要多少内存空间。

数据类型分类

在 C 语言中,数据类型可以分为两大类:

  • **原子类型:**整型、浮点型、字符型等等;
  • **结构类型:**由原子类型和结构类型组成的,可以对该类型进行分解,如结构体、共用体、枚举体等等。

抽象

我们知道了什么是数据类型,那么抽象数据类型又是什么呢?
**抽象定义:**指的是抽取出事物具有的普遍性本质。它要求抽出问题的特征,忽略非本质细节。是对具体事物的一个概括。抽象是一种思考方式,他隐藏了繁杂的细节。

那么,根据抽象的定义,我们对已有的数据类型进行抽象,就有了抽象数据类型。

抽象数据类型

**定义:**抽象数据类型(Abstract Data Type)是指一个数学模型及定义在该模型上的一组操作。

  • 抽象数据类型的定义,仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关
  • 抽象的意义,在于数据类型的数学抽象特性。
  • 抽象数据类型,不仅仅指那些已经定义并实现的数据类型,还可以是计算机编程者在设计软件程序时自己定义的类型

描述抽象数据类型:

ADT 抽象数据类型名
Data
数据元素之间逻辑关系的定义
Operation
操作
endADT

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。