4.2 线性表顺序表(上)

news2025/1/11 19:59:18

目录

目录结构

线性表

线性表的特征:

顺序表存储结构的表示

顺序表存储结构的特点

顺序存储结构的表示

线性表的基本运算

基本运算的相关算法

线性表的基本运算

 线性表


目录结构

线性表

线性表是包含若干数据元素的一个线性序列 记为:

L=(a0, ...... ai-1, ai, ai+1 ...... an-1)

L为表名,ai (0≤i≤n-1)为数据元素;

n为表长,n>0 时,线性表L为非空表,否则为空表。

线性表L可用二元组形式描述:

        L= (D,R)

即线性表L包含数据元素集合D和关系集合R

  D={ai | ai∈datatype ,i=0,1,2, ∙∙∙∙∙∙∙∙∙n-1 ,n≥0}

  R={<ai , ai+1> | ai , ai+1∈D, 0≤i≤n-2}

关系符<ai, ai+1>在这里称为有序对 表示任意相邻的两个元素之间的一种先后次序关系

ai是ai+1的直接前驱, ai+1是ai的直接后继

设有一个顺序表L={1,2,3,4,5,6};  他们的关系如图:

 使用二元组描述L=(D,R),则

         D={1 , 2 , 3 , 4 , 5 , 6}(n=6)

        R={<1,2> , <2,3> , <3,4> , <4,5> , <5,6>}

线性表的特征:

1) 对非空表,a0是表头,无前驱;

2) an-1是表尾,无后继;

3) 其它的每个元素ai有且仅有一个直接前驱ai-1和一个直接后继ai+1。 

顺序表存储结构的表示

若将线性表L=(a0,a1, ……,an-1)中的各元素依次存储于计算机一片连续的存储空间。

设Loc(ai)为ai的地址,Loc(a0)=b,每个元素占d个单元 则:Loc(ai)=b+i*d            

顺序表存储结构的特点

逻辑上相邻的元素 ai, ai+1,其存储位置也是相邻的

对数据元素ai的存取为随机存取或按地址存取

存储密度高

存储密度D=(数据结构中元素所占存储空间)/(整个数据结构所占空间)

顺序存储结构的表示

顺序存储结构的不足:

对表的插入和删除等运算的时间复杂度较差。

在C语言中,可借助于一维数组类型来描述线性表的顺序存储结构

#define  N 100

typedef   int  data_t;

typedef  struct                    

{   data_t data[N]; //表的存储空间

     int last;   }   sqlist, *sqlink;                                                                                                             

线性表的基本运算

设线性表 L=(a0,a1, ……,an-1),对 L的基本运算有:

1)建立一个空表:list_create(L)

2)置空表:list_clear(L)

3)判断表是否为空:list_empty (L)。若表为空,返回值为1 , 否则返回 0

4)求表长:length (L)

5)取表中某个元素:GetList(L , i ), 即ai。要求0≤i≤length(L)-1

6)定位运算:Locate(L,x)。确定元素x在表L中的位置(或序号)

Locate(L,x)=           i   当元素x=ai∈L,且ai是第一个与x相等时;

                              -1    x不属于L时。

7)插入:

Insert(L,x,i)。将元素x插入到表L中第i个元素ai之前,且表长+1。

插入前: (a0,a1,---,ai-1,ai,ai+1-------,an-1) 0≤i≤n,i=n时,x插入表尾

插入后: (a0,a1,---,ai-1, x, ai,ai+1-------,an-1)

8)删除: Delete(L,i)。删除表L中第i个元素ai,且表长减1, 要求0≤i≤n-1。     删除前: (a0,a1,---,ai-1,ai,ai+1-------,an-1)     删除后: (a0,a1,---,ai-1,ai+1-------,an)

基本运算的相关算法

定位:确定给定元素x在表L中第一次出现的位置(或序号)。即实现Locate(L,x)。算法对应的存储结构如图所示。  

算法思路:若表存在空闲空间,且参数i满足:0≤i≤L->last+1,则可进行正常插入。插入前,将表中(L->data[L->last]~L->data[i])部分顺序下移一个位置,然后将x插入L->data[i]处即可。算法对应的表结构。

 删除:将表中第i个元素ai从表中删除,即实现DeleteSqlist(L, i)。 算法思路: 若参数i满足:0≤i≤L->last, 将表中L->data[i+1]∽L->data[L->last] 部分顺序向上移动一个位置,覆盖L->data[i]。

线性表的基本运算

 

 线性表

设计清除线性表L=(a0,a1,---,ai,-------,an-1)中重复元素的算法。

