数据结构与算法-D2D3线性表之顺序表

线性表:包含若干数据元素的一个线性序列,特征如下:

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

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

        3)其他元素仅且仅有一个前驱,一个后继

 线性表L可以用二元组表示:

        L=(D,R)

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


顺序存储特点:

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

        2)对数据元素ai的存取为随机存取或按位置存取

        3)存储密度高

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

顺序存储缺点:

        1)数据插入和删除等运算的时间复杂度较差

顺序存储结构的表示:

        通常使用数组

 上图为顺序表的通常定义,typedef int data_t中data_t是表中元素,使用typedef是为了能够使得data_t可以更换数据类型;下面的typedef struct是顺序表,其中data_t data[N]是数据,int last是最后一个元素下标。


线性表的基本运算

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

        2)置空表:list_clear(L)

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

        4)求表长:liength(L)

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

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

        7)插入 :

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

         8)删除:

                Delete(L,i)。删除表L中i个元素ai,且表长减1,要求0≤i≤n-1。



线性表的顺序存储缺点:

顺序表实现

sqlist.h    sqlist.c      test.c

        sqlist.h:数据结构定义、运算

        sqlist.c:运算实现

        test.c:整个实现

list_create

        1)申请内存

        2)成员初始化

        3)返回线性表地址

给大片内存赋同样的值

        第1个参数:内存首地址

        第2个参数:所要赋的值

        第3个参数:所要赋值的字节数

 list_clear

        成功返回0,失败返回1

 list_empty

        检查链表是否为空,1为空,0为非空

        last=0表示有一个数据,定义last=-1时是空表

list_length

        last表示最后一个元素的下标,lat+1就是长度了

 list_insert

         1、验证表是否满了

        2、插入的位置区间范围为[0, last+1]

        3、中间位置插入要涉及空间移动(从后往前移动)

       4、存新值,last+1

 list_show

list_delete

将指定位置元素删除

        首先不是空表

        1、检查位置pos在[0,last]

        2、移动元素

        3、更新last

list_merge

将两个线性表合并

        1、La = La 并Lb

        2、bi是否在La中

        3、不在,插入

list_locate

        判断元素是否在线性表中

总: 

 

list_purge

删除线性表当中的重复元素

 


注:一种简便书写struct方法

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

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

相关文章

CSS面经(未完待续)

1. CSS选择器及其优先级 !important > 行内样式 > id选择器 > 类/伪类/属性选择器 > 标签/伪元素选择器 > 子/后台选择器 > *通配符 2. 重排和重绘是什么?浏览器的渲染机制是什么? 重排(回流):当增加或删除dom节点&…

Centos7上安装Redis

第一步:安装Redis依赖 yum install -y gcc tcl //需要使用管理员权限第二步:下载上传安装包并解压 下载地址redis中文官网 上传成功后解压 输入tar -zxvf (redis版本),即可解压成功 进入redis目录,运行编译命令&am…

人工智能学习3(特征变换:特征数值化)

编译工具:PyCharm 有些编译工具不用写print可以直接将数据打印出来,pycharm需要写print才会打印出来。 文章目录 编译工具:PyCharm 概念1.特征类型分类型二值型顺序型数值型 2.特征数值化练习13.特征数值化练习24.特征二值化使用sklearn库自…

信号是怎么搞到电磁波上面去的呢?

在之前的文章中,我们曾多次讲到电磁波的美妙,但是有了电磁波就可以通信了吗? No,我们要把信息加载到电磁波上,这个电磁波就可以作为信息的载体来工作了。可是信号是怎么加载到电磁波上的呢? 今天我们一起…

Javafx实现浏览器

浏览器是一种计算机程序,主要用于显示互联网上的网页。通过浏览器,用户可以访问各种网站、搜索引擎、在线应用程序、社交媒体等。常见的浏览器包括Google Chrome、Mozilla Firefox、Safari、Microsoft Edge、Opera等。浏览器的功能不仅限于浏览网页&…

无线网卡填坑记

没想到我安装无线网卡这么波澜起伏~ 起因 近来刚在电脑上玩完了 Dishonored 2,紧接着继续着我的刺客信条之旅。总是觉得键盘鼠标玩起来不爽,还是手柄玩这种游戏才舒服。突然,灵光一现,我想到正好有闲置的 Switch 掌机没怎么玩&am…

【代码随想录】算法训练计划39

