数据结构之顺序表(包学包会版)

目录

1.线性表

2.顺序表

2.1概念及结构

2.2接口实现

3.总结


halo,又和大家见面了,今天要给大家分享的是顺序表的知识,跟着我的脚步,包学包会哦~

规矩不乱,先赞后看!

ps:(孙权劝学)

1.线性表

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,
常见线性表:顺序表,链表,栈,队列,字符串。。。。

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,
线性表在物理存储时,通常以数组或者是链式结构的形式存储。

2.顺序表

2.1概念及结构

顺序表是用一段物理地址连续的存储单元依次存储元素的线性结构,一般情况下采用数组存储。
在数组上完成数据的增删查改。
顺序表一般分为:
(1)静态顺序表:使用定长数组存储元素
(2)动态顺序表:使用动态开辟的数组存储

通常静态顺序表由于数组长度固定,导致其用处非常狭隘,因此我们选择通过写动态数组来对顺序表进行掌握。

2.2接口实现

静态顺序表只适用于确定需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开
多了浪费,开少了不够用。所有现实中基本上都是使用动态顺序表,根据需要动态的分配空间大小
,所以下面我们实现动态顺序表:

1.先在头文件(Seqlist.h)上进行顺序表结构的创建和对各函数的声明,目的是为了把各部分区分开,使程序便于理解,能清楚的看到各部分对于的作用和功能:

这里我们的容量初始值为4,一定要开合适的大小,过小的话反复开很麻烦,过大则会引起浪费

2.接着下来是顺序表各函数的函数部分,我们在SeqList.c中完成:

a.结构体的初始化和销毁函数

这两个函数是基础知识的,大家一定能看懂,如果不懂请在评论区留言,博主一定细心解答

b.对顺序表容量检查的函数

这里检查容量的目的是防止在插入数据的时候,由于容量不够而引起数组越界的bug,

函数正文部分的开头加上断言(assert)也是为了便于调试能精准找出错误的位置。

c.插入函数(SLInSert)和清除函数(SLErase)

这两个函数的用处极大,不仅可以从中间插和去,还可以实现头尾的插和去,但撒在写这两个函数的时候,一定要注意赋值时候画图理解边界问题,这个问题一定要通过画图来克服,空想绝对没有在纸上画着图思考清晰,因此动手画图是学好数据结构必不可少的的一步。

d.头尾插入和去除函数

这四个函数如果没有上面的插入函数和清除函数的辅助,写起来就非常的麻烦,费时费力费神(注释掉的就是没有两个函数辅助时实现头尾插入和去除的代码)。然后也要注意使用assert对代码各部分进行维护,这在以后的学习和工作中也是相当有必要的。

e.查函数(SLFind)和改函数(SLModify)

这两个函数也非常容易上手,要注意的就是得想到有这两个函数可以丰富你所写顺序表的功能,使其更加全面。

f.打印函数(SLPrint)和摧毁函数(SLDestroy)

这两个函数也是对顺序表内存的呈现和程序的运行有重要作用的函数。到此函数部分也正式完毕

3.测试代码,在test.c上面完成

这样多文件的形式让代码分类汇总到对应文件,相互依赖但互不干扰,让人一目了然,这是一种值得学习的写代码手段。

3.总结

顺序表属于线性表中简单的一部分,但其作用是相当大的,我们需要充分掌握它,达到能自己徒手敲出来的地步,相信你们,各位未来高薪程序员,一起加油吧!

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

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

相关文章

【MMDetection3D实战5】Dataset 和 model配置文件解析

