一.简介
在哔哩哔哩看了赫斌老师数据结构入门的内容-b站搜索:av6159200(P12和P13),最后在自己写出创建数组的内容,并在赫斌老师原有的基础上进行修改.
二.修改内容
1.由于他创建的文件后置是.cpp,即c++的文件格式来写所以在自定义函数中用bool 来定义,如图:
这样写虽然简便,但用了c++的语法.(ps:这里就只是单纯的说c)
为此我进行了修改,并且用tpedef来定义结构体变量,最后添加了两个新的功能,如图:
把返回值bool,改为int 然后通过图2定义的来进行返回TRUE与FALSE.
两个功能(图3最后两个自定义函数)分别为:
1.在原有申请的数组长度上,进行增加,即扩大为原有的基础上乘2.
2.获取想要数组某个元素的数值.
三.自定义函数功能的源码
void init_arr(struct Arr *pArr, int lengt); //初始化
int append_arr(struct Arr *pArr, int val); //追加数组
int is_full(struct Arr *pArr); //判断数组是否满
void show_arr(struct Arr *pArr); //输出数组
void insert_arr(struct Arr *pArr, int pos, int val); //插入新的数组 pos = 位置, pos的值从1开始
int is_len(struct Arr *pArr, int pos); //判断数组长度是否小于1或者大于定义的数组
void delete_arr(struct Arr *pArr, int pos, int *pVal); //删除
画图理解
假设已经输入了6个数值
现在要删除第1个的数值
实现过程
删除位置后面的数值依次覆盖.
完成后
代码实现
划重点!!!
记住数组的第一个是 [0],所以假设输入删除位置1的话,实际是 [0], 即要在位置上减1
int is_empty(struct Arr *pArr); //判断是否为空
void sort_arr(struct Arr *pArr); //排序
void inversion_arr(struct Arr *pArr); //倒置
void add_length(struct Arr *pArr,struct Arr *pArr2, int lengt); //增加长度
画图理解
假设一开始定义了3个数组,并且输满了
这时我们申请第二个数组
然后把第一个数组的值先全部拷贝到第二个
之后把第一个数组扩大为原来的两倍,即原来的长度乘2
在把第二个数组的值依次拷贝到第一个数组
可能有人会问为什么不在第二个数组的时候申请第一个数组的两倍!!!
虽然是可以....
划重点!
但是如果那样的话,前面自定义函数里面的功能都用不了!!!
因为要申请两个不同的结构体变量
代码如下:
void get(struct Arr *pArr, int pos, int *zhi); //获取下标的值
四.代码复现(源码)
百度云链接:https://pan.baidu.com/s/17WJC47El_aTdMrd_FQfUCw
五. 总结
数组的插入与删除,通过前面的内容知道了效率低....
为此出现了链表(链式存储).