线性表
一、定义
1.线性表定义(数组、队列、栈、串)
2.线性表的顺序储存结构和链式储存结构
顺序:数组
链式:单双链,循环单双链,静态链
顺序结构元素存储时物理单元必须连续,链式存储则不需要
注:引用传参"&"(C)
在基本操作创建、销毁、CRUD传入的参数若带有&则为引用参数
即相当于commit的作用,如:
ListInsert(L,i,e)表示执行在表L的第i个元素增加e这个操作,然后回滚。
ListInsert(&L,i,e)表示执行增加操作后然后提交。
二、栈(顺序栈、链式栈)
定义:只允许一端进行插删操作的线性表
- 顺序栈:数组,数组的第一个元素作为栈底
- 链式栈:单链表,链表的头节点作为栈顶
三、队列(顺序队列、链式队列)
定义:只允许一端(rear )进行增加,一端(front)进行减少的线性表
-
顺序队列:数组,设数组中的第一个有效元素为头指针front,最后一个元素的位置称为尾指针rear;(若尾指针指向队尾而头指针前还有空间未利用称为假溢出)
-
- 循环队列:为解决假溢出,当尾指针指向末端时可以自动使其指向下标为0的地方检测
Insert:移动尾指针,rear=(rear+1)%size
Delelte:移动头指针,front=(front+1)%size
当 rear=front 时,则循环队列可能空或满(不采取任何操作)
可执行操作预留一个位置不插入数据,这样
队列为空时 rear = front
队满时 front = (rear + 1)%size
- 循环队列:为解决假溢出,当尾指针指向末端时可以自动使其指向下标为0的地方检测
四、数组(顺序)
特殊矩阵的压缩存储
- 对称矩阵 :压缩后占用n(1+n)/2,第i行j列元素按行优先 [ i(i-1)/2 + (j-1)]*L
- 三角矩阵 :压缩后占用n(1+n)/2 + 1,第i行j列元素按行优先 [ i(i-1)/2 + (j-1)]*L
- 三对角矩阵 :压缩后占用3n-2,第i行j列元素按行优先 [3(i-1)-1 + (j-i+1)]*L
- 稀疏矩阵 :
五、串(顺序,块链)
前缀后缀部分匹配
1.暴力匹配算法
i,j分别位父,子字符串的索引值
- 每次比对失败i,j都无条件回溯,i回溯至上次比对处加1,j回溯至起点
- 时间复杂度T(n) = O(m*n)
java实现:
while (i < father.length()&&j < son.length