数据结构与算法学习之线性表


线性表的定义

零个或多个数据元素的有限序列

数学图形定义描述如下:
在这里插入图片描述
首元素a1无前驱元素,尾元素an无后继元素。中间元素都有唯一的前驱和后继元素。
n(n >= 0)是线性表的长度,n = 0时,线性表是空表。
线性表的每个数据元素的类型都相同。


线性表的存储结构

在这里插入图片描述


线性表的顺序存储结构

线性表的顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。
线性存储结构示意图
由于线性表的每个数据元素的类型都相同且是连续不断的,所以在C 语言(其他语言也相同)中一般用的一维数组来实现顺序存储结构。

描述线性表顺序存储的数据结构:

#define MAX_ARRY_SIZE   50         //线性表中数组的长度
typedef struct LinearList
{  
   int data_array[MAX_ARRY_SIZE];   //数据区
   int list_len;                    //线性表的长度
}LinearList_t,*P_LINEAR_LIST;

在这里插入图片描述
描述线性表顺序存储的数据结构:
1、MAX_ARRY_SIZE 存储数据的区域的空间的大小
2、data_array 存储数据的区域的空间
3、list_len 当前线性表的长度

当前线性表的长度list_len和数组的长度MAX_ARRY_SIZE是两个概念。
list_len是指当前线性表中有多少个元素,随着插入or删除操作变化。而MAX_ARRY_SIZE是数据数组的大小,是不变的。 list_len 总是小于等于 MAX_ARRY_SIZE

获取元素
/*
*  获取线性表中的元素
*  list 要操作的线性表     index 线性表中的第几个元素
*/
int GetLinearListItem(LinearList_t list,int index)
{
	if(list.list_len == 0 || index > MAX_ARRY_SIZE || index < 0)
	{
		return FALSE;
	}
	
	return list.data_array[index-1];
}
遍历线性表
void TraversingLinearList(P_LINEAR_LIST p_list)
{
	int index;

	if(p_list->list_len == 0) 
		return;

	for(index = 0;index < p_list->list_len;index++)
	{
		printf("第%d元素为%d\r\n",index+1,p_list->data_array[index]);
	}
}
插入元素
/*
*  向线性表中插入元素
*  p_list 要操作的线性表  insert_item要插入的元素   index 线性表中的第几个元素
*/
void InsertLinearListItem(P_LINEAR_LIST p_list,int insert_item,int index)
{
	int i;
	//线性表已满
	if(p_list->list_len >= MAX_ARRY_SIZE)
	{
		return FALSE;
	}
	//插入位置不合理
	if(index > MAX_ARRY_SIZE || index < 1)
	{
		return FALSE;
	}
	
	/* 如果插入元素合理不在表尾 */
	if(index <= MAX_ARRY_SIZE)
	{
		for(i = p_list->list_len-1;i >= index-1;i--)//插入元素位置后的元素往后挪一位
		{
			p_list->data_array[i+1] = p_list->data_array[i];
		}
	}
	p_list->data_array[index-1] = insert_item;
	p_list->list_len++;	
}

删除元素

int DeleteLinearListItem(P_LINEAR_LIST p_list,int index)
{
	int i;
	int ret_val;
	
	if(p_list->list_len == 0) //如果线性表为空
	{
		return FALSE;
	}
	if(index > MAX_ARRY_SIZE || index < 1) //删除位置不合理
	{
		return FALSE;
	}
	
	ret_val = p_list->data_array[index-1];
	if(index < p_list->list_len)      
	{
		for(i = index; i < p_list->list_len; i++) //将删除位置的后的元素往前挪一位
		{
			p_list->data_array[i-1] = p_list->data_array[i];
		}
	}
	p_list->list_len--;
	
	return ret_val;   //返回被删除的元素
}

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

在这里插入图片描述


线性表的链式存储结构

线性表链式存储结构定义

为了表示每个数据元素a1与其直接后继数据元素a+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称做指针。这两部分信息组成数据元素ai的存储映像,称为结点Node)。
在这里插入图片描述


PS:
学习书籍:《大话数据结构》

基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip基于bert实现关系三元组抽取python源码+数据集+项目说明.zip 个人大四的毕业设计、课程设计、作业、经导师指导并认可通过的高分设计项目,评审平均分达96.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 [资源说明] 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设或者课设、作业,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96.5分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),供学习参考。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欲盖弥彰1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值