【数据结构】顺序表

news2025/1/13 7:44:51

【本篇内容】

  1. 线性表

  1. 顺序表

    • 线性表

线性表是n个具有相同特性的数据元素的有限序列。常见的线性表:顺序表、链表、栈、队列、字符串......

线性表在逻辑上是线性结构,但是在物理结构上并一定是连续的,线性表在物理上存储时,通常是以数组和链式结构的形式存储的

    • 顺序表

2.1概念及结构

顺序表是用一段物理地址连续的存储单元存储数据元素的线性结构,一般采用数组存储。在数组上完成数据的增删查改(要求数据连续存储)

顺序表一般可以分为:静态顺序表动态顺序表

  • 静态顺序表:使用定长数组存储元素

数据结构是一块用来存放数据,另一块是一些函数对数据进行一些操作

  1. 用typedef重新命名结构体类型的原因

举个例子,如果我们需要对数据进行初始化我们肯定需要写一个函数来对数据进行初始化

void SeqList(struct SeqList s);

struct SeqList是结构体类型,用typedef重新定义为之后,相较之前更加简洁,并且使用struct SeqList过程中,初学者很容易将struct遗忘,所以习惯上我们会将结构体类型重新命名

  1. 用typedef重新命名数据类型的原因

上面存储的数据是int类型,只能存储int类型的数据,但是顺序表可以存储任意类型的数据,所以重新命名一下数据类型,这样我们想要存储什么类型的数据就存储什么类型的数据,不用到各个函数的内部进行修改

静态顺序表在实际的使用中并不太常用,它开辟的空间是固定的

假设我们定义数组的空间是1000个,而我们实际只需要存储10个数据,其余的空间全部都被浪费了,此时我们又想用它存储2000个数据,这个空间又不够用

总结:

顺序表的缺点:

  • 开少了可能不够用

  • 开多了可能浪费

  • 动态顺序表:使用动态开辟数组来存储

动态顺序表--按需开辟空间

这里动态内存开辟用realloc,realloc开辟的空间用没了,需要进行扩容,如果满了之后,每次只扩容一个空间,这样每次想要使用空间都需要进行扩容,这显然有些不合适,所以在扩容的时候,我们一次就多扩容些

2.2接口函数的实现

SeqList.h放结构体的定义函数的声明
SeqList.c函数的实现
Test.c测试用例

我们每次写完一个接口函数就要调试一下看跟自己的预期一样吗,不要将所有的接口函数都写完了再进行调试,不然你会发现一堆错误

以下接口函数中的参数都是用结构体指针,这里的接口函数都需要对结构体进行修改,在C语言中我们学习过形参的改变不会影响实参,所以在主函数中使用接口函数必须传递地址,并且接口函数在接收的时候使用指针的形式

🙆SeqList.h

🙆SeqList.c

这里查找我们采用的是遍历,从前往后找,我们在C语言中学习过,二分查找会更快一些,这里为什么不用二分查找

顺序表的函数里一般是不提供二分查找的,二分查找是有条件的,使用二分查找的前提条件是有序的,而顺序表内的数据不一定是有序的,所以我们不使用二分查找,一般快速大量的查找也不会使用顺序表,我们会使用其他结构

😋删除某一个值

  1. SLFind

  1. SLErase

先查找这个值的位置,然后再根据所在位置再删除

😋删除某一个指定的值,并且含有多个相同的值

上面的函数只能删除其中一个值,假设我们想要删除顺序表中所有的3,这时该怎么办?

顺序表中还会提供一个接口函数

int SLFind(SL* ps,SLDataType x,int begin);

//begin查找x的起始位置

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

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

相关文章

保证原子性的几种方式,你都知道吗???

1. 前言 今天主要是从实战 浅谈原理的角度来说下,并发线程下原子性的几种处理方式,好了废话不多说了,接下来让我们看看吧 2. 开始 在开始之前需要提问下大家, 代码i ; 能保持原子性吗??? 是不是一句话就执…

C++——命名空间,输入输出,缺省参数

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;数据结构——二叉树 &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;补充C语言…

Java 诊断利器 Arthas JVM命令

一、jvm 相关命令介绍 命令说明dashboard当前系统的实时数据面板getstatic查看类的静态属性heapdumpdump java heap, 类似 jmap 命令的 heap dump 功能jvm查看当前 JVM 的信息logger查看和修改 loggermbean查看 Mbean 的信息memory查看 JVM 的内存信息ognl执行 ognl 表达式per…

【Android春招】Android基础day2

一、填空题 1&#xff0e;除了开启开发者选项之外&#xff0c;还需打开手机上的 _ 开关&#xff0c;然后才能在手机上调试App。 USB调试 2&#xff0e;App开发的两大技术路线包括 _和混合开发。 原生开发 3&#xff0e;App工程的编译配置文件名为 _。 build.gradle 4&#xff0…

挂载光盘,配置yum源并且安装http软件包 ansible(4)

目录 一、挂载本地光盘到/mnt 二、配置yum源 一、挂载本地光盘到/mnt 第一步&#xff1a; 使用mount模块 注&#xff1a;fstype代表文件格式 二、配置yum源 第一种方法&#xff1a; 使用yum_repository模块 检验是否有对应文件在受控主机node1受控主机&#xff1a;node2受控…

