串,矩阵,广义表
1.串有两种存储结构,顺序存储和链式存储
主要 学习串的模式匹配,一个是BF算法(穷举)另一个是KMP算法
KMP 算法的关键是求next数组的值,
2.数组
数组也有顺序存储和链式存储,
主要算某个元素在数组的位置,公式
3.矩阵
矩阵压缩
对称矩阵
三角矩阵
对角矩阵
压缩后的位置求法
主要学习稀疏矩阵的压缩
定义的存储结构有 三元组表
第四章作业是字符串匹配
刚开始就想用BF 算法,其实这方法真的机械,后来尝试用KMP,但是遇到很多问题,最麻烦的还是j回溯的位置问题,感觉还是有点一知半解。
第四章实践有稀疏矩阵的压缩和AI代码,在做稀疏矩阵的压缩时,出问题的总是写错结构体元素的调用,格式没写对,导致找很久才找出错误,遇到的另一个问题是输出的时候遇到的问题,因为需要不断遍历整个矩阵,所以在输出的时候往往很难,最后才搞了个
flag,flag是真的好用。
1 三元组表存储 2 #typedef struct{ 3 int row; //每个元素的行数 4 int column; //每个元素的列数 5 int value; //每个元素的值 6 }node; 7 #typedef struct{ 8 int m; //总行数 9 int n; //总列数 10 int N; //非零元素个数 11 node a[]1000]; 12 }Matrix;
int main() { Matrix K; node a[100]; int P; int m,n,N; cin >>K.m; //输入m行 cin >>K.n; //输入n列 cin >>K.N; //输入元素个数 for(int i=0;i<K.N;i++) { cin>>K.a[i].q; cin>>K.a[i].p; cin>>K.a[i].value;} cin>>P; int i=0; int flag=0; while(i<K.N) { if(P==K.a[i].value) { cout<<K.a[i].q<<" "<<K.a[i].p<<endl; flag=1;} ++i; } if (flag==0) cout<<"ERROR"<<endl; return 0; }
另一个实践是AI 核心代码,
这道实践是老师带着我们做的,在听老师讲的过程中,好像开始慢慢感悟到做一道题按照什么样的思路,一点一点的分解。