#07 串

参考答案看底部

1.求改进的失败函数nextval[j]
题目描述
在KMP算法中,进行模式匹配,在匹配失败时,主串的位置i不回溯,模式串需要根据改进的失败函数nextval[j]的值,j转移到nextval[j]位置继续进行比较。试设计函数求模式串的改进的失败函数nextval[j]。
输入描述
输入模式串
输出描述
输出模式串的改进的失败函数nextval[j]
样例输入
aaaaab
样例输出
-1-1-1-1-14

2. 求模式串的失败函数next[j]
题目描述
在KMP算法中,进行模式匹配,在匹配失败时,主串的位置i不回溯,模式串需要根据失败函数next[j]的值,j转移到next[j]位置继续进行比较。试设计函数求模式串的next[j]。
输入描述
输入模式串。
输出描述
输出模式串的失败函数。
样例输入
abcabcaabbc
样例输出
-10001234120

3. 数据结构【稀疏矩阵】三元组表示的稀疏矩阵的快速转置
题目描述
编写函数实现三元组表示的稀疏矩阵的快速转置
前置代码:

//算法4.3 三元组表示的稀疏矩阵的快速转置
#include
using namespace std;
#define MaxSize 100
typedef int ElemType;

//三元组结构体
typedef struct
{
int row,col; //行、列
ElemType value; //值
}Triple;

//稀疏矩阵的三元组表示
typedef struct
{
int Rows, Cols, Terms; //行数、列数、非零元素个数
Triple *data;
}SparseMatrix;
//稀疏矩阵三元组表示初始化
void InitSMatrix (SparseMatrix &Sm,int Rw, int Cl)
{
Sm.Rows = Rw;
Sm.Cols = Cl;
Sm.Terms = 0;
Sm.data = new Triple[MaxSize]; //三元组表
};

void CreateSMatrix(SparseMatrix &A) //建立三元组表示的稀疏矩阵

{
int i,m,n;
ElemType e;
//cout<<“请输入矩阵的非零元素个数:”<<endl;
cin>>A.Terms;
for(i = 0; i<A.Terms; i++)
{
//cout<<“请按行序输入第”<<i+1<<“个非零元素的行,列,元素值:(以空格隔开)”<<endl;
cin>>m>>n>>e;
A.data[i].row = m; //行下标
A.data[i].col = n; //列下标
A.data[i].value = e; //该下标所对应的值
}
}

void PrintSMatrix(SparseMatrix A)
{
int i;
//cout<<“行,列,非零元素个数为:”;
cout<<A.Rows<<" “<<A.Cols<<” “<<A.Terms<<endl;
//cout<<“稀疏矩阵的三元组表示为:”<<endl;
for(i=0;i<A.Terms;i++)
cout<<A.data[i].row<<” “<<A.data[i].col<<” "<<A.data[i].value<<endl;
}

void
FastTranspos(SparseMatrix A, SparseMatrix &C); //转置结果在C中

int main(int argc, const char * argv[]) {
SparseMatrix A,C;
int Rows,Cols;
//cout<<“请输入矩阵的总行数:”<<endl;
cin>>Rows;
//cout<<“请输入矩阵的总列数:”<<endl;
cin>>Cols;
InitSMatrix(A,Rows,Cols);//初始化
InitSMatrix(C,Cols,Rows);//初始化
CreateSMatrix(A);//输入稀疏矩阵

FastTranspos(A, C); 
PrintSMatrix(C);//输出稀疏矩阵 
return 0; 

}

输入描述
输入矩阵的总行数、总列数(以空格隔开):
输入矩阵的非零元素个数:
请按行序输入第"<<i+1<<"个非零元素的行,列,元素值:(以空格隔开)
输出描述
行,列,非零元素个数为:
稀疏矩阵的三元组表示为:
样例输入
3
4
3
0 1 5
1 2 2
2 1 6
样例输出
4 3 3
1 0 5
1 2 6
2 1 2

4. 数据结构【稀疏矩阵】三元组表示的稀疏矩阵的转置
题目描述
编写函数实现三元组表示的稀疏矩阵的转置
前置代码:

//算法4.2 三元组表示的稀疏矩阵的转置
#include
using namespace std;
#define MaxSize 100
typedef int ElemType;

//三元组结构体
typedef struct
{
int row,col; //行、列
ElemType value; //值
}Triple;

//稀疏矩阵的三元组表示
typedef struct
{
int Rows, Cols, Terms; //行数、列数、非零元素个数
Triple *data;
}SparseMatrix;
//稀疏矩阵三元组表示初始化
void InitSMatrix (SparseMatrix &Sm,int Rw, int Cl)
{
Sm.Rows = Rw;
Sm.Cols = Cl;
Sm.Terms = 0;
Sm.data = new Triple[MaxSize]; //三元组表
};

void CreateSMatrix(SparseMatrix &A) //建立三元组表示的稀疏矩阵

