数据结构之线性表—>顺序存储结构

《数据结构与算法》——线性表顺序存储结构的插入与删除 1.获取元素 对于线性表的顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个 位置元素值返回,其实是非常简单的。就程序而言,只要i的数值在数组下标范围内,就 是把数组第i-1下标的值返回即可。 来看代码: #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef i... 阅读详情

数学语言定义:
若将线性表记为(a1,...,ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1时ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,3,...,n-1时,ai有且仅有一个直接后继,当i=2,3,4,...,n时,ai有且仅有一个直接前驱。所以线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表。
    在复杂的线性表中,一个数据元素可以由若干个数据项组成。
本人比较懒,没有对所对实现的代码全部调通,但是基本的理解写在下面希望还能与大家分享:
线性表的抽象数据类型定义如下:
ADT 线性表 (List)
Data
线性表的数据对象集合为{a1,a2,......,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每个元素有且仅有一个直接前驱元素,初了最后一个元素an外,每个元素有且仅有一个直接后继元素。数据元素之间的关系时一对一的关系。
Operation
InitList(*L):初始化操作,建立一个空的线性表L。
ListEmpty(L) :若线性表为空,返回true,否则反悔false。
Clear list(*L):将线性表清空。
GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e。
LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回改元素在表中序号表示成功;否则,返回0表示失败。
ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e。
List Delete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值。
ListLength(L):返回线性指针L的元素个数。
endADT

       这个位置原来在我一开始学的时候总是个问题,不知道为什么在实现不同功能的时候会用到指针和数据结构类型的变量,这导致我做实验的时候遇到很大困难,现在回头看看其实就是自己的指针没有活学活用,对C的掌握还是不够熟练,这次通过看了同学的代码,发现的规律,从这个规律进行下去,查找资料成功解决了这个问题。
我想,在博客里搜索这个问题的朋友们一样会遇到跟我一样的问题,所以我所行在这里献个丑,与大家交流,相互学习!
我发现在进行需要改变线性表得时候都会用到指向这个线性表的指针,同样的需要修改线性表的值的时候,比如删除并取出其值的时候都会用到指针,这是因为,在实现我们要实现的函数的时候,在函数内部都是局部变量,当这个函数执行结束后,局部变量就会自动清除,不会对线性表中的值真正的进行修改,所以只有通过指针,修改其真正的地址内的值,才会在函数执行结束后保留结果,达到我们想要的目的。同理在取值的时候也一样,如果用int e的话,这个局部变量在函数执行结束后回复原值,不会有改变,所以要实用指针。
Sqlist lst//定义顺序名称。

Sqlist *lst //定义顺序表结构指针,用来保存顺序表结构。

以上例子输出20,初始化时a被赋值了10,然后定义了指针p并初始化为a的地址,使p指向a,然后通过星号对p所指内存赋值为20,这叫间接寻址,因为p的值是a的地址,因此*p意思为a的值,a被改为20.你的例子中,是将取得的值赋值到e所指变量中,而如果采用e赋值,改变的是e的值,e是局部指针变量,函数结束就释放了,e所指的变量就取不到值,不会发生任何变化。
相信看完了这些,跟我一样的小白们是不是又了一点点的理解了,线性表是数据结构算法的开篇,也是基础,虽说不难,但时候很重要,希望刚学到这里的,刚用到这里的朋友们引起足够的重视!
下面介绍几个简单的函数代码,来加深一下理解:
1.线性表顺序存储结构的代码:
#define MAXSIZE 20
typedef int ElemType

typedef struct
{

ElemType data[MAXSIZE];

int length;

 }SqList;

三个属性:

·存储空间其实位置:数组data,他的存储位置就是空间的存储位置。

·线性表的最大存储容量:数组长度MaxSize。

·线性表的当前长度:length。
2.顺序存储的插入与删除操作:
2.1获得元素操作:
#define OK 1;

#define ERROR 0;

#define TURE 1;

#define FALSE 0;

typedef int status;

status GetElem(SqList L,int i,ElemType* e)

{

if(L.length==0||i<1||i>L.length)

return ERROR;

*e=L.data(i-1);

return OK;

}

2.2插入操作:

思路:

·如果插入位置不合理,抛出异常;

·如果线性表长度大于等于数组长度,抛出异常或者动态增加容量;

·从最后一个元素开始向前遍历到第i个位置,分别将他们都向后移动一个位置;

·将要插入元素填入位置i处;

·表长加1。

这里我们实现ListInsert(*L,i,e),代码实现://初始化顺序线性表L已经存在,1<=i<=Listlength(L);

//操作结果:在L中第i个位置之前插入新的数据元素e,L长度加1;

status ListInsert(SqList *L,int i,ElemType e)

{

int k;

if(L->length==MAXSIZE)

return ERROR;

if(i<1 || i>L->length+1)

return ERROR;

if(i<=L->length)

{

for(k=L->length-1;k>=i-1;k--)

L->data[k+1]=L->data[k];

}

L->data[i-1]=e;

L->length++;

return OK;

}

2.3 删除操作:

算法的思路:

1)如果删除位置不合理,抛出异常;

2)取出删除元素;

