您的位置:首页 > 理论基础 > 数据结构算法

数据结构-一种连续存储数组的算法

2018-02-27 21:21 281 查看
线性结构是数据结构的一个重要知识点,它就是把所有节点用一条直线连接起来。
线性结构分为连续存储(数组)和离散存储(链表),连续存储就是节点之间是连续的,离散存储是节点之间是离散和分开的。
本文章主要介绍了一种连续存储数组的算法,以及这个算法中用到的C语言知识点,还有自己的一些体会与感想。
该算法实现一个数组元素的初始化、追加、查找、插入、删除、倒置、排序、输出等功能。
一.基本算法
定义一个结构体数据类型,包含三个成员,分别表示数组第一个元素的地址、数组所能容纳的最大元素的个数和当前数组有效元素的个数。
主函数:定义一个结构体类型的变量,调用各种子函数,流程控制。
(1)数组初始化:初始变量里面是垃圾值,首先需要使用malloc函数进行动态内存分配,如果分配失败,就会把NULL分配给变量首地址,此时需要终止整个程序,否则分配成功就会把地址分配给变量的首地址,初始化参数:数组总长度和当前长度(默认为0);
(2)追加:传入的参数有两个:变量的地址和需要追加的元素。定义bool类型,如果数组为满,返回false,否则的话,追加元素,即向数组添加元素,同时数组的当前元素个数要加一,返回true;在这里一次追加一个元素。
(3)插入:传入的参数有三个:变量的地址、插入位置、插入元素。定义bool类型,如果数组为满或插入位置超出范围,返回false,接下来先把要插入位置之后的所有元素都要依次后移一位,然后将插入元素插入当前位置,同时数组的当前元素个数要相应增加,返回true。
(4)删除:传入的参数有三个:变量的地址、删除位置、删除元素。在这里不仅要删除所需要位置的元素,还要返回该被删除的元素;定义bool类型,如果数组为空或插入位置超出范围,返回false,首先保存删除元素,然后将删除位置之后的所有元素依次向前移一位,同时数组的当前元素个数要相应减少,返回true。
(5)查找:查找相对比较简单。
(6)倒置:基本思想:将数组元素下标之和等于数组当前长度减1的两个元素互换位置,比如0和cnt-1、1和cnt-2......,当然要保证第一个元素下标小于第二个元素下标。
(7)排序:排序算法相对比较多,这里采用一种做升序排列(降序方法一致);基本思想是:第1个和第2个相比,将较大的元素放到第2个位置,依次类推,最后一个位置存放的是数组中最大的元素,按照这个方法,依次找出次最大值......最小值,分别放在倒数第2个位置......第一个位置。
(8)输出:如果数组为空,提示用户数组为空,否则输出数组有效内容,此时需要调用一个判断数组为空的子函数,输出数组用一个for循环实现;
(9)判断数组是否为空:定义bool类型,如果数组当前长度为0,返回true,否则返回false;
(10)判断数组是否为满:定义bool类型,如果数组当前长度等于数组最大长度,返回true,否则返回false;
二.体会与感想
对于这个算法,看似简单,但是其中牵扯的C语言基本知识点比较多,包括结构体、函数调用、指针、数组、顺序结构、选择结构、循环结构和主函数的流程控制等等。以下几个点觉得需要注意:
传参:传参至关重要,为保证在子函数中改变形参的值,也会对相应的实参值做出改变,此时需要传送变量的地址,不能传送变量。
return:不管调用子函数是否有返回值,一个很好的习惯就是最后都有return语句,保持结构上的一致。
数组:元素类型相同,大小相等。
这个算法是一些基础编程,但是对我的能力有一定的提高,自己会一步步扎实基础。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: