数据结构——线性表(一)

线性表,顾名思义,是具有像线一样的性质的表。如同学生们在操场上排队,一个跟着一个排队,有一个打头,有一个收尾,在其中的学生都知道前一个是谁,后一个是谁,这样就像一根线将他们都串联起来了。这样就可以称之为线性表。

线性表(List):零个或多个数据元素的有限序列

若将线性表记为(a1,...,ai-1,ai,ai+1,...,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,...,n-1时,ai有且仅有一个直接后继,当i=2,3,...,n时,ai有且仅有一个直接前驱 

所以线性表元素个数n(n>=0)定义为线性表的长度,当n=0时,称为空表。

然后,在比较复杂的线性表中,一个数据元素可以由若干个数据项组成

如果我们想要实现两个线性表集合A和B的并集操作。我们可以假设La表示集合A,Lb表示集合B

void unionL(SqList *La,SqList Lb)
{int La_len,Lb_len,i;ElemType e;                //声明与La和Lb相同的数据元素eLa_len = ListLength(*La);  //求线性表的长度Lb_len = ListLength(Lb);for(i=1;i<=Lb_len;i++){GetElem(Lb,i,&e);      //取Lb中第i个数据元素赋给eif(!LocateElem(*La,e)  //La中不存在和e相同的数据元素ListInsert(La,++La_len,e);//插入}
}

顺序存储结构

线性表有两种物理结构,顺序存储结构就是其中一种。

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

 

我们也可以用一维数组来实现顺序存储结构。

来看线性表的顺序存储的结构代码 

#define MAXSIZE 20            //存储结构初始分配量
typedef int ElemType;         //ElemType类型根据实际需要情况而定,这里为int
typedef struct
{ElemType data[MAXSIZE];   //数组,存储数据元素int length;               //线性表当前长度
}SqList;

地址计算方法

我们数数都是从1开始,那么线性表的定义也不能免俗,起始也是1,这个要跟数组的第一个下标是0区分好,于是线性表的第i个元素是要存储在数组下标为i-1的位置。

内存中的地址,其实跟图书馆或者电影院中的座位一样,都是有着自己的编号的。存储器中的每个存储单元都有着自己的编号,这个编号就称为地址。

 插入与删除操作

获得元素操作
#define OK 1
#define ERROR 0typedef 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;
}
插入操作
Status ListInsert(SqList *L,int i,ElemType e)
{int k;if(L->length==MAXSIZE)            //线性表已满return ERROR;if(i<1 ||i>L->length+1)           //当i位置不对时return ERROR;if(i<=L->length)                  //插入位置不在标尾{for(k=L->length-1;k>=i;k--)   //将要插入位置后的元素向后移一位L->data[k+1]=L->data[k];}L->data[i-1]=e;                   //将新元素插入L->length++;return OK;
}
删除操作
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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协程库-锁类-实现线程互斥同步

mutex.h&#xff1a;信号量&#xff0c;互斥锁&#xff0c;读写锁&#xff0c;范围锁模板&#xff0c;自旋锁&#xff0c;原子锁 锁 **锁不能进行拷贝操作&#xff1a;**锁是用于管理多线程并发访问共享资源的同步原语。这些锁包括互斥锁&#xff08;mutex&#xff09;、读写锁…

【论文阅读】Faster Neural Networks Straight from JPEG

Faster Neural Networks Straight from JPEG 论文链接&#xff1a;Faster Neural Networks Straight from JPEG (neurips.cc) 作者&#xff1a;Lionel Gueguen&#xff0c;Alex Sergeev&#xff0c;Ben Kadlec&#xff0c;Rosanne Liu&#xff0c;Jason Yosinski 机构&#…

阿里云实时计算Flink的产品化思考与实践【上】

摘要&#xff1a;本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。内容主要为以下五部分&#xff1a; 阿里云实时计算 Flink 简介产品化思考产品化实践SQL 产品化思考及实践展望 该主题由黄鹏程和陈婧敏共同完成&#xff0c;前半程…

政安晨:【深度学习神经网络基础】(一)—— 逐本溯源

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 与计算机一样的古老历史 神经网络的出现可追溯到20世纪40年…

STM32启动方式

s在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。 启动方式&#xff1a;从内部的Flash中启动、 存储器映射&#xff1a; 0x0000 0000 -----0x0800 0000 映射的内部Flash

SQLite数据库浏览器sqlite-web

什么是 sqlite-web &#xff1f; sqlite-web是一个用 Python 编写的基于 Web 的 SQLite 数据库浏览器。 软件特点&#xff1a; 可与您现有的 SQLite 数据库配合使用&#xff0c;也可用于创建新数据库。添加或删除&#xff1a; 表格列&#xff08;支持旧版本的 SQLite&#xff…

阿里云ECS选型推荐配置

本文介绍构建Kubernetes集群时该如何选择ECS类型以及选型的注意事项。 集群规格规划 目前在创建Kubernetes集群时&#xff0c;存在着使用很多小规格ECS的现象&#xff0c;这样做有以下弊端&#xff1a; 网络问题&#xff1a;小规格Worker ECS的网络资源受限。 容量问题&…

风力发电电网系统的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1风力发电原理与风机数学模型 4.2 电力电子变换器模型 4.3并网控制策略 5.完整工程文件 1.课题概述 风力发电电网系统的simulink建模与仿真。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;…

快速上手Spring Cloud 十一:微服务架构下的安全与权限管理

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

每日一题--- 环形链表[力扣][Go]

环形链表 题目&#xff1a;142. 环形链表 II 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给…

elasticsearch基础应用

1._cat接口 | _cat接口 | 说明 | | GET /_cat/nodes | 查看所有节点 | | GET /_cat/health | 查看ES健康状况 | | GET /_cat/master | 查看主节点 | | GET /_cat/indices | 查看所有索引信息 | es 中会默认提供上面的几个索引&#xff0c;表头…

MOV压敏电阻的微观结构与制造工艺

EAK 压敏电阻 应用于电力系统的MOV目前主要有两大系列&#xff0c;它们都是以ZnO为主要成分再加人少量其他金属氧化物添加剂而构成的。添加剂为Bi,O:、Sb,O:、MnO₂和CoO,等构成的 MOV称为Bi系列:添加剂为Pr,0、Co,0、Mg0而不含B,0,或含量极少的MOV称为Pr系列(或称稀土系列)。添…