Zipkin数据持久化配置

上一篇我们了解了Zipkin的基础知识以及Zipkin的服务端搭建。 在使用过程中很多同学发现了他的秘密&#xff0c;Zipkin模式将数据保存在内存中&#xff0c;当我们重启后&#xff0c;追踪数据便会丢失。其实&#xff0c;Zipkin也支持将追踪数据保存到MySql或者ES中。 持久化到M…

大数据基础平台搭建-(四)HBbase集群HA+Zookeeper搭建

大数据基础平台搭建-&#xff08;四&#xff09;HBbase集群HAZookeeper搭建 大数据平台系列文章&#xff1a; 1、大数据基础平台搭建-&#xff08;一&#xff09;基础环境准备 2、大数据基础平台搭建-&#xff08;二&#xff09;Hadoop集群搭建 3、大数据基础平台搭建-&#xf…

Linux学习笔记——Nginx安装部署

5.3、Nginx安装部署 5.3.1、简介 Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理Web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。 同Tomcat一样&#xff0c;Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务&#xff0c;同时也可以作为…

二十七、Docker (3)

&#x1f33b;&#x1f33b; 目录一、java开发者Docker常用镜像容器创建&#xff08;本地&#xff09;1.1 资源上传1.2 还原部署1.2.1 部署jdk1.2.2 部署tomcat1.2.3 部署nginx1.2.4 部署mysql二、java开发者Docker常用镜像容器创建(官网拉取)2.1 jdk部署2.1.1 拉取jdk镜像2.1.…

verilog学习笔记- 7)verilog程序框架

目录 注释&#xff1a; 关键字&#xff1a; Verilog常用的关键字&#xff1a; 程序框架&#xff1a; 注释&#xff1a; Verilog HDL 中有两种注释的方式&#xff0c;一种是以“/*”符号开始&#xff0c;“*/”结束&#xff0c;在两个符号之间的语句都 是注释语句&#xff…

7-10 集合相似度

给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数&#xff0c;Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输出格式&#xff1a; 对每一对需要计算的集合&…

DaVinci:键 - 键混合器

调色页面&#xff1a;键Color&#xff1a;Key当选中一个键混合器节点时&#xff0c;键 Key调板上对应显示键混合器 Key Mixer的相关选项。键混合器节点默认有两个输入链接。可在键混合器节点上右击选择“添加”或“移除”一个输入。所有的输入链接和惟一的输出链接均可在键调板…

Elasticsearch在各大互联网公司大量真实的应用案例

国内现在有大量的公司都在使用 Elasticsearch&#xff0c;包括携程、滴滴、今日头条、饿了么、360安全、小米、vivo等诸多知名公司。 除了搜索之外&#xff0c;结合Kibana、Logstash、Beats&#xff0c;Elastic Stack还被广泛运用在大数据近实时分析领域&#xff0c;包括日志分…

SQL如何在数据库中执行

数据库的服务端&#xff0c;可分为执行器(Execution Engine) 和 存储引擎(Storage Engine) 两部分&#xff1a; 执行器负责解析SQL执行查询存储引擎负责保存数据 1 SQL如何在执行器中执行 # 查询用户ID大于50的用户的所有订单 SELECT u.id AS user_id, u.name AS user_name,…

详解回调函数

目录 前言 一、 实现一个简单的计算器 1.1 - 代码一 1.2 - 代码二 二、qsort 函数的介绍 三、改进冒泡排序函数 前言 回调函数就是一个通过函数指针调用的函数。如果把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其…

微信公众号调用扫一扫功能

手把手教你调用微信扫一扫&#xff0c;三分钟包会_前端人的博客-CSDN博客_调用微信扫一扫 第一次搞公众号&#xff0c;还以为跟上回调用企业微信扫一扫一样。。。调起扫一扫功能的过程自然是不同的&#xff0c;要注意的地方还挺多&#xff0c;记录一下 。 其实&#xff0c;在使…

2023最新网络安全自学路线,内容涵盖3-5年技能提升

前言 先预祝大家新年快乐&#xff01; 【一一帮助网络安全入门和提升点这里一一】 01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究…

改进MBR(操作显卡来输出字符)

文章目录前言前置知识mbr.S代码实验操作前言 本博客记录《操作系统真象还原》第二章第一个实验操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a;在屏幕上打印字符串【采用的方式是直接修改显存实现】 实验原因&#xff1a;mb…

Flutter性能优化

原理 Flutter的架构主要分成三层&#xff1a;Framework&#xff0c;Engine和Embedder Framework 使用 dart 实现&#xff0c;包括 Material Design 风格的Widget&#xff0c;Cupertino(针对iOS)风格的Widgets&#xff0c;UI/文本/图片/按钮等基础 Widgets&#xff0c;渲染&…

设计模式学习(一):Bridge桥接模式

一、什么是Bridge模式Bridge模式的作用是在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。1.1 类的功能层次结构主要作用就是增加新的功能。当我们要增加新的功能时&#xff0c;我们可以从各个层次的类中找出最符合自己需求的类&#xff0c;然后以它为父类编写子类…