【数据结构】第二章——线性表(1)

这篇具有很好参考价值的文章主要介绍了【数据结构】第二章——线性表(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【数据结构】第二章——线性表(1),数据结构,数据结构,算法,c语言,改行学it,学习

导言

大家好,很高兴又和大家见面啦!!!从今天开始,我们将进入线性表的学习。
线性表是算法题命题的重点。这类算法题实现起来比较容易且代码量较少,但是要求具有最优的性能(时间复杂度、空间复杂度),因此,我们应该牢固掌握线性表的各种基本操作(基于两种存储结构),在平时的学习中多注重培养动手能力。
今天这个篇章是对线性表的一个基本知识点的介绍,在这个篇章里,我们将学习到什么是线性表,线性表的基本操作又有哪些,下面我们开始介绍今天的内容。

1.线性表的定义

线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。

1.1 理解定义

从线性表的定义中我们可以提取到几个信息:

  1. 相同类型
  2. n>=0
  3. 有限序列

通过这几个信息,我可以知道:

  • 线性表的数据元素的元素类型,只要是相同的数据类型就行;
  • 线性表的元素个数可以为0,即线性表中没有元素;
  • 线性表的元素个数是有上限的,即线性表的元素有一个终点;
  • 线性表的元素的排列是有序的,并不是杂乱无章的;

大家现在可以思考一下,在我们学习C语言的过程中有没有与线性表的这些条件吻合的知识点呢?

有朋友很快就想到了——数组。
现在我们来看一下数组的一些特点:

  • 数组的元素是相同数据类型的;
  • 数组的元素的下标是从0开始依次递增的;
  • 在定义数组时是需要指定数组大小的;
  • 数组最后一个元素的下标 = 数组大小 - 1;

现在咱们再来对比一下线性表的定义,是不是完全符合呀!因此我们可以得到结论:

  • 数组就是一种线性表

在线性表中,数据元素因为是有序排列的,所以每一个元素都有自己对应的序号,我们将这个序号称为位序

与数组下标不同的是,线性表数据元素的位序是从1开始的,位序为1的元素就是线性表中的第一个元素,位序为n的元素就是线性表中的第n个元素,若用L命名线性表,则其一般表示为:
L = ( a 1 , a 2 , … … , a i , a i + 1 , … … , a n ) L=(a_1,a_2,……,a_i,a_{i+1},……,a_n) L=(a1,a2,……,ai,ai+1,……,an)

在这个式子中 a 1 a_1 a1 a n a_n an分别代表的是线性表的第一个元素和线性表的最后一个元素。

1.2 线性表的图像

在线性表中,只有唯一的“第一个”数据元素,所以我们又将 a 1 a_1 a1称为表头元素;
在线性表中,也只有唯一的“最后一个”数据元素,所以我们又将 a n a_n an称为表尾元素;
如果用图像来表示的话,线性表的图像应该如下所示:
【数据结构】第二章——线性表(1),数据结构,数据结构,算法,c语言,改行学it,学习
从图中可以看到,线性表就像是被一条线串起来的。

这时可能就有朋友有疑惑了,既然它是被一条线串起来的那为什么不叫他线性串呢?

对于这个问题,我是通过字符串来进行理解的。

在数组篇章中,我们在介绍字符串时有说过,字符串是由双引号引起的一个或多个字符,这里不管是一个字符也好,还是多个字符也好,它的本质上就是单一的字符,就比如"abc123" 这个字符串,它是由字符abc123这六个字符加上\0组成的,我们在看到这些元素的时候能够得到的信息也就是单一的信息。

而对于线性表而言,它的每一个数据元素都是由不同的数据项组成的,也就是说,一个数据元素中可能含有多个数据项,就比如班级里每次考试完会按学生的总分进行排名,如下图所示:
【数据结构】第二章——线性表(1),数据结构,数据结构,算法,c语言,改行学it,学习
在这个排名表中,这里的数据元素 a 1 a_1 a1 a 6 0 a_60 a60它们包含了4个数据项,并不是像字符串这种只有单一数据项的元素,因此,我们在看到 a 1 a_1 a1后可以了解到这所有的信息,就像这里的这张排名表一样;

1.3 线性表的逻辑特性

同样还是一张排名表,下面大家来判断一下,这个排名表是不是线性表:
【数据结构】第二章——线性表(1),数据结构,数据结构,算法,c语言,改行学it,学习

在这个排名表中,有两个并列第一,两个并列第五,三个并列第八,我们现在来根据线性表的定义来判断;

  • 这里的数据元素的数据类型都是相同的——由排名、姓名、学号、总分这四个元素组成的结构体类型;
  • 这里的排名都是有序的,按照从小到大的次序来排列的;
  • 这里的元素是有限的,总共有十个元素;

单从这些点看的话,这张表也是属于线性表的。但是对于一个线性表,它不仅仅只需要满足这些条件,它还需要满足以下的逻辑特性:

  • 表头元素与表尾元素都是唯一的
  • 除了表头元素外,其它的每个元素有且仅有一个直接前驱;
  • 除了表尾元素外,其它的每个元素有且仅有一个直接后继;

下面我们再来看这张表:

  • 刘一和陈二并列第一——并不满足唯一的表头元素;
  • 对于张三来说,他拥有两个直接前驱——并不满足有且仅有一个直接前驱;
  • 王五和赵六并列第五,对于李四来说,他拥有两个直接后继——并不满足有且仅有一个直接后继;
  • 对于孙七来说,他拥有两个直接前驱——并不满足有且仅有一个直接前驱;
  • 周八、吴九和郑十并列第八——并不满足唯一的表尾元素;
  • 对于孙七来说,他拥有三个直接后继——并不满足有且仅有一个直接后继;

通过这些逻辑特性判断,这张表并不是一个线性表。

因此我们可以得知线性表是指这种线性有序的逻辑结构,这也是线性表这个名字的由来;

2.线性表的特点

对于线性表这种线性有序的逻辑结构,它具有以下的特点:

  1. 表中元素的个数是有限的;
  2. 表中元素具有逻辑上的顺序性,表中元素有其先后次序;
  3. 表中元素都是数据元素,每个元素都是单个元素;
  4. 表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间;
  5. 表中元素具有抽象性,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容。

注意:线性表是一种逻辑结构,表示元素之间一对一的相邻关系。后面提到的顺序表和链表是指存储结构,两者属于不同层面的概念,因此不要将其混淆。

3.线性表的基本操作

一个数据结构的基本操作是指其最核心、最基本的操作。其它较复杂的操作可通过调用其基本操作来实现。线性表最主要的操作如下:

  1. 创建与销毁
    • InitList(&L):初始化表。构造一个空的线性表;
    • DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。
  1. 插入与删除
    • ListInSERT(&L,i,e):插入操作。在表L中第i个位置插入指定元素e;
    • ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值;
  1. 查找
    • LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素;
    • GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值;
  1. 其它操作
    • Length(L):求表长。返回线性表L的长度,即L中数据元素的个数;
    • PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值;
    • Empty(L):判空操作。若L为空表,则返回true,否则返回false;

对于这些基本操作,有些地方我们需要注意:

  1. 对数据的操作无非就是——创建、销毁、增删改查
  2. 我们可以根据实际情况来定义其它的基本操作,如这里的求表长、输出、判空等;
  3. 这里的操作内容并不是C语言提供的库函数,而是需要我们自己进行自定义的函数;
  4. 对于这些操作名,我们可以根据自己的喜好来定义,但是命名要有可读性;
  5. 这里展示的符号&表示C++语言中的引用调用,在C语言中采用指针也可达到同样的效果;
  6. 基本操作的实现取决于采用那种存储结构,存储结构不同,算法的实现也不同;

在了解完这些基本操作后,下面大家来思考一个问题:

为什么要实现对数据结构的基本操作?

这是因为我们在今后的工作中经常是团队合作的形式进行编程的,所以我们在编程的过程中需要将自己定义的数据结构通过函数的形式进行封装,以此来方便其他的成员进行使用;
其次将常用的操作/运算封装成函数也可以避免重复工作,降低出错的风险,大大的提高编程的效率;

结语

今天的内容到这里就结束了,在这个篇章中,我们介绍了什么是线性表,线性表有哪些特点,以及对于线性表有哪些基本操作。
在介绍这些内容的同时,我们了解了几个重要的术语——表长、空表、表头、表尾、前驱、后继、数据元素的位序(从1开始)。
今天对线性表的基本操作只是简单的提及了一下,并未展开进行详细介绍,在后续的篇章中,我会代码来实现这些基本操作,大家在阅读完这一篇章只需要了解这些基础知识点就行。
最后,感谢大家的翻阅,咱们下一篇再见!!!文章来源地址https://www.toymoban.com/news/detail-777809.html

到了这里,关于【数据结构】第二章——线性表(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构基础内容-----第二章算法

    算法 是指,解决问题或执行任务的一系列步骤、规则或指令的有序集合。它可以用来解决各种不同的问题,例如搜索、排序、优化、图像和语音识别等。在计算机科学中,算法通常用于编写程序以实现特定任务。算法可以被用于各种不同的领域,如人工智能、机器学习、数据

    2024年02月06日
    浏览(31)
  • C++算法之旅、05 基础篇 | 第二章 数据结构

    常用代码模板2——数据结构 - AcWing 使用结构体指针,new Node() 非常慢,创建10万个节点就超时了,做笔试题不会用这种方式(优化是提前初始化好数组,但这样跟数组模拟没区别了,而且代码量很长) 使用两个数组,e存储val,ne存储next。空节点next用-1表示 826. 单链表 - AcWi

    2024年02月10日
    浏览(36)
  • 【AcWing算法基础课】第二章 数据结构(部分待更)

    本专栏文章为本人AcWing算法基础课的学习笔记,课程地址在这。如有侵权,立即删除。 邻接表 :存储图和树 e数组存储每个结点的值,ne数组存储每个结点的指向的下一个结点。 数组模拟链表比较快,指针模拟会涉及到new操作,比较慢。 题目链接 :826. 单链表 1.1题目描述

    2024年02月13日
    浏览(38)
  • 数据结构英文习题解析-第二章 链表List

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW2 1. For a sequentially stored linear list of leng

    2024年04月11日
    浏览(38)
  • 从零开始学数据分析之——《线性代数》第二章 矩阵

    元素全为实数的矩阵称为实矩阵  元素全为负数的矩阵称为复矩阵 只有一行(列)的矩阵称为行(列)矩阵 元素全为零的矩阵称为零矩阵 行数和列数都等于n的矩阵称为n阶矩阵或n阶方阵 主对角线元素全为1,其余元素全为0的矩阵称为单位矩阵,记作E或I 两个矩阵行数和列数

    2023年04月23日
    浏览(34)
  • 线性代数 第二章 矩阵

    一、概念 个数排成的m行n列的表格 二、运算法则 三、初等变换 (1)用非零常数k乘矩阵的某一行(列); (2)互换矩阵某两行(列)的位置; (3)把某行(列)的k倍加至另一行(列)。 称为矩阵的 初等行(列)变换 ,统称 初等变换 。矩阵经初等行变换后秩不变。 初等

    2024年02月08日
    浏览(28)
  • 高等数学:线性代数-第二章

    n bm{n} n 元线性方程组 设有 n 个未知数 m 个方程的线性方程组 { a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ ⋯ ⋯ ⋯ a m 1 x 1 + a m 2 x 2 + ⋯ + a m n x n = b m begin{cases} a_{11}x_{1} + a_{12}x_{2} + cdots + a_{1n}x_{n} = b_{1} \\\\ a_{21}x_{1} + a_{22}x_{2} + cdots + a_{2n}x_{n} = b

    2024年02月11日
    浏览(25)
  • 线性代数第二章矩阵及其运算详解

    一.线性方程组和矩阵 1.概念 如图所示,该矩阵称为 m行n列矩阵 若行数和列数都等于n,则该矩阵称为 n阶方阵 两个矩阵的行数相等,列数也相等,就称它们为 同型矩阵 若A=(aij)和B=(bij)是同型矩阵,且aij=bij(i=1,2,...,m;j=1,2,...,n),则称 矩阵A与矩阵B相等 ,记作 A=B 2.特殊

    2024年01月25日
    浏览(36)
  • <<数值分析>>第二章线性方程组的直接解法

              解线性方程组是工程数学中最常见的模型之一。所说的“最常见”有两方面的含义: 1)一部分工程问题的本身建立的就是线性方程组模型; 2)较多工程问题建立的非线性方程组模型需要转化为线性方程组的求解。           线性方程组为Ax=b,以下介绍

    2024年02月08日
    浏览(36)
  • 线性代数(魏福义)——第二章:矩阵及其向量特征

    矩阵 是一个 矩形数表 ,它是研究线性方程组、向量及其变换的重要工具 在数学中,矩阵是一个按照长方形排列的复数或实数集合,它是将一组 有序的数据 视为“ 整体量 ”进行 表述 和 运算 ,从而使问题的表述更加简洁。 2.1.1 矩阵 由 m × n 个数aij排成的 m行n列 的 数表

    2024年02月04日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包