一.思维导图
二.一些重要概念
1.绪论
- 数据的存储包含两个方向内容:数据元素;数据元素之间的逻辑关系;
- 算法效率分析:
-算法的执行时间可由其基本运算的执行次数来计量;
-T(n)最高阶常用阶:常数阶O(1);线性阶O(n);平方阶O(n2);立方阶O(n3);对数阶O(log2n);
2.线性表-顺序表
- 链式结构
-特点:线性表中的数据元素存放在一组地址任意的存储节点,节点之间用“链”进行连接;
-结构:节点=数据元素+指针;数据元素:存放数据;指针:存放该节点下一个元素的存储位置;
-存储密度=数据所占空间/节点所占空间(数据占用空间+指针占用空间)==>链表的存储密度不高,利用率低; - 双链表
-特点:1.从任一节点出发可以快速找到其前驱节点和后继节点;2.从任一节点出发可以访问其它节点
-双链表和单链表的区别,其实无论是从构建,删除,插入等操作,对next指针域的操作是不变的,多的是对前驱节点的操作
-插入:
-删除:
- 单链表
- 有序表
-所有元素以递增或递减方式有序排列;
3.栈和队列
- 特点:从数据元素的逻辑关系看->为线性表;从操作方式和种类看->不同于线性表,栈与队列是操作受限的线性表;
- 递归特点:自我调用;必须有递归出口;
- 循环队列:
-对空条件:front=rear;
-队满条件:(rear+1)%MaxSize=front
-进队条件:rear=(rear+1)%MaxSiaze;
-出队条件:front=(front+1)%MaxSize;
-rear的位置不一定比 front指针大 ,所以要算队列中的元素个数时是 (rear-front)%MaxSize; 那如果知道元素的个数,要只要尾指针rear的位置,则是rear=(front+cout)%MaxSize.
4.串
- KMP算法
-特点:主串不需要回溯i指针;将模式串向右滑动尽可能远的一段
-next[j]函数:表明当模式中第j个字符与主串中相应字符“失配”时,在模式中需重新和主串中该字符进行比较的字符位置。
三.疑难问题及解决方案
- KMP算法中next[j]和nextval[j]函数的使用 :我是借助这篇博客来理解的
https://www.cnblogs.com/dusf/p/kmp.html