记一些第一次学习的时候不知道或者理解有偏差的东西吧
- 记住下面这张表
- 关于顺序表元素存储位置的计算
先举个例子:如果每个元素占用8个单元,ai的存储位置是2000单元,则ai+1的存储位置是:?
答案:2008单元。(别理解错了,让你求的是存储位置不是下标!!!)
抛砖引玉:所有数据元素的存储位置均可由第一个元素的存储位置得到(“由第i个元素的存储位置得到”这里推得的):
LOC(ai)=LOC(a1)+(i-1)×L,L是占用的单元量。该运算时间复杂度是O(1)。这个公式体现了随机存取的概念(可以获得任何一个元素的存储位置(地址)!)LOC(a1)称为基地址。这也是顺序表的优点 - 符号常量——#define宏定义的对象,const定义的对象都称为符号常量
如#define MAX_SIZE=100;
数组定义可以包含符号常量但不可以有变量! - 关于顺序表中结构体定义的思考
这里有个结构体里定义了个存储空间的基地址。
这是对于该定义的解释。我们进行动态存储分配。先定义一个指针,指针可以作为数组基地址(此时还不是),然后你用new或者malloc分配动态存储空间然后赋给SqList.elem,这里elem指针就真正能作为数组基地址了,然后你可以找其他存储空间的地址了。这样看起来更灵活一些啦!
- 关于ElemType(一般结构体里出现),这个东西在实现的时候改成你需要的数据类型即可,或者,你在函数,结构体外写一个如
typedef char(或者int) ElemType;
,也可以。 - 类C语言可以参杂C++的一些语法,怎么方便怎么来。
- 数组逻辑位序(0、1、2、3…)和物理位序(1、2、3、4…)差1,这个很关键,涉及到算法如何描述数组中的元素位置。
- ASL公式的Pi,这么理解,因为随机查找,因此我想查找每一个元素的概率(几率)为Pi,然后再✖需要查找的次数(因算法而异),就能算出ASL(平均查找长度(平均时间复杂度))了。(ASL=ΣPiCi,其中Σ下是i=1,上是n)实际上ASL像概率论里的期望值E(X)。我们也会在计算其他算法中用到ASL的公式,来计算其他算法的平均时间复杂度了。
顺序表(顺序查找)的ASL=(n+1)/2,即顺序查找的时间复杂度为O(n) - 写算法要多考虑异常处理,鲁棒性要好
- 写顺序表插入算法的时候,以从最后一个元素到插入位置的原元素依次往后放的思想(删除相反,删除是从第i个删除元素到第n(线性表表长)-1个元素依次前移)来写,这样你计算时间复杂度根据ASL公式也好算&