设计在顺序表存储结构上实现求子串算法
时间: 2024-03-16 07:45:36 浏览: 98
顺序表数据结构算法实现
在顺序表存储结构上实现求子串算法的步骤如下:
1. 定义一个顺序表结构体,包括存储串的数组和串的长度等信息。
2. 输入主串和要查找的子串。
3. 从主串的第一个字符开始遍历,将主串的每一个字符与子串的第一个字符进行比较,如果相同,则继续比较后续字符,直到子串的最后一个字符。
4. 如果子串中所有字符都与主串中对应的字符相同,则表示在主串中找到了子串,返回子串在主串中的起始位置。
5. 如果比较过程中发现有字符不同,则将主串的下一个字符作为起始位置,继续进行比较,直到主串中没有足够的字符可以与子串匹配为止。
6. 如果遍历到主串的末尾仍未找到子串,则表示子串不在主串中,返回-1。
下面是基于 C 语言的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char str[MAXSIZE];
int length;
} SqString;
int Index(SqString S, SqString T) {
int i = 0, j = 0, k = 0;
while (i < S.length && j < T.length) {
if (S.str[i] == T.str[j]) {
i++;
j++;
} else {
j = 0;
k++;
i = k;
}
}
if (j == T.length) {
return k;
} else {
return -1;
}
}
int main() {
SqString S, T;
printf("请输入主串S:");
scanf("%s", S.str);
S.length = strlen(S.str);
printf("请输入子串T:");
scanf("%s", T.str);
T.length = strlen(T.str);
int pos = Index(S, T);
if (pos != -1) {
printf("子串T在主串S中的位置为:%d\n", pos);
} else {
printf("子串T不在主串S中\n");
}
return 0;
}
```
阅读全文