3)从删除元素位置开始便利到最后一个元素位置,分别将它们都向前移动一个位置;

4)表长减一;

代码实现如下:

/*操作条件:顺序线性表L已存在,1<=i<=ListLength(L)*/
/*初始条件:顺序线性表L已存在,1<=i<=ListLength(L)*/

status ListDelete(SqList *L,int i,ElemType *e)

{

int k;

if(L->length==0)

return ERROR;

if(i<1 || i>L->length)

return ERROR;

*e=L->data[i-1];

if(i<L->length)

{

for(k=i;k<L->length;k++)

L->data[k-1]=L->data[k];

}

L->length--;

return OK;

}









数据结构与算法(1)线性表的顺序存储结构 转专业到计算机,最近在努力的提高自己的编程能力。数据结构与算法可以说是程序员的内功心法,我也下定决心学好这项内容,因此准备写下这一路的体会。一来鞭策自己不要中途懈怠、半途而废,二来以备将来查看方便。在博客中如果出现错误的话,还望各路大侠不吝赐教 O(∩_∩)O1 线性表1.1 概念 线性表是最为简单且常见的数据类型,满足线性结构: 存在唯一的第一个数据元素 存在唯一的最后一个元素 除第一个 阅读详情

相关推荐

数据结构之线性表-顺序存储结构

线性表,顾名思义,所谓线性表就是零个或者多个数据元素的有序序列。 今天我们一起来看一下线性表中的顺序存储结构。所谓的顺序存储结构其实是存储结构的一种,它的原理是把逻辑相邻的结构存储在物理位置相邻的存储单元中。节点之间的关系由存储关系直接体现的。 首先,我们先来简单了解一下顺序结构下的线性表的优缺点,最后我们对其进行代码实现。 由于其存储在相邻的存储单元,我们可以很容易的计算出其内每个节点的实...

秋殇阁 1861

数据结构—顺序线性表

     最近在学习数据结构,感觉应该将书上的伪代码进行实现,因此花了几个小时写了下顺序线性表的各种函数实现: 实现代码如下: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #d...

zhangqianqian57的博客 734

数据结构线性表顺序存储结构和主要算法实现

(1) 线性表的定义。 零个或多个数据元素的有限序列 序列线性表中有直接后继元素,有且仅有一个直接后继,有且仅有一个直接前驱,数据元素之间的关系是一对一的关系 常用的List操作: Operation InitList(*L)://初始化操作,简历一个空的线性表L ListEmpty(L)://若线性表为空,返回true,否则返回Falser GetElme(L,i,e)://将线性表L中的第...

weixin_45743004的博客 1425

数据结构——线性表(链式存储结构)

链表的13种操作 实现思路和代码

qq_55869380的博客 6672

centos8 安装新版bind9源码

bind一直在更新,使用了比较多的新架构 本文记录新版本的bind怎么安装,以及其依赖库的安装 1. 在https://www.isc.org/download/ 下载最新stable版本bind,本文以bind-9.17.9.tar.xz为例。将软件传到/root目录下。 也可以到https://ftp.isc.org/isc/bind9/ 下载更多历史版本 2. 安装基本的依赖库,像gcc、amake等 3. 需要安装libuv库,但直接用yum时可能安装不全 建议使用源码安装,需要安..

linggang_123的博客 2538

安卓APP通过CH340实现USB串口通信与设备检测

