大话数据结构(2)线性表

线性表

线性表定义

线性表: 零个或多个数据元素的有限序列
Tips: 1. 有序性 2. 有限性

在这里插入图片描述
在较复杂的线性表中,一个数据元素可以由若干个数据项组成。
在这里插入图片描述

线性表的顺序存储结构

Definition: 用一段地址连续的存储单元依次存储线性表的数据元素

在这里插入图片描述

地址计算方法

在这里插入图片描述
线性表中第i+1个元素的存储位置和第i个元素的位置关系式:(假设每个数据占据c个存储单元)

LOC(ai+1)= LOC(ai)+ c

第i个元素ai可由a1推导出:

LOC(ai)= LOC(a1)+ (i+1)*c

通过这个公式可算出线性表中任意位置的地址,而且都是相同的计算时间。因此对于每个线性表位置的存入或取出的时间复杂度为O(1)。

顺序存储结构的插入与删除

在这里插入图片描述

插入算法的思路:(代码 略)删除算法的思路:(代码 略)
如果插入位置不合理,抛出异常;如果删除位置不合理,抛出异常
如果线性表长度大于等于数组长度,抛出异常或动态增加容量取出删除元素
从最后一个元素开始向前遍历到第i个位置,分别向后移动一个位置从删除元素位置开始遍历到最后一个元素位置,分别将它们向前移动一个位置
插入元素至i位置表长减一
表长加1

时间复杂度 O(n)

线性表顺序存储结构的优缺点

在这里插入图片描述

线性表的链式存储结构

链式存储结构的特点是用一组任意的存储单元存储线性表的数据,每个数据之间存储地址不一定连续。前一个数据记录下后一数据的存储地址,形成一条存储链。
在这里插入图片描述
我们把存储数据元素星系的域成为数据域,把存储直接后继位置的域成为指针域。这两部分信息组成数据元素ai的存储映象,称为结点(Node)。
n个结点链结成一个链表,因为此链表的每个结点只包含一个指针域,因此叫单链表。
在这里插入图片描述
链表中第一个结点的存储位置叫做头指针,整个链表的存取从头指针开始。之后的每一个结点就是上一个后继指针指向的位置。
在这里插入图片描述
单链表结构指针定义

typedef struct Node
{
	ElemType data;
	struct Node *Next;
}Node;
typedef struct Node *Linklist /* 定义Linklist*/

单链表的读取

获取第i个数据的算法思路:
在这里插入图片描述

//顺序线性表L已存在, 1 <= i <= ListLength(L)
//操作结果:用e返回L中第i个元素的值
Status GetElem(LinkList L, int i, ElemType *e)
{
	int j;
	LinkList p;
	p = L -> next; //让p指向链表的第一个结点
	j = 1;
	while(p&&j<1) // p不为空或计数器j还没等于i时,循环继续
	{
		p = p -> next;
		++j;
	}
	if(!p|| j>1)
	{
		return error;
	}
	*e = p-> data;
	return OK;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值