线性表的顺序存储实现

这篇具有很好参考价值的文章主要介绍了线性表的顺序存储实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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


一、线性表

线性表(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,该系列文章为题主学习课程的总结笔记文章来源地址https://www.toymoban.com/news/detail-803848.html

到了这里,关于线性表的顺序存储实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构(六)——线性表的顺序实现

    🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉 在csdn获奖荣誉: 🏆csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓csdn2023年后端赛道第第七 ⁣⁣⁣⁣ ⁣⁣⁣⁣

    2024年01月25日
    浏览(62)
  • 线性表的基本操作及在顺序存储及链式存储的实现

    一个数据结构的基本操作是指其最核心、最基本的操作。其他较复杂的操作可通过其基本操作来实现。线性表的主要操作如下 注意:1:基本操作的实现取决于采用哪种存储结构,存储结构不同,算法的实现也不同 2:“” 表示c++中的引用调用。若存入的变量是指针变量,且

    2024年02月13日
    浏览(41)
  • 青岛大学_王卓老师【数据结构与算法】Week04_08_线性表的应用1_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第04周08–2.7线性表的应用1–线性表

    2024年02月12日
    浏览(37)
  • 数据结构-线性表的顺序表基本操作代码实现(超级详细清晰 C++实现)

    顺序表是用一段 物理地址连续的存储单元 依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 顺序表: 可动态增长的数组,要求数据是连续存储的 特点: 随机访问 顺序既可以 静态分配 ,也可以 动态分配 。在静态分配时,由于数组

    2024年02月07日
    浏览(54)
  • 数据结构-线性表的链式存储(包含代码实现)

    链式存储结构 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 线性表的链式存储结构又称为 非顺序映像 或 链式映像。 用一组 物理位置任意的存储单元 来存放线性表的数据元素 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散

    2024年02月06日
    浏览(52)
  • 数据结构:线性表————顺序表的实现、项目和OJ题目(手把手教你写代码)

    🌈 个人主页: 小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝 🏆所属专栏:  话说那些与C++的爱恨情仇   欢迎订阅,持续更新中~~~                                           ✨让小新带着你

    2024年04月16日
    浏览(100)
  • 线性表的顺序存储结构

    一、线性表的定义      线性表:是具有相同数据类型的n(n=0)个数据元素的有限序列,其中n为表长,当n=0时,线性表是一个空表。    记作   ( a1, ..., ai, ai+1, ..., an )   其中ai是线性表中的数据元素, n是表的长度    存在唯一的一个被称做“第一个”的数据元素 (如a1 )

    2024年02月01日
    浏览(34)
  • 【玩转408数据结构】线性表——线性表的顺序表示(顺序表)

            通过前文,我们了解到线性表是具有相同数据类型的有限个数据元素序列;并且,线性表只是一种逻辑结构,其不同存储形式所展现出的也略有不同,那么今天我们来了解一下线性表的顺序存储——顺序表。         顺序表指的是将 逻辑上相邻的元素 存储在 物理位

    2024年02月19日
    浏览(51)
  • 【数据结构】(顺序表)C语言实现线性表顺序存储的创建、插入、删除、查找、输出等基本操作(附完整代码)

    要求:利用书本上的线性表的顺序存储结构定义 #define MAXSIZE 100 //顺序表可能达到的最大长度 typedef struct{ ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) } SqList; 1)编写完成下列功能的函数: (1)初始化一个线性表

    2024年04月28日
    浏览(46)
  • 数据结构:线性表顺序存储结构———顺序表

    目录 顺序表的定义 初始化线性表 销毁线性表 求线性表的长度 判断是否为空表 插入数据元素 逻辑序号与物理序号的区别 删除数据元素 输出线性表  按序号求线性表中的元素 按元素值查找 整体上创建顺序表 顺序表实验 线性表的顺序存储是把线性表中的所有元素按照其逻辑

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包