不定长顺序表2

news2024/12/24 2:14:26

接下来我们看怎么完成不定长顺序表的代码实现

这里先加一个头文件,名字叫dsqlist.h,存放不定长顺序表的函数定义与声明

然后建立一个名字叫dsqlist.cpp的源文件,跟其头文件配对成一对,(也可以叫别的名字不配对),配对是为了方便我们自己查找。来存放函数的具体实现

接着我们在头文件里面定义完结构体后,可以先把原来定长顺序表的头文件里的函数操作全部复制到这个头文件里,然后再去实现它。将头文件里的再复制到同名源文件里,记得引用头文件。

这里说一下引用规则

宏 也是一种定义。定义与声明要放在头文件里,所以#define INIT_SIZE 10要写在dsqlist.h里面,用#include "dsqlist.h"来被调用它的文件认识。        这里记得给宏加一个具体的数值,否则如果只写一个#define INIT_SIZE就会出现如下错误

那写完的初始化就是这样

(之前说过函数最好写完一个立马就测一个

现在来text文件里测试一下,可以看到初始化成功正常运行

二.插入函数(插入数据,在顺序表PS的pos位置插入val数据元素)

如图,有效数据长度为5,即前5个数字01578有效,现在在2号位置插入val值100

跟前面定长顺序表是一样的:        先往后挪数据;        再插入;        最后length++

唯一不一样的一点是:如果插入满了。就需要扩容

*数据要放到哪个位置就是把数据的值赋值给哪个位置

*等号插入没有删除有,有效的最后一位后面可以插入不可删除

三.判满函数

判满为什么要用静态函数

像是插入,删除函数这类,是别人(用户)要调用使用的操作。        但是判满函数这种别人是不需要调用的。因为在不定长(可扩容)顺序表里面,是没有满了的概念的。一旦满了就立即扩容,根本不存在满的情况。所以别人在使用这个顺序表的时候,不会出现使用着使用着就因为满了而无法使用的情况,所以别人在使用顺序表时不需要对顺序表判断是否满了的操作。

我们平时在使用顺序表插入信息时,都是直接插入信息,没有说上来第一步先判断这个表满了没,我们使用者要做的就只有插入,判满扩容是人家底层自动就做了的。

上面说的就是对使用者来说,顺序表就没有满的概念,所以不需要判满的操作。

所以静态函数是给谁用的,给我自己用的,别人别想用,那不就是静态函数吗?所以你看是不是在cpp文件的外面跟其配对的.h文件里,是不是就没有个判满,只有个盼空吧。是给我自己用的别人不用,给我自己用就是写一个静态函数。

然后是四.扩容函数,同理仍然是给我自己看的静态函数。

作为使用者来说就怎么样,直接往里面插入数据,删除数据就行了,我管不管你有没有空间,我不管的。你没有空间了,你要是不可扩容的,那我就怎么样,我就插不进去,你要是能扩容,那我就插成功了。我不管,反正你给我个顺序表,我拿来用就行了,所以我们扩容一样是一个静态函数。

而扩容用realloc。

扩容相当于把数据成员elem改动了,一般我们改动某个数据成员时,要思考一下剩下其他的数据成员需不需要跟着改动,不改不影响就不需要改。这里的有效数据的个数不需要改,但总容量就需要改了,扩容后的总容量是原来的2倍


现在测试一下插入并且需要扩容函数,为了显示看到结果,再写一个五.Show输出函数

这里说一点,i++的下一步是判断不是执行,1,2,3,3放着,4执行1,2判断3,符号要求才进4,不符合2,3虽执行但不进4

插入且执行扩容函数测试成功

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

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

相关文章

Java 中的 synchronized 同步锁

导致线程安全问题的根本原因在于,存在多个线程同时操作一个共享资源,要想解决这个问题,就需要保证对共享资源访问的独占性,因此人们在Java中提供了synchronized关键字,我们称之为同步锁,它可以保证在同一时…

力扣每日一题83:删除排序数组中的重复元素

题目描述: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2]示例 2: 输入:head [1,1,2…

Day14力扣打卡

打卡记录 H 指数(二分) 链接 以最大值 x 为分割点的正整数数轴上,满足: 少于等于 x 的数值必然满足条件;大于 x 的数值必然不满足。 采用右边界二分查找,寻找满足条件的最大 H 指数要求。 class Soluti…

shell脚本函数(极其粗糙版)

分界点:以下内容需要更改,正常放假更改 函数: 1、把整个命令序列按照格式写在一起 2、可以方便的重复使用的命令序列 使用函数可以避免代码重复 函数可以将大的工程分割为诺干小的功能模块,可以随时调用,代码的可读…

Windows一键添加命名前缀(文件)

温馨提示:使用前建议先进行测试和原文件备份,避免引起不必要的损失。 (一)需求描述 在上班摸鱼的我正准备打开手机刷会儿CSDN论坛,老板发给我一个压缩包并要求我给里面所有的文件的名称添加一个前缀”大项目_”。我本…

协同过滤音乐推荐系统

摘 要 信息化爆炸的时代,互联网技术的指数型的增长,信息化程度的不断普及,社会节奏在加快,每天都有大量的信息扑面而来,人们正处于数字信息化世界。数字化的互联网具有便捷性,传递快,效率高&am…

windows系统命令常用命令(常看当前路径等)

打开cmd命令行终端 按下 winr 快捷键,输入cmd,点击确定 查看当前路径 输入命令 chdir 查看目录下文件 输入命令 dir //查看当前目录下的文件,类似于linux下的ls cd /d e:\software //跳转到其他硬盘的其他文件夹,注意此处…

Linux权限的概念

文章目录 Linux权限管理01.文件访问者的分类(人)02.文件类型和访问权限(事物属性)03.文件权限值的表示方法04. 调整权限(文件访问权限的相关设置方法) ch系列是改变文件性质的指令;file指令可以…

CS224W2.3——传统基于特征的方法(图层级特征)

前两篇中我们讨论了节点层级的特征表示、边层级的特征表示: CS224W2.1——传统基于特征的方法(节点层级特征)CS224W2.2——传统基于特征的方法(边层级特征) 在这篇中,我们将重点从整个图中提取特征。换句话说,我们想要描述整个图结构的特征…

2.27每日一题(定积分求面积,旋转体体积)

1、遇到求面积、定积分的问题,先画图: (1)抛物线(可正可负,所以抛物线函数需要有 a 变量) (2)过两个点 2、定积分求面积有三种情况对应三条公式: &#xff0…

H5游戏源码分享-像素小鸟游戏(类似深海潜艇)

H5游戏源码分享-像素小鸟游戏&#xff08;类似深海潜艇&#xff09; 点击屏幕控制小鸟的飞行高度 整个小游戏就用JS完成 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88483228 <!DOCTYPE HTML> <html><head><meta http-equiv…

【C++】智能指针总结:auto_ptr、unique_ptr、share_ptr、weak_ptr(技术介绍 + 代码实现)

文章目录 0. 概述智能指针&#xff0c;智能在哪儿&#xff1f;RAII 的介绍四个智能指针的特点&#xff1a; 1. auto_ptr&#xff08;C98&#xff09;&#x1f40e;核心功能的简单实现 2. unique_ptr&#xff08;C11&#xff09;&#x1f40e;核心功能的简单实现 3. shared_ptr&…

LSMW应用

案 执行第二行 第六步直接跳过.

【2023MathorCup大数据竞赛】B题完整解答过程(思路+模型文档+代码+结果)

B题完整解答过程 写在最后技术文档&#xff08;部分&#xff09;问题分析假设符号说明1 基于自适应ARIMA-LR模型的需求量预测&#xff08;问题一第一小问&#xff09;1.1 ARIMA模型的建立1.2 LR模型的建立1.3 自适应混合ARIMA-LR模型的建立1.4 ARIMA模型的求解1.5 LR模型的求解…

图像分类任务ViT与CNN谁更胜一筹?DeepMind用实验证明

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 今天跟大家分享DeepMind发表的一篇技术报告&#xff0c;通过实验得出&#xff0c;CNN与ViT的架构之间虽然存在差异&#xff0c;但同等计算资源的预…

力扣刷题 day59:10-29

1.子集 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 方法一&#xff1a;二进制枚举 #方法一&#xff1a;二进制枚举 def subsets(nums)…

C# “依赖注入” 中的 “三种生命周期”

&#x1f680;简介 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种实现控制反转&#xff08;IoC&#xff09;的技术&#xff0c;用于减少代码之间的耦合度。通过依赖注入&#xff0c;一个类可以从外部获取其依赖的对象&#xff0c;而不是自己…

MyBatis-Plus 与 Druid 结合 Dynamic-datasource 实现多数据源操作数据库

MyBatis-Plus 官网&#xff1a;https://baomidou.com/ MyBatis-Plus 官方文档&#xff1a;https://baomidou.com/pages/24112f/ dynamic-datasource 文档&#xff08;付费&#xff09;&#xff1a;https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611 创建数据库…

EM算法解析+代码

大纲 数学基础&#xff1a;凸凹函数&#xff0c;Jensen不等式&#xff0c;MLEEM算法公式&#xff0c;收敛性HMM高斯混合模型 一、数学基础 1. 凸函数 通常在实际中&#xff0c;最小化的函数有几个极值&#xff0c;所以最优化算法得出的极值不确实是否为全局的极值&#xff…

腾讯云2023年双11服务器优惠活动及价格表

腾讯云2023年双11大促活动正在火热进行中&#xff0c;腾讯云推出了一系列服务器优惠活动&#xff0c;云服务器首年1.8折起&#xff0c;买1年送3个月&#xff01;境外云服务器15元/月起&#xff0c;买更多省更多&#xff01;下面给大家分享腾讯云双11服务器优惠活动及价格表&…