算法思路:对当前表L中的每个ai(0≤i≤n-2),依次与aj(i+1≤j≤n-1) 比较,若与ai相等,则删除之。    

线性表的顺序存储的缺点

 线性表的顺序存储结构有存储密度高及能够随机存取等优点,但存在以下不足:

(1)要求系统提供一片较大的连续存储空间。

(2)插入、删除等运算耗时,且存在元素在存储器中成片移动的现象;

sqlist.h 顺序表中函数的定义

sqlist.c 实现.h中的函数

test.c 

写项目的时候注意结构清晰

软件复用(积累自己的经典代码)

注意代码的独立性 不能什么都放main函数中 注重代码分层

typedef int data_t;
//跟已有类型,给已有变量重命名,
//后跟分号,在编译的时候做处理
#define N 128
//定义一个宏,给宏赋值
//不用写分号,在预处理阶段展开

1.预处理

2.编译

3.汇编

4.链接

5.执行

123独立处理>.o文件

链接:.o文件 库文件 进行连接>a.out

每个文件生成独立的.o文件后才可以链接

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android FlexboxLayout布局

FlexboxLayout 布局 一、简介二、使用三、功能详解FlexboxLayout属性flexWrapflexDirectionalignItemsjustifyContentalignContentdividerDrawableHorizontal、showDividerHorizontaldividerDrawableVertical、showDividerVerticaldividerDrawable、showDividermaxLine Flexbox…

简单理解Transformer注意力机制

这篇文章是对《动手深度学习》注意力机制部分的简单理解。 生物学中的注意力 生物学上的注意力有两种&#xff0c;一种是无意识的&#xff0c;零一种是有意识的。如下图1&#xff0c;由于红色的杯子比较突出&#xff0c;因此注意力不由自主指向了它。如下图2&#xff0c;由于…

讯飞星火认知大模型 VS CHATGPT3.5

2023年5月6日&#xff0c;科大讯飞(002230.SZ)宣布将于当日举行“讯飞星火认知大模型”成果发布会。 与其他厂商的大模型发布相比&#xff0c;本次发布会具有三个特点&#xff1a;1.全程真机互动&#xff0c;现场实测、现场体验&#xff1b;2.技术先进性不是笼统表达&#xff…

Java的自定义注解

java元注解和自定义注解的区别 Java的自定义注解是一种元数据&#xff0c;可以应用于类、方法、字段等程序元素上&#xff0c;以提供额外的信息或指示。 自定义注解包括注解声明、元注解、运行时处理器三个部分。注解声明指定了注解的名称、作用域、成员等信息&#xff1b;元注…

IP-GUARD如何通过网络控制策略禁止应用程序联网?

如何通过网络控制策略禁止应用程序联网? 可以在控制台-高级-网络控制中,添加以下策略: 动作:“禁止” 应用程序:填写要禁止的程序(以QQ示例) 如何禁止没有安装客户端的电脑访问客户端电脑? 可以给所有客户端设置只允许客户端电脑访问的网络控制策略; 在控制台左边的…

Unity使用Sqlite3

环境 Unity:Unity2021.3.6f1c1 OS:Window10 64 Plugins:Mono.Data.Sqlite、Sqlite 插件准备 Sqlite3官方网址 Sqlite3有x64和x86版本&#xff0c;根据发布的架构使用不同版本的Sqlite3。 该文档使用x64版本&#xff0c;发布架构为64位。 Mono.Data.Sqlite 使用Unity Hub打开…

搜索旋转排序数组

题目链接 搜索旋转排序数组 题目描述 注意点 nums 中的每个值都 独一无二题目数据保证 nums 在预先未知的某个下标上进行了旋转 解答思路 因为本题数组基本递增&#xff08;仅在某个位置进行旋转&#xff09;&#xff0c;可以看作由两个递增的数组组合而成&#xff0c;所以…

OPenGL笔记--创建一个3D场景

文章目录 一、前言二、效果展示三、详细流程3.1、World.txt文件规则3.2、加载World.txt3.3、绘制场景3.4、交互 四、详细代码五、举一反三 一、前言 通过前面的学习&#xff0c;基本掌握了怎么绘制图形&#xff0c;使用纹理&#xff0c;接下来就来创建一个3D场景。 基本原理 …

Unity 软性管的实现

概述 因近期项目有要求使用到水管这种软性管的模拟&#xff0c;该篇主要说明软管的实现和应用&#xff0c;参考自&#xff1a;unity3D---实现柔软水管&#xff08;蛇的移动&#xff09;效果一&#xff08;无重力&#xff09;_unity 软管_ayouayouwei的博客-CSDN博客 效果 实现…

B/S医院手术麻醉管理系统源码:麻醉知情同意书模板