本文详细介绍了安卓APP通过CH340芯片实现USB串口通信与设备检测的完整流程。从CH340芯片的基础原理到开发环境搭建,再到串口通信的具体实现和错误处理,提供了全面的技术指导。文章还分享了USB热插拔处理、自动重连策略以及性能优化等实战技巧,帮助开发者高效完成安卓与嵌入式设备的通信开发。

weixin_42531925的博客 379

数据结构1——线性表的顺序存储结构

线性表顺序存储C++代码实现

QiQi_sviper的博客 960

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 323

线性表的顺序存储结构

线性表可以说是最简单的数据结构,它的描述为:n个数据元素的有限序列。 记为:L=(a1,a2,...,an) 按照存储结构它又可以分为顺序存储结构和链式存储结构。 本节主要是顺序存储结构 线性列表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 线性列表的每个数据元素的类型都相同,可以用以为数组来实现顺序存储结构。即把第一个数据元素存到数组下标为0的位置中

JIAERPING的博客 641

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

随着人工智能技术在农业领域的深入应用,基于深度学习的害虫检测系统已成为智慧农业的重要组成部分。本文详细介绍了一种基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统,涵盖算法原理、数据集构建、模型训练、系统实现及完整代码。该系统能够实时检测并识别多种农作物害虫,为农业生产提供精准的病虫害监测解决方案。

YOLO 273

5、快速入门

点击启动实例按钮,并设计一个business key,每个实例会有一个business key, 业务主键,也相当于一个流程实例唯一key,一般会与一次业务强相关,比如一个订单号 ,此处取为shopping_1;付款程序完成后会流转到物流发货任务,此时java工程的相应订阅会收到任务,并进入断点,且读到到toWhere变量。单击shopping可以进入实时流程图的执行图,此时流程流转到第一个任务,需要业务系统完成此任务,并通知引擎。添加类,分别订阅流程中的加入购物车任务和物流发货任务。

leyoliu的博客 3499

线性表定义及其顺序存储

前言 继前面算法的引入后,大家对什么是算法及其复杂度有了一定了解。数据元素存储主要形式有顺序存储结构、链式存储结构 。本节将介绍线性表及线性表的顺序存储。因内容过多,链式存储将单独写在后一篇文章里。 一、线性表概念及其抽象数据类型 前一篇在介绍复杂度时,我们举出了多项式的例子,从多项式例子中可得一些启发。 多项式表示问题的启示: 1.同一个问题可以有不同的表示(存储)方法 2.有一类共性问题:有序线性序列的组织和管理 1.什么是线性表 (1)线性表定义:由 同类型数据元素 构成 有序序列 的线性结构 (空格

qq_51308373的博客 2166

[QMT和ptrade量化交易小白入门]-121、如何用K-means聚类,每月自动筛选高流动性ETF

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 827

学习数据结构 -> 顺序存储结构线性表运算的实现

学习数据结构 -&gt; 顺序存储结构线性表运算的实现 一、 插入操作    已知有线性表 L = ( a1, a2, a3, ..., a(i-1), ai, a(i+1), ..., an ), 现要在该线性表的第 i 元素位置上插入数据 b 使其成为:        L = ( a1, a2, a3, ..., a(i-1), b, ai, a(i+1), ..., an )       ...

weixin_34067102的博客 338

深入解析:武汉光庭信息技术 Android CarPlay 开发岗位的技术要求与面试准备(大连)

武汉光庭信息大连分部招聘Android CarPlay开发工程师,要求专科以上学历及2年以上Android开发经验,需精通CarPlay集成技术与车载系统开发。该职位涉及Android底层框架修改、CarPlay协议实现及车规级系统开发,需处理USB/HID驱动、图形合成等技术难点,并确保通过Apple严格认证。求职者需具备扎实的Android开发能力,熟悉车载环境特殊性,包括系统稳定性保障、人机交互适配等技术要点。文章深度解析了职位技术内涵,并提供面试问题与参考答案,帮助求职者全面准备这一复合型技术岗位。

郑伟强dev的专栏 400

FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例

上一篇文章种总结了MultiBoot 关键技术,分为:一个指令、二种位流、三种方式、四样错误。针对以上四句话我们接下来详细分析。在开始解析之前我们先准备两个文件,一个是控制LED闪烁的文件,通过更换引脚约束可以控制不同LED,这样就可以指示是启动MultiBoot位流还是Golden位流。还有一个文件就是uart发送文件,会指示启动的位流格式和启动地址。文件都比较简单,就不列举了,文件详见文后的链接。对于 IPROG 指令目前有三种实现方式,分别为:1)通过约束脚本添加;2)通过ICAPE2原语

