数据结构-浙江大学-线性表(二)

线性表

什么是线性表?

我们通过一个多项式的表示来引出,什么是线性表
在这里插入图片描述
在这里插入图片描述
这种表示方法,会造成空间浪费。
因此,我们只保存非0项

在这里插入图片描述在这里插入图片描述在这里插入图片描述

线性表

在这里插入图片描述

注意,上图中对于线性表的定义有误,线性表是同类型的有限序列,而不是同类型的有序序列
很好解释,数组一定是有序的吗?如果不是有序的数组,那么就不是有序序列,那就不是线性结构了吗?

线性表:由同类型数据元素构成有限(❌序)序列的线性结构
线性表中元素个数称为线性表的长度
线性表没有元素时,称为空表
线性表的起始位置称为表头,结束位置称为表尾

线性表的抽象数据类型描述

类型名称:线性表(List)
数据对象集
线性表是n(>=0)个元素构成的有限序列(a1,a2,…,an)
数据集合相关联的操作集

在这里插入图片描述

顺序存储(数组结构)

在这里插入图片描述
last指向最后一个元素,last是最后一个元素的下标。
last开始时的值是-1,最大是n-1

#define ElementType int
#define MAXSIZE 10

typedef struct LNode *List;//(struct LNode *)类型的List
//上面代码类似typedef int * INT;int * = INT
struct LNode{
	//ElementType类型的数组,数组长度MAXSIZE
    ElementType Data[MAXSIZE];
    int Last;//指向数组最后一个有效元素位置
};//定义一个节点,类型是struct LNode
struct LNode L;//型是struct LNode,名字是L的变量
List Ptrl;//等价于struct LNode * Ptrl;Ptrl是指针,存储类型是struct LNode类型

其实,郝斌老师是这么写的:

#define ElementType int
#define MAXSIZE 10

typedef struct LNode{
	//ElementType类型的数组,数组长度MAXSIZE
    ElementType Data[MAXSIZE];
    int Last;
}NODE, *PNODE;

PNODE Ptrl;
NODE L;

其实是一样的
另外:
Ptrl->Data[2];
等于*Ptrl.Data[2]; *Ptrl的类型是L,也就是L.Data[2];


在这里插入图片描述
在这里插入图片描述上图需要几点说明:

  1. 首先,我们常识中的位置,是从1开始的,因此位置i是1到n+1。但是,数组是从0开始的。在i个位置插入,其实是在下标为i-1的地方插入。
  2. 位置i后面的数据需要全部往后移动一个位置。并且,从最后一个位置开始移动,再往前移动。
  3. 最后,将插入的数据插入到位置i中。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述


链式存储

在这里插入图片描述

链式存储的表,在查找位置i上的值,以及在求链表长度方面要比顺序存储表复杂一些。
但是,其在存储空间的优化上,以及插入删除上要比顺序存储好很多。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
对调的话:
p->Next = s;没问题
s->Next = p->Next;等价于s->Next = s;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


广义表

在这里插入图片描述
在这里插入图片描述Tag=1,广义表,红圈里面的内容代表SubList
Tag=0,单元素,红圈里面的内容是Data

多重链表

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

黄色标记部分,是入口。4代表4行,5代表5列,7代表有7个非零元素
图中,有两类Term和Head,Head是行和列的入口。

可以使用一种类型,表示Term和Head两种类型的节点:
在这里插入图片描述


链表逆序

在这里插入图片描述

00100 6 4分别代表:头结点的位置、6个结点、翻转前4个结点
00000 4 9999分别代表:该结点的位置、结点的值、结点的指针指向的位置

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值