dp 1、62. 不同路径 题目: 求路径方案多少个 思路: 这道题就有点dp了哈 func uniquePaths(m int, n int) int {//dp,写过,代表的是多少种// 初始化dp : make([][]int, m)for i : range dp {dp[i] make([]int, n)dp[i][0] 1 // 代表到…

【数据结构】图<简单认识图>

对于下面的内容,大家着重观察和理解图即可,可以直接绕过一些文字性的概念,对图有一个大概的认识。 图 简单认识图图的定义有向图和无向图完全图无向完全图有向完全图 图的基本存储结构邻接矩阵存储邻接矩阵的优点 网络的邻接矩阵邻接表无向图…

看懂lscpu的输出

文章目录 1. lscpu1.1 Architecture1.2 逻辑核心数1.3 缓存1.4 CPU型号1.5 NUMA架构1.5.1 CPU多核架构1.5.2 多CPU Socket架构 2. cat /proc/cpuinfo2.1 关键字段 1. lscpu 通过lscpu查看当前系统的CPU信息。 [hadoopserver3 ~]$ lscpuArchitecture: x86_64 …

混音编曲软件tudio One 6.5.1 保姆级安装教程

根据软件大数据显示De-Esser驯服人声嘶嘶声和其他高频声音,和其他 Studio One 中新的去实体插件一样高效且直观易用,使用“收听”按钮查找有问题的频率,然后使用相关的旋钮和 S-Mon 功能拨入 S-Reduce 量即可。实际上我们可以这样讲工作流和协…

Linux(15):SELinux 初探

什么是 SELinux SELinux 是【Security Enhanced Linux】的缩写,字面上的意义就是安全强化的 Linux。 SELinux 是由美国国家安全局(NSA)开发的,开发原因:因为很多企业界发现,通常系统出现问题的原因大部分都在于【内部员工的资源…

Redis的三种消息队列实现方式

目录 前言 List实现消息队列 PubSub消息队列 Stream消息队列 三种实现方式对比 前言 为什么要使用Redis的消息队列? 成本低,对于RabbitMQ或是Kafka来说,已经是重量级的消息队列。 Redis的三种实现方式: List结构&#xff1…

VSC改造MD编辑器及图床方案分享

VSC改造MD编辑器及图床方案分享 用了那么多md编辑器,到头来还是觉得VSC最好用。这次就来分享一下我的blog文件编辑流吧。 这篇文章包括:VSC下md功能扩展插件推荐、图床方案、blog文章管理方案 VSC插件 Markdown All in One Markdown Image - 粘粘图片…

在python的Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试集。

文章目录 一、在Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试集总结 一、在Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试集 在Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试…

【网络安全】红蓝对抗之企业互联网安全防护

01 什么是“红蓝对抗”? “红蓝对抗”最早起源于古罗马军队,在沙盘中用红色和蓝色来代表敌人和自己,他们认为蓝色代表勇敢和忠诚,红色代表血腥和暴力,所以选择用蓝色代表自己。 在中国,由于传统习俗与文化…

一、技术体系结构

本章概要 总体技术体系框架概念和理解 1.1 总体技术体系 单一架构一个项目,一个工程,导出为一个war包,在一个Tomcat上运行。也叫all in one。 单一架构,项目主要应用技术框架为:Spring , SpringMVC , Mybatis 分布…

Python如何传递任意数量的实参及什么是返回值

Python如何传递任意数量的实参 传递任意数量的实参 形参前加一个 * ,Python会创建一个已形参为名的空元组,将所有收到的值都放到这个元组中: def make_pizza(*toppings):print("\nMaking a pizza with the following toppings: "…

【ArcGIS Pro】探索性插值无法覆盖所需shp范围

做个小记录自用,实际不准。 1 看看就行 pro插值 看看过程就行。有详细过程,类似tutorial https://learn.arcgis.com/zh-cn/projects/interpolate-temperatures-using-the-geostatistical-wizard/ 2 注意用投影坐标系 wgs84转投影坐标系 https://blog…

SR锁存器—>带EN的SR锁存器—>D锁存器—>边沿触发式D触发器—>寄存器

其实选择与非门当做构成SR锁存器的基本逻辑电路是有漏洞的,所以才导致了后续的都为低电平的时候,Q和非Q都是亮起的。但是我们设计的初衷是:Q和非Q是互斥的,是不能同时亮起的,且为了达到这一点,要使得其中两…

用友NC JiuQiClientReqDispatch反序列化RCE漏洞复现

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友 NC JiuQiClientReqDispatch 接口存在…