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

目录

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.mfbz.cn/a/461630.html

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

相关文章

Android的三种动画详解(帧动画,View动画,属性动画)

Android的三种动画详解(帧动画、View动画、属性动画)_android动画效果大全-CSDN博客 1、帧动画 缺点是:占用内存较高,播放的是一帧一帧的图片,很少使用。 顺序播放预先定义的图片,类似于播放视频。 步骤…

MySQL语法分类 DDL

DDL(操作数据库、表) 数据库操作(CRUD) C(Create):创建 //指定字符集创建 create database db_1 character set utf8;//避免重复创建数据库报错可以用一下命令 create database if not exists db_1 character set utf8;R(Retrieve):查询 //查询所有数据库的名称 show datab…

基于ElasticSearch存储海量AIS数据:时空立方体索引篇

文章目录 引言I 时间维切分II 空间范围切分引言 索引结构制约着查询请求的类型和处理方式,索引整体架构制约着查询请求的处理效率。随着时间推移,AIS数据在空间分布上具备局部聚集性,如 果简单地将所有AIS数据插入一个索引结构,随着数据量增长,索引的更新效率、查询效率及…

8508A福禄克(FLUKE)数字多用表

181/2461/8938产品概述: Fluke 8508A 万用表在广泛的测量范围内具有卓越的准确性和稳定性,旨在用作校准实验室的多功能精密测量工具,这些实验室必须满足日益严格的测量不确定性分析要求以及提高生产率的需要。 作为其复杂职责的一部分&…

前端项目,个人笔记(一)【Vue-cli - 定制化主题 + 路由设计】

目录 1、项目准备 1.1、项目初始化 1.2、elementPlus按需引入 注:使用cnpm安装elementplus及两个插件,会报错:vueelement-plus报错TypeError: Cannot read properties of null (reading isCE ) ,修改: 测试&#…

SSO 单点登录

什么是JWT JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间传输声明。它以一种紧凑且自包含的方式安全地在用户和服务之间传递信息,通常用于身份验证和信息交换 为什么要使用JWT 1.传统Se…

解密学习机制:线性回归与梯度下降之旅

摘要 在理解机器学习机制的过程中,我们探讨了在合成数据集上训练简单线性回归模型的过程。整个过程要解决的问题是算法如何通过迭代优化来学习输入和输出变量之间的基本关系。 我们的方法包括生成一个合成线性数据集,实施梯度下降进行参数估计&#xf…

Sonarqube中Java规则与CWE与OWASP的映射关系

很多企业使用Sonarqube社区版作为静态分析工具,在开发阶段检测代码中的缺陷或安全漏洞。但是如果是作为SAST工具厂商,集成该引擎,则需要把Sonarqube中的检测规则与其它引擎的规则进行整合,例如下图,把Sonarqube中的一些…

Spring Cloud Alibaba微服务从入门到进阶(三)(Spring Cloud Alibaba)

Spring Cloud Alibaba是spring Cloud的子项目 Spring Cloud Alibaba的主要组件(红框内是开源的) Spring Cloud是快速构建分布式系统的工具集, Spring Cloud提供了很多分布式功能 Spring Cloud常用子项目 项目整合 Spring Cloud Alibaba …

Java项目:56 ssm681基于Java的超市管理系统+jsp

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能包括:商品分类,供货商管理,库存管理,销售统计,用户及角色管理,等等功能。项目采用mave…

【考研数学】高等数学总结

文章目录 第一章 极限 函数 连续1.1 极限存在准则及两个重要极限1.1.1 夹逼定理1.1.1.1 数列夹逼定理1.1.1.2函数夹逼定理 1.1.2 两个重要极限1.1.2.1 极限公式11.1.2.1.1 证明1.1.2.1.2 数列的单调有界收敛准则1.1.2.1.2.1 二项式定理1.1.2.1.2.2 证明 1.1.2.2 极限公式21.1.2…

【Linux进程信号】信号的发送与保存

【Linux进程信号】信号的发送与保存 目录 【Linux进程信号】信号的发送与保存阻塞信号1. 信号其他相关常见概念2. 在内核中的表示3. sigset_t4. 信号集操作函数sigprocmasksigpendingsignal测试这几个系统调用接口 进程地址空间第三讲捕捉信号1. 内核如何实现信号的捕捉2. siga…

一个能够自我游戏的贪吃蛇(pygame与搜索算法)

贪吃蛇小游戏再经典不过了,作为编程爱好者,代码编译的贪吃蛇,又能有怎样的成绩呢? 带着好奇,开始! 先做一个普通的贪吃蛇游戏 引入相关package import pygame 定义相关配置变量 # 定义字体 font pyg…

SQLiteC/C++接口详细介绍之sqlite3类(十六)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十五) 下一篇: SQLiteC/C接口详细介绍之sqlite3类(十七)(未发表) 50.sqlite…

STL:List从0到1

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

uniapp开发微信小程序调用打电话

在使用uniapp开发微信小程序的时候&#xff0c;经常需要调用打电话功能。 下面我们来讲解一下如何实现该功能&#xff0c;效果图请看下图&#xff1a; 代码部分&#xff1a; <!-- h5部分 --><button click"playphone()"></button><!-- JS部分 …

代码随想录day21(1)二叉树:平衡二叉树(leetcode110)

题目要求&#xff1a;判断一棵树是否为平衡二叉树 思路&#xff1a;递归地比较左右子树&#xff0c;只要有一棵子树不满足条件就说明这棵树不是平衡二叉树。本题采用迭代法较为复杂。 leetcode实战&#xff1a; 代码实现&#xff1a; 递归&#xff1a; 迭代&#xff1a;

【WebAssembly】WebAssembly概念介绍和在js中使用

简言 记录下WebAssembly的概念和在JavaScript中的使用方法。 WebAssembly官网 WebAssembly WebAssembly &#xff08;缩写为 Wasm&#xff09;是一种二进制指令格式&#xff0c;用于基于堆栈的虚拟机。Wasm 被设计为编程语言的可移植编译目标&#xff0c;可在网络上部署客户…

爬虫逆向sm3和sm4 加密 案例

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 案例--aHR0cDovLzExMS41Ni4xNDIuMTM6MTgwODgvc3Vic2lkeU9wZW4 第一步&#xff1a;分析页面和请求方式 …

代码随想录算法训练营第39天 | 62.不同路径 , 63. 不同路径 II

动态规划章节理论基础&#xff1a; https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 62.不同路径 题目链接&#xff1a;https://leetcode.cn/problems/unique-paths/ 思路&#xff1a; 动规五部曲&#xff1a…
最新文章