数据结构分类:线性结构和非线性结构
问题一:
什么是线性和非线性;
我个人的理解是:数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构;
线性结构包括:数组,链表,队列,栈;
非线性结构包括:树,图,表;
详解:
一.线性结构
1.数组
特点:我们都知道数组中的元素在内存中连续存储的,可以根据是下标快速访问元素,因此,查询速度很快,然而插入和删除时,需要对元素移动空间,比较慢。
数组使用场景:频繁查询,很少增加和删除的情况。
2.链表
特点:元素可以不连续内存中,是以索引将数据联系起来的,当查询元素的时候需要从头开始查询,所以效率比较低,然而添加和删除的只需要修改索引就可以了
使用场景:少查询,需要频繁的插入或删除情况
3.队列
特点:先进先出,
使用场景:多线程阻塞队列管理非常有用
4.栈
特点:先进后出,就像一个箱子,
使用场景:实现递归以及表示式
5.数组与链表的区别
数组连续,链表不连续(从数据存储形式来说)
数组内存静态分配,链表动态分配
数组查询复杂度0(1),链表查询复杂度O(n)
数组添加或删除,复杂度o(n),链表添加删除,复杂度O(1)
数组从栈中分配内存。链表从堆中分配内存。
----其他解释
1. 线性linear,指量与量之间按比例、成直线的关系,在数学上可以理解为一阶导数为常数的函数;
2. 线性的可以认为是1次曲线,比如y=ax+b ,即成一条直线
3. 两个变量之间的关系是一次函数关系的——图象是直线,这样的两个变量之间的关系就是“线性关系”;
4. “线性”与“非线性”,常用于区别函数y = f(x)对自变量x的依赖关系。线性函数即一次函数,其图像为一条直线。其它函数则为非线性函数,其图像不是直线。
线性,指量与量之间按比例、成直线的关系,在空间和时间上代表规则和光滑的运动;而非线性则指不按比例、不成直线的关系,代表不规则的运动和突变。
比如,普通的电阻是线性元件,电阻R两端的电压U,与流过的电流I,呈线性关系,即R=U/I,R是一个定数。二极管的正向特性,就是一个典型的非线性关系,二极管两端的电压u,与流过的电流i不是一个固定的比值,即二极管的正向电阻值,是随不同的工作点(u、i)而不同的。
5. 在数学上,线性关系是指自变量x与因变量yo之间可以表示成y=ax+b,(a,b为常数),即说x与y之间成线性关系。