文章目录 1. Dataset 配置文件解析1. 1 定义全局变量1. 1 数据处理pipeline(1) train_pipeline(2) test_pipeline(3) eval_pipeline1. 2 data 字典的定义2. model 配置文件解析2. 1 体素化voxel_layer2. 2 voxel_encoder2. 3 middle_encoder2. 4 2D 检测网络(backbone + neck …

详解(实现)堆的接口函数

文章目录 堆堆的顺序存储 准备工作创建头文件Heap.h创建源文件Heap.c头文件的包含定义保存堆数据的结构体 初始化销毁堆插入数据向上调整算法图解算法代码 删除堆顶向下调整算法图解代码 取出堆顶数据求堆的数据个数判断堆是否为空全部代码Heap.hHeap.c 再了解堆之前我们先要了…

AI毕业论文降重GPTS,避免AI检测,高效完成论文

视频演示 AI毕业论文降重GPTS,避免AI检测,高效完成论文! 开发目的 “毕业论文降重”GPTS应用,作用为:重新表述学术论文,降低相似性评分,避免AI检测。 使用地址 地址:毕业论文降重…

unraid docker.img扩容

unraid 弹Docker image disk utilization of 99%,容器下载/更新失败 我的版本是6.11.5,docker.img满了导致容器不能更新,遇到同样问题的可以先用docker命令清除一下仓库(当然不一定能清理出来,我已经清理过只清理出来1G多点&…

【四 (3)数据可视化之 Seaborn 常用图表及代码实现 】

目录 文章导航一、介绍二、安装Seaborn三、导入Seaborn四、设置可以中文显示五、占比类图表1、饼图2、环形图 六、比较排序类1、条形图2、箱线图3、小提琴图 七、趋势类图表1、折线图 八、频率分布类1、直方图 九、关系类图表1、散点图2、成对关系图3、热力图 文章导航 【一 简…

vue3后台管理系统权限路由的实现

最近做管理系统的时候,需要实现不同用户登陆所展示的菜单不同,查了不少帖子,总结下实现的步骤: 1.在router/index.js的代码: import { createRouter, createWebHistory,createWebHashHistory } from vue-router impo…

基于SpringBoot+Vue交流和分享平台的设计与实现(源码+部署说明+演示视频+源码介绍)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

Apache zookeeper kafka 开启SASL安全认证

背景:我之前安装的kafka没有开启安全鉴权,在没有任何凭证的情况下都可以访问kafka。搜了一圈资料,发现有关于sasl、acl相关的,准备试试。 简介 Kafka是一个高吞吐量、分布式的发布-订阅消息系统。Kafka核心模块使用Scala语言开发…

【人工智能入门必看的最全Python编程实战(5)】

--------------------------------------------------------------------- 1.AIGC未来发展前景 未完持续… 1.1 人工智能相关科研重要性 拥有一篇人工智能科研论文及专利软著竞赛是保研考研留学深造以及找工作的关键门票!!! 拥有一篇人工…

数据结构 第5章 树与二叉树(一轮习题总结)

数据结构 第5章 树与二叉树 5.1 树的基本概念5.2 二叉树的概念5.3 二叉树的遍历和线索二叉树5.4 树、森林5.5 树与二叉树的应用 5.1 树的基本概念(3 4 7) 5.2 二叉树的概念(2 14 19 22) 5.3 二叉树的遍历和线索二叉树 5.4 树、森林…

AIDD简介——分类和回归任务

🌞欢迎来到AI生物医药的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 🌠本阶段属于练气阶段,希望各位仙友顺利…

《ARM汇编与逆向工程 蓝狐卷 基础知识》

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

【JS】优化代码分支

判断条件很多时,会降低代码的可读性,例如下面这段代码 function fn(type){if(type 1){console.log(待把相思灯下诉)}else if(type 2){console.log(一缕新欢)}else if(type 3){console.log(旧恨千千缕)}else if(type 4){console.log(最是人间留不住)…

Ubuntu20下C/C++编程开启TCP KeepAlive

1、在linux下,测试tcp保活,可以使用tcp自带keepalive功能。 2、几个重要参数: tcp_keepalive_time:对端在指定时间内没有数据传输,则向对端发送一个keepalive packet,单位:秒 tcp_keep…

拌合楼内部管理系统开发(一)立个flag,开始做准备

前言:项目背景情况介绍 公司有意开发一套适合拌合楼的内部管理系统给到客户使用,接触过一家拌合楼行业内号称标杆的企业,去过参观学习的都觉得他们软件好用,但是从软件开发角度看,就是crud钉钉机器人无人值守。虽然公司…

Python语法糖

N u m P y NumPy NumPy的 n d i t e r nditer nditer nditer 是 NumPy 提供的一种多维迭代器,用于对多维数组进行迭代操作。它可以替代传统的嵌套循环,在处理多维数组时更加方便和高效。 迭代器可以按照不同的顺序遍历数组的元素,也可以控制…

npm install和npm install --save的区别

1、npm install XX 会把XX包安装到 node modules 目录中; 不会修改 package.json; 之后运行 npm instal1 命令时,不会自动安装XX; 2、npm install --save XX 会把XX包安装到 node_modules 目录中: 会在 package.json 的 dependencies 属性下添加XX; 之后运行…

JDK8和JDK11在Ubuntu18上切换(解决nvvp启动报错)

本文主要介绍JDK8和JDK11在Ubuntu18上切换,以供读者能够理解该技术的定义、原理、应用。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:计算机杂记 🎀CSDN主页 发狂的小花 🌄人…

Redis列表:高效消息通信与实时数据处理的利器

Redis是一个强大的开源内存数据库,被广泛应用于缓存、会话存储、队列等各种场景中。在Redis中,列表(List)是一种非常重要的数据结构,它提供了存储、获取、操作有序元素集合的功能。本文将深入探讨Redis列表的特性、使用…