美文网首页C语言数据结构和算法分析
C语言-数据结构(线性结构)-顺序表(数组)

C语言-数据结构(线性结构)-顺序表(数组)

作者: Y_No_Look | 来源:发表于2019-08-08 18:46 被阅读23次

    一.简介

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


    二.修改内容

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

    图1

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

    为此我进行了修改并添加了两个新的功能,如图:

    图2 图3

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

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

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

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


    三.自定义函数功能的源码

    void init_arr(struct Arr *pArr, int lengt);            //初始化

    图4-(初始化)

    int append_arr(struct Arr *pArr, int val);         //追加数组

    图5-(追加数组)

    int is_full(struct Arr *pArr);                     //判断数组是否满

    图6-(判断数组是否满)

    void show_arr(struct Arr *pArr);                   //输出数组

    图7-( 输出数组)

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

    图8-(插入)

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

    图8-(判断数组长度)

    void delete_arr(struct Arr *pArr, int pos, int *pVal);                        //删除

    画图理解

    假设已经输入了6个数值

    数值

    现在要删除第1个的数值

    删除第一个数值

    实现过程

    过程

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

    完成后

    完成

    代码实现

    划重点!!!

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

    图9-(删除)

    int is_empty(struct Arr *pArr);                        //判断是否为空

    图10-(判断是否为空)

    void sort_arr(struct Arr *pArr);                             //排序

    图11-(排序)

    void inversion_arr(struct Arr *pArr);                       //倒置

    图12-(倒置)

    void add_length(struct Arr *pArr,struct Arr *pArr2, int lengt);                        //增加长度

    画图理解

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

    第一个数组

    这时我们申请第二个数组

    第二个数组

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

    拷贝后的第二个数组

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

    扩大后的第一个数组

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

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

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

    虽然是可以....

    划重点!

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

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

    代码如下:

    图13-(增加长度) 图13.1-(增加长度)

    void get(struct Arr *pArr, int pos, int *zhi);                                 //获取下标的值

    图14(下标的值)


    四.代码复现(源码)

    百度云链接:https://pan.baidu.com/s/17WJC47El_aTdMrd_FQfUCw


    五. 总结

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

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

    相关文章

      网友评论

        本文标题:C语言-数据结构(线性结构)-顺序表(数组)

        本文链接:https://www.haomeiwen.com/subject/uynxjctx.html