c语言矩阵的顺序存储,C语言-数据结构(线性结构)-顺序存储(数组)

一.简介

在哔哩哔哩看了赫斌老师数据结构入门的内容-b站搜索:av6159200(P12和P13),最后在自己写出创建数组的内容,并在赫斌老师原有的基础上进行修改.

二.修改内容

1.由于他创建的文件后置是.cpp,即c++的文件格式来写所以在自定义函数中用bool 来定义,如图:

e78ccaec65f2?night=1

图1

这样写虽然简便,但用了c++的语法.(ps:这里就只是单纯的说c)

为此我进行了修改,并且用tpedef来定义结构体变量,最后添加了两个新的功能,如图:

e78ccaec65f2?night=1

图2

e78ccaec65f2?night=1

图3

把返回值bool,改为int 然后通过图2定义的来进行返回TRUE与FALSE.

两个功能(图3最后两个自定义函数)分别为:

1.在原有申请的数组长度上,进行增加,即扩大为原有的基础上乘2.

2.获取想要数组某个元素的数值.

三.自定义函数功能的源码void init_arr(struct Arr *pArr, int lengt);  //初始化

e78ccaec65f2?night=1

图4-(初始化)int append_arr(struct Arr *pArr, int val);        //追加数组

e78ccaec65f2?night=1

图5-(追加数组)int is_full(struct Arr *pArr);                    //判断数组是否满

e78ccaec65f2?night=1

图6-(判断数组是否满)void show_arr(struct Arr *pArr);                  //输出数组

e78ccaec65f2?night=1

图7-( 输出数组)void insert_arr(struct Arr *pArr, int pos, int val);                      //插入新的数组  pos = 位置, pos的值从1开始

e78ccaec65f2?night=1

图8-(插入)int is_len(struct Arr *pArr, int pos);            //判断数组长度是否小于1或者大于定义的数组

e78ccaec65f2?night=1

图8-(判断数组长度)void delete_arr(struct Arr *pArr, int pos, int *pVal);                      //删除

画图理解

假设已经输入了6个数值

e78ccaec65f2?night=1

数值

现在要删除第1个的数值

e78ccaec65f2?night=1

删除第一个数值

实现过程

e78ccaec65f2?night=1

过程

删除位置后面的数值依次覆盖.

完成后

e78ccaec65f2?night=1

完成

代码实现

划重点!!!

记住数组的第一个是 [0],所以假设输入删除位置1的话,实际是 [0], 即要在位置上减1

e78ccaec65f2?night=1

图9-(删除)int is_empty(struct Arr *pArr);                        //判断是否为空

e78ccaec65f2?night=1

图10-(判断是否为空)void sort_arr(struct Arr *pArr);                            //排序

e78ccaec65f2?night=1

图11-(排序)void inversion_arr(struct Arr *pArr);                      //倒置

e78ccaec65f2?night=1

图12-(倒置)void add_length(struct Arr *pArr,struct Arr *pArr2, int lengt);                  //增加长度

画图理解

假设一开始定义了3个数组,并且输满了

e78ccaec65f2?night=1

第一个数组

这时我们申请第二个数组

e78ccaec65f2?night=1

第二个数组

然后把第一个数组的值先全部拷贝到第二个

e78ccaec65f2?night=1

拷贝后的第二个数组

之后把第一个数组扩大为原来的两倍,即原来的长度乘2

e78ccaec65f2?night=1

扩大后的第一个数组

在把第二个数组的值依次拷贝到第一个数组

e78ccaec65f2?night=1

第二个数组拷贝到第一个数组后

可能有人会问为什么不在第二个数组的时候申请第一个数组的两倍!!!

虽然是可以....

划重点!

但是如果那样的话,前面自定义函数里面的功能都用不了!!!

因为要申请两个不同的结构体变量

代码如下:

e78ccaec65f2?night=1

图13-(增加长度)

e78ccaec65f2?night=1

图13.1-(增加长度)void get(struct Arr *pArr, int pos, int *zhi);                                //获取下标的值

e78ccaec65f2?night=1

图14(下标的值)

四.代码复现(源码)

五. 总结

数组的插入与删除,通过前面的内容知道了效率低....

为此出现了链表(链式存储).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值