第二章:线性表(顺序表)
生活中的线性表比如:英文字母表A B C D E F G……Z
数据库存储的数据对象
再比如12星座
基本概念
定义:由n个数据元素(结点)a1,a2,a3....an组成的有限序列。、
2.特点
①.同一线性表中的元素必须具有相同的特性,数据元素间的关系是线性关系。
②.在非空的线性表,有且仅有一个开始结点,它没有直接前趋,而仅有一个直接后继;
③.有且仅有一个终端结点,它没有直接后继,而仅有一个直接前趋;
④.其余的内部结点都有且仅有一个直接前趋,一个直接后继;线性表是一种典型的线性结构。
稀疏多项式使用顺序存储结构存在问题
存储空间分配不灵活
运算的空间复杂度高(需要新的数组存储)
所以使用链表存储,如上图(指针)
线性表顺序存储结构要占用一片连续的空间,这样知道了一个元素的存储位置就可以知道其他元素的存储位置
随机存取就是上面所说的知道了一个元素的存储位置就可以知道其他元素的存储位置
由于博主使用的语言主要是java,c语言是大一学的都忘记了,现在来回顾一下,如果有不对的请指出
主函数调用swap方法,a,b是实参,m,n是形参,swap方法里是将m,n的值进行交换,方法调用完毕后,释放,对a实参的值无影响。
p1,p2是指针,存储的是a,b的存储地址,是指向a,b的(感觉有点像Linux中的虚拟分区),
swap方法用了一个 float t来使a,b的值发生了改变(因为t是值而不是指针,所以交换的是a和b的值)
这里t是指针,所以只是m,n的指向对象发生了交换,没有影响到实参
引用对象直接操作实参
C语言与java不一样,C语言int a的时候就在内存开辟了一块空间,java要在赋值了之后或者new了一个新对象之后才开辟空间
平均查找长度(在数学中称为期望值)即查到每个元素所需要的次数相加/元素个数
公式(n+1)/2 时间复杂度为O(n)
一共有n个元素,有n+1个插入点(最后一个)
都可以在原来的空间进行操作,空间复杂度为O(1)
不能自由扩充指的是添加时内存不够大导致溢出