麻醉知情同意书模板 姓名:​ 性别:​ 年龄:​ 科别:​ 床号:​ 住院号:​ 疾病介绍和治疗建议: 医生已告知我因​手术&#xff0c;而接受麻醉。 1.麻醉作用的产生主要是利用麻醉药使中枢神经系统或神经中某些部位受到抑制的结果&#xff0c;临床麻醉的主要任务是: 2.为…

webpack 的打包流程

1.webpack 的打包流程 从以上5个方面来分析Webpack的打包流程&#xff1a; 初始化参数&#xff1a;这一步会从我们配置的webpack.config.js中读取到对应的配置参数和shell命令中传入的参数进行合并得到最终打包配置参数。 开始编译&#xff1a;这一步我们会通过调用webpack()方…

计算机网络基础知识(二)—— 什么是Ip地址、Mac地址、网关、子网掩码、DNS

文章目录 01 | Ip地址02 | Mac地址03 | 网关04 | 子网掩码05 | DNS06 | 总结 初次接触网络时&#xff0c;只知道电脑连接网线&#xff0c;就可以打开4399玩小游戏&#xff0c;可以登录QQ和朋友聊天&#xff1b; 再次接触网络时&#xff0c;知道了怎么查看自己电脑的网络情况&am…

06 - 5 生产者消费者模式

架构演进 介绍 同步调用变成异步调用生产数据与消费数据分离协调不同处理速度 生产者 系统运转的动力为下一个环节产生待处理的工作/数据与消费者的关系 重点在如何将数据发送到容器对消费者无依赖不关注消费者的how/when 发送顺序 消费者 容器 平衡 与EDA对比 消费策略 优点…

我发布了自己第一个由ChatGPT辅助开发的开源项目goattribute

需求产生 前两天在工作过程中又遇到了一直以来困惑我的一个问题&#xff0c;就是Go配置项的管理问题。 在开发一个新项目的时候&#xff0c;往往涉及到配置项的管理。个人小项目可能会通过配置文件来传入、环境变量来传入&#xff0c;也可能通过命令行参数来传入&#xff0c;公…

代码随想录 LeetCode数组篇 长度最小的子数组

文章目录 &#xff08;中等&#xff09;209. 长度最小的子数组&#xff08;中等&#xff09;904. 水果成篮&#xff08;困难&#xff09;76. 最小夫覆盖子串 &#xff08;中等&#xff09;209. 长度最小的子数组 我的思路&#xff1a;双指针p和q&#xff0c;滑动窗口的思想 每…

牛客练习赛111 D青蛙兔子的约会

题目链接 示例1 输入 3 3 4 10 1 2 2 4 5 1 1 3 5 11 1 1 输出 YES NO NO 说明 第一问&#xff0c;青蛙晚上向右跳1次&#xff0c;白天无法与兔子相遇。青蛙向右跳2次&#xff0c;也就是2a6的距离&#xff0c;白天兔子向左跳1次&#xff0c;可以相遇。所以在跳[1,2]次中&#…

app持续交付实战

app持续交付实战 一、学习目标二、优势三、子任务拆分四、环境依赖1、安卓 SDK2、安卓设备&#xff08;真机 or 模拟器&#xff09;3、Appium 自动化测试4、JDK5、Python3环境6、allure-commandline工具7、allure插件 五、实战任务&#xff1a;串行执行 Jenkins Pipeline 项目1…

Python学习之批量转换图片格式和统一图片尺寸

前言 大家在工作的时候是不是都会接触到很多的图片&#xff0c;为了满足不同的需求&#xff1a; 兼容性&#xff1a;不同设备和应用程序可能支持不同的图片格式。通过转换图片格式&#xff0c;可以确保在各种设备和应用程序中都能够正确地显示图片。 文件大小&#xff1a;不…

基于matlab 从接收脉冲中提取波形参数

一、前言 现代飞机通常随身携带雷达警告接收器 &#xff08;RWR&#xff09;。RWR检测到雷达发射&#xff0c;并在雷达信号照射到飞机上时警告飞行员。RWR不仅可以检测雷达发射&#xff0c;还可以分析截获的信号并编目信号来自哪种雷达。此示例显示了 RWR 如何估计截获脉冲的参…

10倍速度开发贪吃蛇游戏之AI辅助

今天就来聊聊AI代码辅助神器&#xff0c;即便是零基础也能上手&#xff0c;因为实在是太强了&#xff0c;这以后叫程序员们怎么活啊&#xff01;话不多说&#xff0c;直接上神器 我用的是cursor,其实目前AI辅助代码不止cursor&#xff0c;还有微软家的copilot X这个根植于gith…