20210424

回顾 | GS2-C1-660-131~145 | 数据结构-串(四)| 数据结构-数组

Table of Contents

回顾

恋词复习

田静语法

关于定语从句的分类:限定性定语从句(无逗号隔开)和非限定性定语从句(有逗号隔开)。

其实有无逗号隔开只是表象,真正的区别是先行词范围是否明确。

image.png

GS2-C1-660-131~145

依旧做的还是选择题,概念好强,好想吐,加强概念!!!间断点,连续性!!

数据结构-串(三)

KMP模式匹配算法改进

如果主串S="aaaabcde",子串T="aaaaax",其next数组值分别为012345,在开始时,当i=5、j=5时,“b”与“a”不相等,如图①,因此j=next[5]=4,如图中的②,此时“b”与第4位置的“a”依然不等,j=next[4]=3,如图中的③,后依次是④⑤,直到j=next[1]=0时,根据算法,此时++i、++j,得到i=6、j=1,如图中的⑥

image.png

当中的②③④⑤步骤,其实是多余的判断。由于T串的第二、三、四、五位置的字符都与首位的“a”相等,可以用首位next[1]的值去取代与它相等的字符后续next[j]的值

nextval数组值推导

1.T="ababaaaba"

j 123456789
模式串T ababaaaba
next[j] 011234223
nextval[j] 010104210

先算出next数组的值分别为011234223,然后再分别判断。

void getNextval(Str substr, int nextval[], int next[])
{
int j=1, t=0;
next[1] = 0;
nextval[1] = 0;
while(j<substr.length)
{
if (t==0 || substr.ch[j] == substr.ch[t])
{
next[j+1] = t+1;
if(substr.ch[j+1] != substr.ch [next[j+1]])
nextva1[j+1] = next[j+1];
else
nextva1[j+1] = nextval[next[j+1]];
++j;![image.png](https://i.typlog.com/tanxy/8380747381_350258.png)
++t;
}
else
t = nextval[t];
}
}

数据结构-数组

一维数组

image.png
dataType a[n];
//其中dataType为数据类型,如int型

二维数组

其实只不过元素全是一维数组的一维数组。

image.png
dataType a[m][n];
//其中dataType为数据类型,如int型
//定义了m行n列的二维数组

二维数组的行优先存储

二维数组的列优先存储

考点

有了这两种存储顺序,对于同一个数组同一个位置上的元素在内存中的地址就有可能不同,这就是出题的点。

比如:

黄色方格位置(在内存中相对于第一个元素位置) 存储顺序及计算方法
13 行优先。a[2][2]之前一共有2整行元素,分别是下标0行和1行,每行5个元素;第三行,即下标2行有三个元素,第三个为a[2][2];因此a[2][2]之前一共有12个元素。
11 列优先。一共有2整列元素,分别是下标0列和1列,每列4个元素;第三列,即下标2列有三个元素,第三个为a[2][2];因此a[2][2]之前一共有10个元素。

这一部分要掌握在不同存储顺序下对于数组中某一个元素来计算它之前有多少个元素的计算方法。

例题

image.png

分析:即int A[6][10]

A[3][5]所在的行之前有3行,每行10个元素;
A[3][5]所在行中位置之前有5个元素;
因此A[3][5]之前的元素个数为: 3x10 + 5=35;
所跨的地址范围为:4x35 =140;
A[0][0]的地址为: 1000 - 140 = 860。