一、数据结构的研究对象:
如何利用软件单位字节,有约束的,有机组合,利于某些算法的应用
分为逻辑结构和存储结构,逻辑结构用于分析问题,存储结构用于解决问题
逻辑结构有,1对1的表结构,1对多的树结构还有多对多的图结构;存储结构有顺序存储和链式存储
评价研究对象的动作:时间复杂度、空间复杂度
栈空间由编译器管理,生命周期是函数调用时开始,函数返回时结束;堆空间由程序员管理,声明周期由程序员决定;全局变量的生命周期随程序开始而开始,随程序结束而结束
二、线性结构
定义:
除第一个元素和最后一个元素,每个元素都有一个前驱和一个后继
第一个元素没有前驱
最后一个元素没有后继
三、顺序表(抽象数据结构ADT)
1.(存储结构)数组和顺序表的关联
数组:多个元素的顺序组合,语法糖:必须明确告诉编译器元素类型、元素个数
变长数组:编译器在编译的时候,帮我们把这个改为顺序表,在堆上申请内存
数组的元素大小固定了,是静态的,而顺序表支持增删改查,可以扩容/元素移动,数组只支持访问/存储
归属层面不同:普通数组 / 变长数组是编程语言的 “基础存储工具”,顺序表是基于工具封装的 “数据结构”;
核心能力不同:数组(含变长)只有 “存储 / 访问” 能力,顺序表额外封装了 “扩容、元素移动” 等线性表核心操作;
关系是 “实现与被实现”:顺序表可以用普通数组或变长数组作为底层存储,但数组本身永远不是顺序表 —— 就像 “钢筋”(数组)可以用来盖 “房子”(顺序表),但钢筋≠房子。
数组是 “原材料”,顺序表是 “用原材料做好的成品”
2.顺序表分为可扩容的数据表和固定容量的数据表
实现可扩容的、常驻内存的顺序表结构:
定义一个结构:放在常驻内存,就要给程序员(调用者)自己维护,所以要放到堆空间中
为了管理这个结构,就需要很多成员变量来维护这个结构,也就是头结点(结构头),通过malloc来申请
若把头结点放在局部变量会造成内存泄漏,因为结构头释放之后,它所指向的地址就找不到了,就不能释放内存了
很灵活,可以放到栈、堆、全局变量,一般使用数据结构的时候就是传个头
南平市网站建设_网站建设公司_改版升级_seo优化