OpenFPGA的博客 2104

数据结构复习<1> 线性表的顺序存储结构及其实现

由于线性表的数据元素类型不确定,所以采用C++的模板机制。 在写模板时,由于长时间未写过C++了,对其模板机制的概念非常模糊,如以下代码存在基础语法错误或者丑陋的代码,请指出来,我将虚心改错,感谢。 顺序表——线性表的顺序存储结构 一、顺序表的定义 顺序表是用一段地址连续的存储单元依次存储线性表的数据元素。 二、顺序表的存储 通常用一维数组来实现顺序表,使用时要注意区分数组的下标与...

郑皓云的博客 706

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构之线性表

类型名称:*线性表(list)* 数据集对象:线性表是N(>=0)个元素构成的有序序列(a1,a2,a2……an)#操作集: 1.List MakeEmpty();初始化一个空线性表L 2.ElementType FindKth(int K,List L);根据位序K,返回相应的元素 3.int Find(ElementType x,List L);在线性...

t800pro的博客 248

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【数据结构】线性表的顺序存储

💯线性表是具有相同类型的数据类型的n个数据元素的有限序列,其中n为表长,n0n=0n0时为空表ege.geg这里要注意的是,定义中描述的为数据元素,而非数据项,也就是,存储单元可以是一个结构体,而数据项为里面的成员✨线性表的特点:表中元素的个数为有限个表中元素具有逻辑上的顺序性,表中元素有其先后顺序表中元素都是数据元素,每一个元素都为单个元素表中元素的数据类型都相同,每个元素占相同的内存空间表中元素具有抽象性,即仅讨论元素之间的逻辑关系,而不考虑具体实现方式🔑。

DAY I 的成长之路 5012

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据结构——线性表(顺序存储结构)

利用数组实现的顺序存储的线性表,包含各种操作的具体实现

qq_55869380的博客 3997

线性表数据结构解读(一)顺序存储结构ArrayList

线性表    线性表:零个或多个具有相同类型的数据元素的有限序列。数据元素的个数称为线性表的长度。A=(a1,a2,……ai-1,ai,ai+1,……,an); ● A代表一个线性表 ● ai(1<=i<=n)成为线性表的元素,i为元素的下标,表示该元素在线性表中的位置 ● 线性表中n为表长,其中n>=0 ● 长度等于零时称为空表,通常记为:L=( ) ● 将元素ai-1成为元素a

Android研发专栏 6391

【数据结构】之线性表(顺序存储结构)

博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。 本文首发于此 博主:威威喵|博客主页:https://blog.youkuaiyun.com/smile_running 线性表是《数据结构》课程最开始的一章的内容,是在大学计算机专业必学的课程。我们刚接触线性表时,可能会被它的几种表的结构搞得晕头转向,它有两种基本存储结构:...

你若盛开,蜜蜂自来 3511

数据结构——线性表及线性表顺序存储

首先来说一下什么是线性表。 1、  线性表是一种最基本、最简单的的数据结构,是一种线性结构。 2、  线性表中数据元素之间的关系是一对一,是n个数据元素的有限序列。 3、  若将线性表记为(a1, ……, ai-1, ai,ai+1, ……,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当丨=1, 2, ……, n-1时,

Floating Cat 2956

【数据结构】线性表的顺序存储结构

数据结构线性表篇(第3小节)学习笔记:线性表的顺序存储结构.内容包括:顺序存储定义,顺序存储方式,数组长度与线性表长度的区别,地址计算方法等相关知识.

C/C++领域,数据结构,linux,MySQl学习者 1327

数据结构-线性表的顺序存储结构逆置

1.主要的操作是:对顺序存储的线性表进行逆置操作。 2.空表为0时,或超过100个元素时,不执行程序。 自学c语言,有任何问题,还望大佬们指教。 以下是代码: #include <stdio.h> #include<stdlib.h> #define maxsize 100 //最长的长度为100 typedef int elemtype; //定义线性表 typedef struct //结构体的定义 { elemtype date[maxsize]; //表示线性表

LiHuaJK的博客 3868
上一篇: 复杂度的详细解释
下一篇: Java集合---HashMap源码剖析
coding1994
博客等级 码龄11年 149粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值