{
int i,m,n;
ElemType e;
//cout<<“请输入矩阵的非零元素个数:”<<endl;
cin>>A.Terms;
for(i = 0; i<A.Terms; i++)
{
//cout<<“请按行序输入第”<<i+1<<“个非零元素的行,列,元素值:(以空格隔开)”<<endl;
cin>>m>>n>>e;
A.data[i].row = m; //行下标
A.data[i].col = n; //列下标
A.data[i].value = e; //该下标所对应的值
}
}

void PrintSMatrix(SparseMatrix A)
{
int i;
//cout<<“行,列,非零元素个数为:”;
cout<<A.Rows<<" “<<A.Cols<<” “<<A.Terms<<endl;
//cout<<“稀疏矩阵的三元组表示为:”<<endl;
for(i=0;i<A.Terms;i++)
cout<<A.data[i].row<<” “<<A.data[i].col<<” "<<A.data[i].value<<endl;
}

void Transpose (SparseMatrix A, SparseMatrix &B); //转置结果在Bmatrix中

int main(int argc, const char * argv[]) {
SparseMatrix A,B;
int Rows,Cols;
//cout<<“请输入矩阵的总行数:”<<endl;
cin>>Rows;
//cout<<“请输入矩阵的总列数:”<<endl;
cin>>Cols;
InitSMatrix(A,Rows,Cols);//初始化
InitSMatrix(B,Cols,Rows);//初始化
CreateSMatrix(A);//输入稀疏矩阵
Transpose (A, B);
PrintSMatrix(B);//输出稀疏矩阵
return 0;
}

输入描述
输入矩阵的总行数、总列数(以空格隔开):

输入矩阵的非零元素个数:

请按行序输入第"<<i+1<<"个非零元素的行,列,元素值:(以空格隔开)

输出描述
cout<<"行,列,非零元素个数为:

稀疏矩阵的三元组表示为:

样例输入
3
4
3
0 1 5
1 2 2
2 1 6
样例输出
4 3 3
1 0 5
1 2 6
2 1 2

5. 数据结构【稀疏矩阵】建立三元组表示的稀疏矩阵
题目描述

编写函数实现建立三元组表示的稀疏矩阵
前置代码:

//算法4.1 建立三元组表示的稀疏矩阵
#include
using namespace std;
#define MaxSize 100
typedef int ElemType;

//三元组结构体
typedef struct
{
int row,col; //行、列
ElemType value; //值
}Triple;

//稀疏矩阵的三元组表示
typedef struct
{
int Rows, Cols, Terms; //行数、列数、非零元素个数
Triple *data;
}SparseMatrix;
//稀疏矩阵三元组表示初始化
void InitSMatrix (SparseMatrix &Sm,int Rw, int Cl)
{
Sm.Rows = Rw;
Sm.Cols = Cl;
Sm.Terms = 0;
Sm.data = new Triple[MaxSize]; //三元组表
};

void CreateSMatrix(SparseMatrix &A); //建立三元组表示的稀疏矩阵

void PrintSMatrix(SparseMatrix A)
{
int i;
//cout<<“行,列,非零元素个数为:”;
cout<<A.Rows<<" “<<A.Cols<<” “<<A.Terms<<endl;
//cout<<“稀疏矩阵的三元组表示为:”<<endl;
for(i=0;i<A.Terms;i++)
cout<<A.data[i].row<<” “<<A.data[i].col<<” "<<A.data[i].value<<endl;
}
int main(int argc, const char * argv[]) {
SparseMatrix A;
int Rows,Cols;
//cout<<“请输入矩阵的总行数:”<<endl;
cin>>Rows;
//cout<<“请输入矩阵的总列数:”<<endl;
cin>>Cols;
InitSMatrix(A,Rows,Cols);//初始化
CreateSMatrix(A);//输入稀疏矩阵
PrintSMatrix(A);//输出稀疏矩阵
return 0;
}

输入描述
请输入矩阵的总行数:

请输入矩阵的总列数:

请输入矩阵的非零元素个数:

请按行序输入第1个非零元素的行,列,元素值(以空格隔开):

请按行序输入第2个非零元素的行,列,元素值(以空格隔开):

请按行序输入第3个非零元素的行,列,元素值(以空格隔开):

输出描述
输出稀疏矩阵的总行数、总列数、非零元素个数
三元组表示的稀疏矩阵
样例输入
3
4
3
0 1 5
1 2 2
2 1 6
样例输出
3 4 3
0 1 5
1 2 2
2 1 6
提示
稀疏矩阵为:
0 5 0 0
0 0 2 0
0 6 0 0

参考答案

  1. 求改进的失败函数nextval[j]
#include<iostream>

using namespace std;

void get_next(string T,int next[]);

int main(){
   
	string t;
	cin>>t;
	int m=t.length();
	int n[m];
	get_next(t,n);
	return 0;
}
void get_next(string T,int next[]){
   
	int m=T.length();
	int j=-1;
	next[0]=-1;
	for(int i=0;i<m;){
   
		if(j==-1||T[i]==T[j]){
   
			++i;
			++j;
			if(T[i]!=T[j])
				next
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挖洞的杰瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值