顺序表的实现

news/2024/4/24 20:19:05/

思维导图:

一,顺序表

一,顺序表的创建(位置:头文件内)

1.1顺序表的结构体类型

要求:创建顺序表并使这个顺序表能够存放数据,能记录有效数据的个数,能够记录容量大小。

 代码

#define data int
typedef struct SL {data* Data;int sz;int capacity;
}SL;

这里还使用了typedef来对结构体类型进行重命名,可以方便使用这种结构体类型。

使用(测试文件内):

SL a;

2.初始化(SL.c文件内)

代码:

void SlInit(SL* a) {a->Data = (data*)malloc(sizeof(data) * 4);if (a->Data == NULL) {perror("malloc fail");return;}a->sz = 0;a->capacity = 4;
}

!!!初始化是非常必要的

3.容量检查(SL.c文件内)

!  !  !  检查容量避免越界 

void SlCheak(SL* a) {if (a->sz == a->capacity) {data* temp = (data*)realloc(a->Data,sizeof(data)*2*(a->capacity));if (temp == NULL) {perror("malloc fail\n");return;}a->Data = temp;a->capacity = 2 * (a->capacity);}
}

 4.插入与删除函数

前插,尾插,前删,尾删,中间插入,中间删除

1.在这里,先分别写一个中间插入与删除的函数:

 中间插入函数:SLInsert()

参数SL*a,int pos,int n

代表:要插入的顺序表,插入位置,插入的值

代码:

void SlInsert(SL* a, int pos, int n) {assert(pos > 0 && pos < a->sz);SlCheak(a);pos = pos - 1;int i = a->sz-1;while (i >= pos) {a->Data[i + 1] = a->Data[i];i--;}a->Data[pos] = n;a->sz++;
}

中间删除函数:SLErase()

参数SL*a  , int pos

代表:顺序表,要删除的数的下标

代码:

void SlErase(SL* a, int pos) {assert(pos > 0 && pos < a->sz);SlCheak(a);pos = pos - 1;int i = 0;for (i = pos;i < a->sz-1;i++) {a->Data[i] = a->Data[i + 1];}a->sz--;
}

其实,尾插头插,尾删头删都可以复用中间插入中间删除来实现。在这里交给各位读者来想想了。

四,查找数据

SLFind()

在这里使用的了一个static修饰的函数Find()来寻找要查找的数据的位置。这个函数也可以复用来实现Modify()函数 

static int Find(SL* a, int taget) {assert(a);int i = 0;for (i = 0;i < a->sz;i++) {if (a->Data[i] == taget) {return i;}}return -1;
}
void SlFind(SL* a) {assert(a);printf("请输入你要查找的数据:>");int taget = 0;scanf("%d", &taget);if (Find(a, taget)>=0) {printf("找到了,下标是:>%d\n", Find(a, taget));}else {printf("找不到……\n");}
}

五,修改数据

Modify()

