Hi,大家好,今天我们正式来谈谈我们最常用且最简单的数据结构--线性表。在谈论它之前,我先给大家说几点学习要注意的事项。我们学习数据结构,一定要多注重上机实践,多练习,不能只是纸上谈兵。接下来我讲数据结构的相关知识,会使用C语言来进行编码。为什么要用选它呢?其实相比于C语言,我更擅长Java,之所以选择C语言,是因为这门编程语言确实很重要,它是一门面向过程的高级语言,主流的操作系统就是用它实现的,掌握好C语言,对我们理解操作系统源码很有帮助。我们用C语言,还可以直接操作硬件。另外,对于要考研的朋友,研究生笔试和复试会有要求让考生用C语言编码,据我所知,中大的复试上机操作就指定要用C语言编码,所以,我建议大家学数据结构时,就多用C语言进行编码,巩固下C语言的知识,提高下编码技能。好了,接下来进入正题。
1、线性表概念
什么叫线性表呢?线性表指的是零个或多个元素的有限序列。线性表是一种线性结构,对于线性表中的元素来说,元素之间拥有一对一的关系,第一个元素只有一个后继元素,最后一个元素只有一个前驱元素,其余元素分别有一个前驱元素和后继元素。线性表的元素个数叫做线性表的长度。我们最常用的数组,其实就是一种线性表。包括我们后面要学习的栈、队列,它们也属于线性表,只不过是特殊的线性表。要判断一种数据结构是不是线性表,其实只要判断元素之间是不是拥有一对一的关系。
2、线性表的基本操作
线性表存储了一定量的数据,我们针对线性表定义一个抽象数据类型,那么在它之上我们可以进行以下基本操作:
(1)初始化线性表
(2)清空线性表
(3)查询线性表中数据的存储位置
(4)删除线性表中的某个数据
(5)将数据插入线性表
(6)获取线性表的长度
后面我会专门编码实现以上各个操作,帮助大家加深对线性表的理解。
3、线性表的存储结构
线性表的存储结构分为顺序存储结构和链式存储结构,下面我先简单地介绍下它们的概念,后续会分别对它们进行讲解。
(1)线性表顺序存储结构
它指的是用一段地址连续的存储单元依次存储线性表中的数据。这种结构表示的是逻辑上相邻的元素,在物理存储上也是相邻的。我们常用的数组就是一种线性的顺序存储结构。
(2)线性表链式存储结构
我们用一组任意的存储单元来存储线性表中的元素,元素之间的内存位置可以相邻也可以不相邻。对于每一个数据元素,它既存储着自身的信息,也存储着指向其后继的信息。这两部分信息组成了数据元素的存储镜像,我们将其称为结点。每个结点是由两部分组成,存储数据的那部分,我们称之为数据域;指向后继信息的那部分我们称之为指针域。指针域中存储的信息,我们称之为指针(C语言中的概念,其实就是个地址,不懂的朋友可以翻看下C语言书籍).将n个结点链接在一起,就组成了链表,也就是线性表的链式存储结构。由于每个结构只包含一个指针域,我们又将链表称为单链表。
4、注意事项
我们谈论线性表的顺序存储和链式存储,其实就是在说线性表的数据在内存中的存储形式。由于二者存储形式不同,所以在对它们的基本操作实现上也有很大的差异。线性表的顺序存储结构这块其实比较好理解,如果大家熟悉数组的话。不过,对于链式存储这块,由于涉及到指针操作,会稍微比较难,这块大家要多注意理解,尤其是对各个操作的编码实现。后面讲述时,我会编码来实现那些基本操作。另外,推荐大家安装下codeblocks或者visiualc++作为集成开发环境来进行编码,没有安装的,不妨网上搜索下相关教程。
今天就先说到这里,觉得有收获的朋友,麻烦帮忙点击下“