数据结构与算法
字符串匹配
暴力匹配
多做题
设计数据结构,
利用算法
kmp算法
建立部分匹配表
先忽略运行环境
分治算法
回溯算法
理论数据结构,逻辑实际数据结构
各行业有各行业的算法
10大基础算法
框架就是算法缓存redis
查找,排序 l
先把数据结构学好
数据结构
1.线性结构和非线性结构
2.线性结构
#元素之间一对一
3.线性结构的存储结构
顺序存储,即顺序表
#数组,内存连续
链式存储,即链式表
#内存不连续
#每一种语言实现的方式不同
4.数组,对列,栈,链表等线性结构
5.二维数组,广义表,图,二叉树等非线性结构
6.稀疏数组
#当数组中有很多零,可以使用稀疏数组,减少内存使用
#行,列,值
#第一行对应原来数组的行列,以及有多少个需要记录的值
#从第二行开始,对应的是具体元素的坐标和值
#五子棋的存盘,地图等二维物体
#稀疏数组在数据稀疏时有优势
#二维数组转稀疏数组思路
遍历原始的二维数组,得到有效数据的个数sum
根据sum创建稀疏数组,int【sum+1】【3】
将二维数据的有效数据遍历并存入到稀疏数组
a【count】【0】=i
a【count】【1】=j
a【count】【2】=值
#需要对编程语言熟练应用(遍历),#java的io操作,内存与文件,异常处理,循环使用场景
#稀疏数组转原始二维数组思路
读取稀疏数组的第一行数据,创建原始数组
读取稀疏数组后几行数据,赋给原始二维数组即可
#创建数组时不赋值时默认是零
7.对列
银行排队叫号系统
#先进先出,有序列表
#一般语言没有内置的对列数据结构,可以用数组和链表实现,数组一般语言都内置
#数组模拟对列思路
maxsize对列的最大容量
两个变量front,rear记录对列的前后端的下标,front随数据输出而改变,rear随着数据输入而改变
#前端下标小,后端下标大
#数据存入对列思路
将尾指针加1,前提是rear小于maxsize-1
#封装一个数据类型,即类或对象
class arrayqueue{
private int maxsize;
private int front;
private int rear;
private int【】 arr;
public arrayqueue(int arrmaxsize){
maxsize=arrmaxsize;
arr=new int 【maxsize】;
front=-1;
rear=-1;
}
public boolean isfull(){
return rear==maxsize-1;
}
public boolean isempty(){
return rear==front;
}
public void addqueue(int n){
if(isfull()){
return;}
rear++;
arr【rear】=n;
}
public int getqueue(){
if(isempty()){
return;}
front++;
return arr【front】;
}
public void showqueue(){
if(isempty()){
return;}
for (int i=0;i<arr.length;i++){
system.out.printf("arr[%d]=%d\n",i,arr[i]);
}
}
#重点用用数组的前后端部
#上面对列不能复用,需要改造成环形对列
#front变为指向队列的第一个元素,rear变为指向尾部的后一个位置,希望空出一个空间
#front初始值变为0,rear也为0
#满时(rear+1)%maxsize=front
#空front=rear
#有效数据个数(rear+maxsize-front)%maxsize
#将数组看成是环形的,通过取模的方法