| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> [数据结构与算法] 线性表之数组基本操作代码实现详解 -> 正文阅读 |
|
[数据结构与算法][数据结构与算法] 线性表之数组基本操作代码实现详解 |
一、创建数组(为数组分配内存)1.1 c语言静态分配内存内存分配在栈上,离开栈内存自动销毁。 可以直接创建数组并指定大小。 C99之前创建数组必须传入固定大小,如下:
C99开始支持传入变量的变长数组
动态分配内存内存分配在堆上,需要使用free手动释放,否则直到程序结束才释放。 使用malloc函数分配内存,如:
malloc分配的内存,在使用结束时要调用free函数手动释放:
二、初始化数组2.1 c语言可以在创建时初始化,也可以创建后再初始化。
代码验证如下:
打印结果如下:
三、获取数组大小3.1 c语言数组容量大小(最多能存储的数据个数)想要获取数组的内存大小,可以使用sizeof函数
数组当前存储数据的个数(面向对象思想)实际上我们需要的,常常是数组存储数据的个数,而不是数组最多能存储多少和数据,如果数组一开始分配内存比实际存储的数据所占内存大(实际上常常就是这样),就需要使用另一种方法了。 常用的是面向对象的思想,不要以为c语言是面向过程的语言,其实它早已偷偷加入了面向对象的东西,而且面向对象的思想,是思想,可以用任何语言实现。 利用c语言的结构体,创建一个数组结构体类型,每次操作数据记录当前长度。
四、插入元素4.1 不需保证数组元素原有排序当不需要保证数组元素原有排序时,不用指定插入位置,直接使用尾插法,不用移动元素,时间复杂度为O(1)
4.2 需保证数组元素原有排序当需要保证数组元素原有排序时,要指定插入位置,并且插入位置以后元素都要后移,为新元素腾出位置。
当原数组无数值顺序,需要人为指定插入位置。 当原数组有数值顺序,要先将新元素的数值与原数组元素比较大小,找到对应位置,再调用上面函数。 五、删除元素和插入元素一样,如果不需保证原有数组的顺序,需把最后一个元素覆盖要删除的元素即可,时间复杂度O(1)。 如果需保证原有数组的顺序,删除位置以后的元素要往前移动,以保证数组内存的连续性,时间复杂度O(n)。 以上复杂度只是删除操作的复杂度,如果需要查找定位,就另说了。这里仅说明需保证原有数组顺序的情况。 根据提供的数据不同,可分为以下两种方法: 5.1 指定索引删除找到给定位置,将此位置后面的元素前移,把该位置的元素覆盖即可。
5.2 指定数值删除这里涉及了查找操作,需要先根据数值查找定位元素,再执行删除操作。 这里以穷举遍历查找为例,仅说明一下删除操作:
六、访问元素访问元素可以通过下标访问,也可以通过指针访问。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 18:39:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |