线性表的顺序存储实现

前言

线性表的顺序存储及基本操作的实现


一、线性表

线性表(List)是由同类型数据元素构成有序序列的线性结构,用户处理线性表数据时常常需要初始化、查找、插入、删除、计算数据长度等操作。

线性表还包含以下几个要素:

表中元素个数称为线性表的长度

线性表没有元素时,称为空表

表的起始位置称表头,表的结束位置称表尾

数据Data利用数组存储,利用下标使得查找 等操作十分方便。Last始终存储最后一个元素的数组下标,可以用于判断数组长度。在初始化时,Last的值为-1。

typedef struct LNode*List;
struct LNode{
	ElementType Data[MAXSIZE];  //利用数组的连续存储空间顺序存放线性表的各元素 
	int Last;         //指向最后一个元素
};
struct LNode L;
List PtrL;

二、操作集

线性表的基本操作包括:

List MakeEmpty(); //初始化一个空线性表 
ElementType KFind(int K,List L); //根据位序K,返回相应元素 
int Find(ElementType X,List L); //在线性表L中查找X第一次出现的位置 
void Insert(ElementType X,int i,List L); //在位序i前插入一个新元素X 
void Delete(int i,List L); //删除指定位序i的元素 
int Length(List L); //返回线性表L的长度 

基本操作的实现 

1.初始化:

List MakeEmpty()
{
	List PtrL;
	PtrL = (List)malloc(sizeof(struct LNode));
	PtrL->Last = -1;
	
	return PtrL;
}

创建一个空线性表并返回其指针。

2.查找

int Find(ElementType X,List PtrL)
{
	int i = 0;
	while(i <= PtrL->Last && PtrL->Data[i] != X)
		i++;
	if(i > PtrL->Last)   //如果没找到,返回-1
		return -1;
	else
		return i;
}

 3.插入

void Insert(ElementType X,int i,List PtrL)
{
	int j;
	if(PtrL->Last == MAXSIZE - 1)    //表满,无法插入 
	{
		printf("表满\n");
		return ;
	}
	if(i < 1 || i > PtrL->Last+2)    //检查插入位置合法性 
	{
		printf("插入位置不合法\n");
		return ;
	}
	for(j = PtrL->Last;j >= i-1;j--)
		PtrL->Data[j+1] = PtrL->Data[j];
	PtrL->Data[i-1] = X;
	PtrL->Last++;
}

4.删除

void Delete(int i,List PtrL)
{
	int j;
	if(i < 1 || i > PtrL->Last + 1) //检查空表及删除位置的合法性 
	{
		printf("不存在第%d个元素\n",i);
		return ;
	}
	for(j = i;j < PtrL->Last;j++)
		PtrL->Data[j-1] = PtrL->Data[j];
	PtrL->Last--;
} 

三、应用举例

我们以多项式的存储为例:

要表示一元多项式

我们就需要分别存储每一项的次数 i 及其对应的系数 ,有时候需要知道其所含的项数(非零项)。

法1:顺序结构直接存储 我们可以用数组下标 i 表示次数,数组元素Arr[i] 表示该项系数:

而用一般数组存储的弊端就在于数组的下标是一定的,如果不含该次项,我们就只能在其对应的位置填0,并且如果想要知道这个多项式含有几个非零项就只能通过遍历来实现,但实质上我们只需要存储非零项的次数和系数 。

法2:顺序结构存储非零项 我们可以利用结构体数组,定义两个分量分别存储次数 i 和 系数  

这样就大大节省了存储所需的空间,我们只需要定义两个指针分别对应系数和指数两个数组,就可以在一个循环里表示出所有非零项,在对两个多项式运算时(加减乘除),只需要在遍历时对两个结构体表示指数的数组进行检查,构造一个新的结构数组表示运算结果即可。

struct P{
    int coef;  //存储系数coefficient
    int expon; //存储指数exponent
}P1[n];
//一个结构体是一个非零项
//数组P1[n]表示一个包含n个非零项的多项式P1