void SlModify(SL* a) {assert(a);printf("请输入你要修改的对象:>");int n = 0;scanf("%d", &n);int pos = Find(a, n);//复用if (pos == -1) {printf("这个值不存在\n");}else {printf("请输入你要修改的值:>");int j = 0;scanf("%d", &j);a->Data[pos] = j;}}

 


http://www.ppmy.cn/news/46892.html

相关文章

python3 DataFrame一些好玩且高效的操作

pandas在处理Excel/DBs中读取出来&#xff0c;处理为DataFrame格式的数据时&#xff0c;处理方式和性能上有很大差异&#xff0c;下面是一些高效&#xff0c;方便处理数据的方法。 map/apply/applymaptransformagg遍历求和/求平均shift/diff透视表切片&#xff0c;索引&#x…

查询数据库空间(mysql和oracle)

Mysql版 1、查看所有数据库容量大小 -- 查看所有数据库容量大小 SELECTtable_schema AS 数据库,sum( table_rows ) AS 记录数,sum(TRUNCATE ( data_length / 1024 / 1024, 2 )) AS 数据容量(MB),sum(TRUNCATE ( index_length / 1024 / 1024, 2 )) AS 索引容量(MB) FROMinfor…

如何识别来自 ChatGPT 的文本输出

既然 ChatGPT 生成的内容需要和人类生成的内容有明确的区分&#xff0c;那如果我们拿到一个几经转手的、缺失标记的内容片段&#xff0c;有没有办法来判断他的作者&#xff0c;到底属于 ChatGPT&#xff0c;还是属于人类呢&#xff1f; openai 公司&#xff0c;为此主动推出了…

python中__init__.py文件

例子 不要使用相对路径。 __init__.py# from net.functions import * VERSION "1.0.0"import os, sys module_path os.path.dirname(__file__) module_parent_path os.path.dirname(module_path) sys.path.extend([module_path, module_parent_path]) from net i…

Matlab进阶绘图第17期—气泡热图

气泡热图是一种特殊的热图&#xff08;Heatmap&#xff09;。 与传统热图相比&#xff0c;气泡热图利用不同颜色、不同大小的圆形表示数据的大小&#xff0c;可以更加直观地对矩阵数据进行可视化表达。 本文使用自制的bubbleheatmap小工具进行气泡热图的绘制&#xff0c;先来…

赋值法写基础解系中解向量

赋值法写基础解系中解向量 &#xff08;一&#xff09;背景引入 通常解方程组时&#xff0c;将系数矩阵化为行阶梯型&#xff0c;进而可化为行最简型 &#xff08;说一嘴&#xff1a;行最简型是指阶梯口元素全是1&#xff0c;该1所在列全其余全为0&#xff1b;广义行阶梯的阶梯…

5G NR调制阶数与EVM关系以及对系统SNR要求分析

移动通信技术对数据传输速率要求越来越高。一种提高传输速率的思路是使用更高阶的QAM 调制方式&#xff0c;例如5G NR 的256QAM PDSCH&#xff0c;微波的1024QAM&#xff0c;2048QAM和4096QAM 调制。更高阶的QAM 调制方式对系统也提出了更高的要求。例如某个系统的EVM 测试结果…

【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个文件占用了内存太大了。 使用例子如下,用JAVA 运行Sort 1,…

YOLOv8详解代码实战,附有效果图

YOLOv8架构 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本&#xff0c;目前支持图像分类、物体检测和实例分割任务&#xff0c;鉴于Yolov5的良好表现&#xff0c;Yolov8在还没有开源时就收到了用户的广泛关注。yolov8的整体架构如下&…

tmux使用方法

tmux使用指南&#xff1a;比screen好用n倍&#xff01; - 知乎 当你开启一个session的时候会默认开启一个window&#xff0c;这个截图就是一个window&#xff0c;而这个window可以拆成很多分subwindow&#xff0c;在这里就是&#xff1a;左上角Asubwindow&#xff0c;左下角Bsu…

UE4 回放系统升级到UE5之后的代码报错问题解决

关键词&#xff1a; UE4 回放系统 升级 UE5 报错 DemoNetDriver GetDemoCurrentTime GetDemoTotalTime 背景 照着网上教的UE4的回放系统&#xff0c;也叫重播系统&#xff0c;英文Replay。做完了&#xff0c;测试运行正常&#xff0c;可升级到UE5却报了一堆 WorldSetting 和 …

Java数据结构与算法----动态规划(背包篇)

1. 0/1背包 1.1.算法思路 0/1背包是动态规划、背包问题中最经典的问题啦&#xff01;它主要的问题是&#xff1a; 给定n种物品、这n种物品的重量分别是&#xff0c;价值分别是 &#xff0c;而你有一个容量为C的背包&#xff0c;请问如何求出所能拿的最大价值呢&#xff1f; …

【Java EE】-网络编程(一) 网络初识

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 主要内容&#xff1a;单机、局域网、广域网、交换机、路由器。IP地址&#xff0c;端口号&#xff0c;协议&#xff0c;五元组。 协议分层&#xff0c;OSI七层网络模型…

ChatGPT团队中,3个清华学霸,1个北大学霸,共9位华人

众所周知&#xff0c;美国硅谷其实有着众多的华人&#xff0c;哪怕是芯片领域&#xff0c;华为也有着一席之地&#xff0c;比如AMD 的 CEO 苏姿丰、Nvidia 的 CEO 黄仁勋 都是华人。 还有更多的美国著名的科技企业中&#xff0c;都有着华人的身影&#xff0c;这些华人&#xff…

JVM:线上服务CPU爆满,如何排查(三)

0. 引言 前一段时间出现了一个正则表达式引起的线上CPU爆满的问题&#xff0c;一开始没有在第一时间定位到问题&#xff0c;这里也特此记录一下&#xff0c;同时也系统的梳理下CPU爆满问题的排查思路和方法&#xff0c;为后续的同学提供参考。 1. CPU爆满问题产生的原因 我们…

Cloud computing(后续慢慢补充)

Cloud computing 可以看到右侧的容器虚拟化架构中&#xff0c;不需要运行额外的OS&#xff0c;这样启动的服务性能会相比于通过虚拟化软件实现的架构更优秀。但是虚拟机同样也有它的优点&#xff0c;比如它的安全、隔离性&#xff0c;可以运行不同的操作系统等等。 Virtualiz…

Java对日开发成趋势?网友:找工作打开了新思路

近两年行业环境起起伏伏&#xff0c;企业降本增效&#xff0c;提高人才招聘的门槛&#xff0c;导致大家找工作时觉得越来越难&#xff0c;尤其是Java开发&#xff0c;主打的就是一个“卷”&#xff01; 不过行业变革&#xff0c;挑战与机遇并存。Java作为编程语言排行榜的常年第…

278. 第一个错误的版本

你是产品经理&#xff0c;目前正在带领一个团队开发新的产品。不幸的是&#xff0c;你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的&#xff0c;所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, ..., n]&#xff0c;你想找出导…

系统规划与管理师相关英语

1、system planning and management engineer 系统规划与管理师 2、information technology 信息技术 3、computer science and communication technology 计算机科学和通信技术 4、design、develop、install、implement information system and application softw…

javaagent 使用注意

前言 最近做项目&#xff0c;需要实现一个agent&#xff0c;实现运行过程替换字节码&#xff0c;当笔者实现这些功能时发现还是很多注意事项的。而且字节码的替换过程如果类的属性与方法升级了&#xff0c;那么加载就会报错。这种做法的好处是代码无侵入&#xff0c;缺点也很明…