顺序表的实现

news/2024/12/29 1:25:56/

思维导图:

一,顺序表

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

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,…