以上两种方法都是基于数组存储多项式这一线性结构的


例图及思路来源于浙江大学《数据结构》MOOC,该系列文章为题主学习课程的总结笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/333454.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言编译和链接

翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境 .第一种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令 .第二种是执行环境&#xff0c;它用于实际执行代码 翻译环境 翻译环境是由编译和链接两个大过程组成&#xff0c;而…

交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装

AArch64 是随 ARMv8 ISA 一起引入的 64 位架构&#xff0c;用于执行 A64 指令的计算机。而且在 AArch64 状态下执行的代码只能使用 A64 指令集。&#xff0c;而不能执行 A32 或 T32 指令。但是&#xff0c;与 AArch32 中不同&#xff0c;在64位状态下&#xff0c;指令可以访问 …

ArcGIS Pro控件汇总

控件来源 我们对其一一进行查看是否有控件 查看位置 控件展示 ribbonControls 展示 代码 <controls:ProWindow x:Class"ProAppModule9.ProWindowRibbon"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:controls"clr-…

集成学习算法(Bagging 思想、Boosting思想)及具体案例

概述&#xff1a;是机器学习中的一种思想&#xff0c;通过多个模型的组合形成一个精度更高的模型&#xff0c;参与组合的模型称为弱学习器 1、Bagging 思想 有放回的抽样&#xff08;booststrap抽样&#xff09;产生不同的训练集&#xff0c;从而训练不同的学习器&#xff1b;…

FairGuard游戏安全2023年度报告

导 读&#xff1a;2023年&#xff0c;游戏行业摆脱了疫情带来诸多负面影响&#xff0c;国内游戏市场收入与用户规模双双实现突破&#xff0c;迎来了历史新高点。但游戏黑灰产规模也在迅速扩大&#xff0c;不少游戏饱受其侵扰&#xff0c;游戏厂商愈发重视游戏安全问题。 为帮助…

重磅发布!基于百度飞桨的《人工智能基础及应用》书籍正式上线

科技日新月异的今天&#xff0c;人工智能已经成为引领未来的核心驱动力。为了帮助大家更好地深入理解人工智能的理论和技术&#xff0c;为未来发展做好准备&#xff0c;百度飞桨教材编写组联合北京交通大学王方石教授、北京邮电大学杨煜清特聘副研究员共同撰写推出了《人工智能…

使用 FFmpeg 轻松调整视频的大小/缩放/更改分辨率

在此 FFmpeg 教程中&#xff0c;我们学习使用 FFmpeg 的命令行工具更改视频的分辨率&#xff08;或调整视频的大小/缩放&#xff09;。 更改视频的分辨率&#xff08;也称为调整大小或缩放&#xff09;是视频编辑、处理和压缩中非常常见的操作。对于 ABR 视频流尤其如此&#…

【笔记】Helm-3 主题-6 Chart仓库指南

Chart仓库指南 本节介绍如何创建和使用chart仓库。在高层级中&#xff0c;chart仓库是打包的chart存储和分享的位置。 社区的Helm chart仓位于 Artifact Hub &#xff0c;欢迎加入。不过Helm也可以创建并运行您自己的chart仓库。该指南将介绍如何操作。 Artifact Hub 先决条…

防爆气象站需要如何维护

TH-FBCQX2 在工业生产中&#xff0c;防爆气象站是保障安全生产的重要设备之一。由于其特殊的使用环境和功能&#xff0c;防爆气象站的维护保养工作显得尤为重要。 一、日常维护保养 清洁&#xff1a;防爆气象站的外部和内部组件需要定期清洁&#xff0c;以去除灰尘、油渍和杂质…

快速入门:搭建宠物用品小程序商城的必备知识

小程序商城逐渐成为商家展示和销售产品的重要渠道。对于宠物用品商家来说&#xff0c;搭建一个宠物用品小程序商城不仅可以提高品牌知名度&#xff0c;还能吸引更多的潜在客户。本文将介绍如何通过乔拓云平台搭建宠物用品小程序商城。 首先&#xff0c;商家需要登录乔拓云平台后…

