#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char ElemType;
typedef int Status;
typedef struct{
ElemType *elem;//存储顺序表的首地址
int length; //实际元素的个数
}SqList;
//初始化顺序表
Status Init_SqList(SqList &L){
L.elem=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));
if(!L.elem) return OVERFLOW;
L.length=0;
return OK;
}
// 向顺序表中输入数据
void Create_L(SqList &L,int n){//n表示元素的个数
//getchar();
for(int i=0;i<n;i++){
scanf("%c",&L.elem[i]);
L.length++;
}
}
void Print_L(SqList L){
printf("该顺序表的元素有:");
for(int i=0;i<L.length;i++){
printf("%c",L.elem[i]);
}
printf("\n");
}
int bf(SqList S,SqList T){
int i = 0;
int j = 0;
while (i < S.length && j < T.length){
if (S.elem[i] == T.elem[j]) { //匹配
i++;
j++;
}
else{ // 不匹配
i = i - j + 1;
j = 0;
}
}
if (j == T.length){
return i - j; // 匹配成功
}
else{
return -1; // 匹配失败
}
}
int main(){
SqList S,T;
int n,m;
if(Init_SqList(S)==1&&Init_SqList(T)==1){
printf("顺序表初始化成功.....\n");
// 向顺序表中输入数据
printf("请输入主串元素的个数:");
scanf("%d",&n);
getchar();
Create_L(S,n);
printf("请输入子串元素的个数:");
scanf("%d",&m);
getchar();
Create_L(T,m);
Print_L(S);
Print_L(T);
int index=bf(S,T);
if(index!=-1){
printf("子串在主串中的位置为:%d\n",index);
}
else{
printf("子串在主串中未找到。\n");
}
}
else{
printf("顺序表初始化失败.....\n");
}
return 0;
}
[数据结构]顺序表+BF算法
最新推荐文章于 2024-09-12 19:02:20 发布