目录
1.串的定义
1.串的几个术语
2.案例引入
3.串的类型定义,存储结构及运算
1.串的顺序存储结构
代码示例:
2.串的链式存储结构
代码示例:
3.串的模式匹配算法
1.BF算法
1.BF算法设计思想
2.BF算法描述
代码示例:
3.BF算法时间复杂度
2.KMP算法
1.KMP算法设计思想
2.KMP算法描述
代码示例:
3.next函数的改进
4.数组
1.数组的抽象数据类型定义
2.基本操作
3.数组的顺序存储
4.三维数组
5.n维数组
6.特殊矩阵的压缩存储
1.对称矩阵
2.三角矩阵
3.对角矩阵
7.稀疏矩阵存储
1.稀疏矩阵的压缩存储方法
2.稀疏矩阵的链式存储结构:十字链表
5.广义表
1.广义表的性质
2.广义表与线性表的区别
3.广义表的基本运算
6.案例分析与实现
7.总的代码
1.串的定义
1.串的几个术语
2.案例引入
3.串的类型定义,存储结构及运算
1.串的顺序存储结构
代码示例:
#define maxlen 255
typedef struct{
char ch[maxlen + 1];
int length;
}sstring;
2.串的链式存储结构
代码示例:
#define chunksize 80
typedef struct chunk{
char ch[chunksize];
struct chunk *next;
}chunk;
typedef struct{
chunk *head,*tail;
int curlen;
}lstring;
3.串的模式匹配算法
1.BF算法
1.BF算法设计思想
2.BF算法描述
代码示例:
int index_bf(sstring s,sstring t,int pos)
{
int i = pos,j = 1;
while(i <= s.length && j <= s.length)
{
if(s.ch[i] == s.ch[j]) {i++,j++;}
else{i = i - j + 2,j = 1;}
}
if(j >= t.length) return i - t.length;
else return 0;
}
3.BF算法时间复杂度
2.KMP算法
1.KMP算法设计思想
2.KMP算法描述
代码示例:
void get_next(sstring t,int next[])
{
int i = 1;
next[1] = 0;
int j = 0;
while(i < t.length)
{
if(j == 0 || t.ch[i] == t.ch[j])
{
i++;j++;
next[i] = j;
}
else j = next[j];
}
}
int index_kmp(sstring s,sstring t,int pos)
{
int i,j;
i = pos,j = 1;
int next[100];
get_next(t,next);
while(i < s.length && j < t.length)
{
if(j == 0 || s.ch[i] == t.ch[j]){i++; j++;}
else
j = next[j];
}
if(j > t.length) return i - t.length;
else return 0;
}
3.next函数的改进
4.数组
1.数组的抽象数据类型定义
2.基本操作
3.数组的顺序存储
4.三维数组
5.n维数组
6.特殊矩阵的压缩存储
1.对称矩阵
2.三角矩阵
3.对角矩阵
7.稀疏矩阵存储
1.稀疏矩阵的压缩存储方法
2.稀疏矩阵的链式存储结构:十字链表
5.广义表
1.广义表的性质
2.广义表与线性表的区别
3.广义表的基本运算
6.案例分析与实现
7.总的代码
#include<bits/stdc++.h>
using namespace std;
#define maxlen 255
typedef struct{
char ch[maxlen + 1];
int length;
}sstring;
#define chunksize 80
typedef struct chunk{
char ch[chunksize];
struct chunk *next;
}chunk;
typedef struct{
chunk *head,*tail;
int curlen;
}lstring;
int index_bf(sstring s,sstring t,int pos)
{
int i = pos,j = 1;
while(i <= s.length && j <= s.length)
{
if(s.ch[i] == s.ch[j]) {i++,j++;}
else{i = i - j + 2,j = 1;}
}
if(j >= t.length) return i - t.length;
else return 0;
}
void get_next(sstring t,int next[])
{
int i = 1;
next[1] = 0;
int j = 0;
while(i < t.length)
{
if(j == 0 || t.ch[i] == t.ch[j])
{
i++;j++;
next[i] = j;
}
else j = next[j];
}
}
int index_kmp(sstring s,sstring t,int pos)
{
int i,j;
i = pos,j = 1;
int next[100];
get_next(t,next);
while(i < s.length && j < t.length)
{
if(j == 0 || s.ch[i] == t.ch[j]){i++; j++;}
else
j = next[j];
}
if(j > t.length) return i - t.length;
else return 0;
}
int main(){
return 0;
}