GaussDB与openGauss有什么相同和不同?

众所周知&#xff0c;GaussDB是华为自主创新研发的分布式关系型数据库&#xff0c;为企业提供功能全面、稳定可靠、扩展性强、性能优越的企业级数据库服务&#xff0c;openGauss是开源数据库&#xff0c;两者之间又是什么样的关系&#xff0c;有什么相同和不同&#xff0c;让我…

Git教程学习:03 记录每次更新到仓库

文章目录 1 检查当前文件状态2 跟踪新文件3 暂存已修改的文件4 状态简览5 忽略文件6 查看已暂存和未暂存的修改7 提交更新8 跳过使用暂存区域9 移除文件10 移动文件 现在我们的机器上有了一个 真实项目 的 Git 仓库&#xff0c;并从这个仓库中检出了所有文件的 工作副本。 通常…

【技术科普】什么是AI视频识别分析?干货满满!

视频AI识别分析是指利用人工智能技术对视频数据进行智能化检测、分析和提取有用信息的过程。通过视频AI分析&#xff0c;可以自动化地识别、检测和理解视频中的对象、动作、场景等元素&#xff0c;并进行标记或者相关处理&#xff0c;最后形成相应事件的处理和告警信息。这项技…

软件是什么?前端,后端,数据库

软件是什么&#xff1f; 由于很多东西没有实际接触&#xff0c;很难理解&#xff0c;对于软件的定义也是各种各样。但是我还是不理解&#xff0c;软件开发中的前端&#xff0c;后端&#xff0c;数据库到底有什么关系呢&#xff01; 这个问题足足困扰了三年半&#xff0c;练习时…

分布式ID(2):雪花算法生成ID

1 雪花算法简介 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示: 41-bit的时间可以表示(1L&l…

双线逆变器之低压转高压DC-DC拓扑结构

这是一个升压的过程&#xff0c;电池电压48V经过变压器等一系列的元器件最后升压到400V 如何让变压器形成正负电压&#xff1f; 通过让Q6Q7开通&#xff0c;Q6Q8关闭形成上下- 通过让Q6Q7关闭&#xff0c;Q6Q8开通形成上-下 前面四个管子和变压器的作用就是类似一个方波发生…

解决There is insufficient memory for the Java Runtime Environment to continue.

文章标题 问题描述原因分析解决方案其他可能的解决方案资料参考 问题描述 当我们使用Maven给项目打包时&#xff0c;有时候会报以下错误信息 # There is insufficient memory for the Java Runtime Environment to continue. # # Native memory allocation (malloc) failed t…

PGSQL主键序列

PostgreSQL和 MySQL数据库还是有一定的区别。 下面了解一下 PGSQL的主键序列。 一、主键 1、系统自带主键序列 在 PostgreSQL 中&#xff0c;GENERATED BY DEFAULT 和 GENERATED ALWAYS 是用于定义自动生成的列&#xff08;Generated Column&#xff09;的选项。一般可作用…

西门子燃烧控制器维修LMV37.410A2WH

西门子燃烧控制器维修范围包括&#xff1a; LMV系列燃烧器控制系统维修 LMV5系列控制器维修 AZL系列显示操作单元维修 QRI系列火焰探测器维修 SQM4系列电动执行机构维修 AZL系列或其他控制系统维修或设置燃烧器的启停&#xff0c;燃料&#xff0c;运行模式&#xff0c;运行…

Acrel-1000DP分布式光伏系统在某重工企业18MW分布式光伏中应用

摘 要&#xff1a;分布式光伏发电特指在用户场地附近建设&#xff0c;运行方式以用户侧自发自用、余电上网&#xff0c;且在配电系统平衡调节为特征的光伏发电设施&#xff0c;是一种新型的、具有广阔发展前景的发电和能源综合利用方式&#xff0c;它倡导就近发电&#xff0c;就…