一、数组
-
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
-
数组是相同数据类型变量的集合。类型可以是 int 整形、char 字符、float double 浮点型。
-
当我们要记录10个数据时,可以只需声明一个大小为10,元素类型为 int 数组,无需声明10个变量。
在 C 中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示:int arr [5] = {1,2,3,4,5};
大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。
-
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
-
//特别注意的是位序是从1开始的,而下标是从0开始的。
例如:
位序: 1 2 3 4 5
下标: 0 1 2 3 4
访问数组元素
#include <stdio.h>
int main()
{
int n[10]; // n 是一个包含 10 个整数的数组
int i, j;
示例
// 初始化数组元素
for (i = 0; i < 10; i++)
{
n[i] = i + 1; // 设置元素 i 为 i + 1
}
for (j = 0; j < 10; j++) // 输出数组中每个元素的值
{
printf(" %d\n", j, n[j]);
}
return 0;
}
获取数组长度
数组长度可以使用 sizeof 运算符来获取数组的长度,例如:
#include <stdio.h>
int main() {
int arr[] = { 1, 2, 3, 4, 5 };
int length = sizeof(arr)
printf(" %d\n", length);
return 0;
}
二、字符串
字符串或串是由数字、字母、下划线组成的一串字符。它是编程语言中表示文本的数据类型。
1.串
是由字符组成的有限序列
//长度为0的串称为 空串
//由空格组成的串称为空格串
-
例如 “abcdef” 为主串,则"abc"为子串
-
串为线性表的一种,共有3种存储方法。
(1)定长顺序存储
提前申请一个内存空间,往里面存数据。
//注意:字符串结尾默认会有一个\0,所以申请一个能存10个字符的串,
最终只有9个字符能用
(2)堆分配存储
1. 根据数据的大小动态地分配空间
2. “堆” 空间是从系统中一个连续的叫“堆”的自由存储区分配出来的。
(3)链式存储
1.同“链表”里面全是数据节点,一个数据节点可以存一个字符,也
可以存多个字符。
2.如果一个节点放一个字符的话, 优点是操作方便,缺点是存储密度 低。可一个节点放多个字符。
//存储密度 = 串值所占的存储 / 实际分配的存储
4、串的匹配模式
BF 算法(简单匹配方法)
1. 设主串(正文串)长度为s,子串(模式串)长度为t。
2.算法的思路是从主串的每个字符开始依次与子串进行匹配。
//将主串与子串的一个字符比较,若相等,继续逐个比较后续字符;
若不等,从主串下个字符开始,重新与子串一个字符比较。
int index_BF(SString S, SString T,int pos )
{
int i = pos, j = 1;
while (i <= S.length && j <=T.length)
{
if (s.ch[i] == t.ch[j])
{
++i;
j++; //主串s和子串依次匹配下一个字符
else
i = i - j + 2;
j = 1;
} //子串、主串指针回溯重新开始下一次匹配
if (j >= t.length)
return i - t.length ; //返回匹配的第一个字符的下标
else
return 0; //模式匹配不成功
}
2. BF算法的算法复杂度为 O (n*m)
//时间复杂度就是用来方便开发者估算出程序的运行时间
KMP算法
1.比BF优点是主串的指针不必回溯,算法复杂度为O(n+m)
2.根据next值求nextval值的方法:
模式串: a b a a b c a c
next值: 0 1 1 2 2 3 1 2
nextval值: 0 1 0 2 1 3 0 2
1.第一位的nextval值必定为0,第二位如果于第一位相同则为0,如果不同则为1。
2.第三位的next值为1,那么将第三位和第一位进行比较,均为a,相同,则第三位的nextva值为第一位的next值,为0。
3.第四位的next值为2,那么将第四位和第二位进行比较,不同,则第四位的nextval值为其next值,为2。
4.第五位的next值为2,那么将第五位和第二位进行比较,相同,第二位的next值为1,则继续将第二位与第一位进行比较,不同,则第五位的nextval值为第二位的next值,为1。5.第六位的next值为3,那么将第六位和第三位进行比较,不同,则第六位的nextval值为其next值,为3。
6.第七位的next值为1,那么将第七位和第一位进行比较,则第七位的nextval值为0.,相同7.第八位的next值为2,那么将第八位和第二位进行比较,不同,则第八位的nextval值为其next值,为2。
总结
以上就是今天要讲的内容,希望以上内容对大家的学习有所帮助,希望大家多多支持,
祝大家学习有成!