线性表

线性表的相关概念

线性表:零个或多个数据元素的有限序列。

最简单的数据结构

线性表的长度:线性表元素的个数n

线性表的抽象数据类型

ADT 线性表(List)
Data

Operation
	InitList(*L);			初始化操作,建立一个空的线性表L
	ListEmpty(L);			若线性表为空,返回true,否则返回false

	ClearList(*L);			将线性表清空
	GetElem(L,i,*e);		将线性表L中第i个位置元素值返回给e
	LocateElem(L,e);		在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败

	ListInsert(*L,i,e);		在线性表L中的第i个位置插入新元素e
	ListDelete(*L,i,*e);	删除线性表L中第i个位置元素,并用e返回取值
	ListLength(L);			返回线性表L的元素个数

给人看的

线性表在内存中的存储

顺序存储结构

定义
顺序存储方式

三个属性:
存储空间的起始位置:数组data
线性表的最大存储容量:数组长度MaxSize
线性表的长度:length

数据长度与线性表长度区别
数据长度:存放线性表的存储空间的长度,分配后一般不变。
线性表长度:线性表中数据元素的个数,随着线性表插入和删除操作而变化。

元素的插入

元素和删除

优点

  1. 可以快速存取表中任意位置的元素。
  2. 无须为表中元素之间的逻辑关系而增加额外的存储空间。

缺点

  1. 插入和删除操作需要移动大量元素。
  2. 当线性表长度变换较大时,难以确定存储空间的容量。
  3. 造成存储空间的“碎片”。

链式存储结构

可以解决线性表的顺序存储结构中元素的删除和插入时,移动大量元素的耗时。

存储单元可以是不连续的,可以存在内从中未被占用的任意位置。

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

数据域:存储数据元素信息的域。
指针域:存储直接后继位置的域。
指针/链:指针域中存储的信息。
结点:数据域和指针域构成的存储映像。
链表:n个结点的组合。
头指针:链表中第一个结点的存储位置。
头结点:在单链表的第一个结点前附设一个结点。

头结点的指针域存储指向第一个结点的指针。


头指针和头节点的异同


单链表

单链表的读取

获得链表第i个数据的思路:

  1. 声明一个结点
  2. 当 j < 1 时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j 累加1;
  3. 若到链表末尾p为空,则说明第 i 个元素不存在;
  4. 否则查找成功,返回结点p的数据。
在这里插入代码片
结点的插入

在这里插入图片描述

结点的删除

在这里插入图片描述

单链表的整表创建
单链表结构和顺序存储结构

其他链表

静态链表

插入
删除
优点
缺点

循环链表

定义:单链表中终端结点的指针端由空指针改为指向头结点,使整个单链表形成一个环,头尾相接的单链表即为单循环链表。

结点的插入

结点的删除

双向链表

定义:在单链表的每个结点中,再设置一个指向其前驱结点的指针域。

结点的插入

结点的删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值