一 线性表的定义和特点
定义:
定义很简单,第一个叫做起始节点,最后一个叫做终点或者终端节点,中间的都是节点,前一个就是直接前趋,后一个就是直接后继,每一个元素都有一个下标,是他的序号,表示他在线性表的位置。
n为元素总的个数,n为0的话就是空表。
例如:26个字母,每个字母之间有先后关系。其中数据元素是字母。
例二;
其中,每个学生的信息就是数据元素。
例三
注意相同特性。
起始节点和终端节点有些特殊。
二 案例引入
怎么存储呢,就是把他们的每一项的系数拿出来,做成一个线性表。
最后,用数组存起来他们的对应的指数
但是,对于稀疏多项式
你要是这么弄的话有点浪费空间。比如这个空了很多,怎么办捏
空的就不存了呗,你以为呢
我记得c语言中有一个结构体,可以用结构体数组来解决这类问题
对于最后的排序,
做一个二维数组,这里先不用结构体了。
这里,总之就是让两个线性表的数都一遍,如果一样,就加到一起,放到c表里面,(已经进去了,停止和另一个表中的元素比较,不再比了。)如果不同,就把小的放到里面,当然,如果对应的指数已经存在了一个项了。那就直接加进去吧。
数组c的大小是不定的,那么我们定义的时候怎么办呢。
这个时候就体现出精打细算的链式存储结构的好处了。
其中p表示当前比较的数据元素。首先对b的1和a的1比较一下
0更小,就把0放到所谓的抽象的c里面,接下来,a的第一个比较完了,该2了。发现指数都是1
,那就系数求和
这个时候,其实从a或者b里面拿无所谓了,反正是最后是系数求和,放到所谓的c里面。
好了,b的第一个元素你也已经用过了,接下来就是b的第二个和a的第三个元素了。
同理
就是这么一个流程,最后具体的代码以后再说
下一个案例
不得不说,我又想到了c语言的结构体。
这几个都可以是简单类型或者复杂类型,基本操作有很大的相似性。其实大差不差,嘻嘻。
三 线性表的类型定义
先复习一下抽象数据类型,它的定义一共有三个部分,数据对象,数据对象之间的关系集合,作用在这些数据对象上的基本操作。
因此,我的线性表的定义如下
具体实现后面再说,首先的线性表初始化
还有就是销毁线性表
有条件,先得存在
清楚线性表,就是让他留着,但是里面没东西了
判断是不是空的
.
计算元素个数
L是线性表的名字,i是位置,存到e上面,因此得输入进去e的地址
这个操作是查找定位的,首先得线性表得存在吧
然后compare可以是比较大,或者小,或者等于,以后有具体的实现
这一波,属于是找一下前趋
这是找后继
终于来了一个比较常用的了 ,特殊的,可以在第一个之前或者最后一个的后面的之前,
你看,他是往前放的
例如往i放
当然了还有删除的额操作,
visited()未定,想干啥都可以
重点在于这是遍历的哦
Travels意思就是遍历
咯,这里是思路的梳理,后续才会学习怎么存储和实现,看看顺序结构下是怎么存储的,