数据结构练习第四章_串

1 数据结构练习第四章 串 一、选择题 1.函数substr(“DATASTRUCTURE”,5,9)的返回值为( )。 A. “STRUCTURE” B.“DATA” C. “ASTRUCTUR” D. “DATASTRUCTURE” 2.字符串的长度是指( )。 A. 串中不同字符的个数 B. 串中不同字母的个数 C. 串中所含字符的个数 D. 串中不同数字的个数 3.两个字符串相等的充要条件是( )。 A. 两个字符串的长度相等 B. 两个字符串中对应位置上的字符相等 C. 同时具备(A)和(B)两个条件 D. 以上答案都不对 4.关于串的叙述中,正确的是( ) A.空串是只含有零个字符的串 B.空串是只含有空格字符的串 C.空串是含有零个字符或含有空格字符的串 D.串是含有一个或多个字符的有穷序列 5.下面关于串的的叙述中,哪一个是不正确的?( ) A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 6.设有两个串S1和S2,求S2在S1中首次出现的位置的运算称作( ) A.求子串 B.判断是否相等 C.模型匹配 D.连接 7.若串S=’software’,其子串的数目是( )。 A.8 B.37 C.36 D.9 8.串的长度是指( ) A.串中所含不同字母的个数 B.串中所含字符的个数 C.串中所含不同字符的个数 D.串中所含非空格字符的个数 9.串是一种特殊的线性表,其特殊性体现在( )。 A.数据元素是一个字符 B. 可以顺序存储 C. 数据元素可以是多个字符 D. 可以链接存储 10.下面关于串的的叙述中,哪一个是不正确的(B ) A. 串是字符的有限序列 B. 空串是由空格构成的串 C. 模式匹配是串的一种重要运算 D. 串既可以采用顺序存储,也可以采用链式存储 11.若串=‘software’,其非平凡子串(非空且不同于串本身)的数目是(C ) A. 8 B. 37 C. 35 D. 9 12.串是一种特殊的线性表,其特殊性体现在( B ) A. 可以顺序存储 B. 数组元素是一个字符 C. 可以连续存储 D. 数据元素可以是多个字符 13. 下面关于串的的叙述中,哪一个是不正确的?( B ) 2

A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 二、填空题 1.两个串是相等的,当且仅当两个串的长度相等且___对应位置_____的字符都相同。 2.串是一种特殊的线性表,串常见的存储结构有顺序存储和_____链式存储_两种方式。 3.空格串是指_______,其长度等于_______。 (1) 由空格字符(ASCII值32)所组成的字符串 (2)空格个数 4.一个字符串中________称为该串的子串 。任意个连续的字符组成的子序列 5.字符串’ababaaab’的nextval函数值为________。01010421 6.串是一种特殊的线性表,其特殊性表现在__(1)__;串的两种最基本的存储方式是__(2)__、__(3)__;两个串相等的充分必要条件是__(4)__。(1)其数据元素都是字符 (2)顺序存储 (3)和链式存储 (4)串的长度相等且两串中对应位置的字符也相等 7.下列程序读入无符号16进制数(出现的字母为小写),将其转换为十进制数输出。请将程序空缺部分补全。 int f(char *s) {int n=0, i; for(i=0;s[i]!=’\0’; i++) n=n*16+ (1) ; return n; } main() {char s[10]; scanf(“%s”,s); printf(“%d\n”, (2) ); } (1)(s[i]>=97?s[i]-87:s[i]-48) ∥‘a’到’f’的ASCII码是97到102 (2)f(s) 8.下列算法实现求采用顺序结构存储的串s和串t的一个最长公共子串。 void maxcomstr(orderstring *s,*t, int index, length) {int i,j,k,length1,con; index=0;length=0;i=1; while (i<=s.len) {j=1; while(j<=t.len) { if (s[i]==t[j]) { k=1;length1=1;con=1; while(con) if (1) _ { length1=length1+1;k=k+1; } else (2) __; if (length1>length) { index=i; length=length1; } 3

(3)____; } else (4) ___; } (5) __ } } [题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。串s用i指针(1<=i<=s.len)。t串用j指针(1<=j<=t.len)。算法思想是对每个i(1<=i<=s.len,即程序中第一个while循环),来求从i开始的连续字符串与从j(1<=j<=t.len,即程序中第二个while循环)开始的连续字符串的最大匹配。程序中第三个(即最内层)的while循环,是当s中某字符(s[i])与t中某字符(t[j])相等时,求出局部公共子串。若该子串长度大于已求出的最长公共子串(初始为0),则最长公共子串的长度要修改。 (1)i+k<=s.len && j+k<=t.len && s[i+k]==t[j+k] ∥如果在s和t的长度内,对应字符相等,则指针k 后移(加1) (2)con=0 ∥s和t对应字符不等时置标记退出 (3)j=j+k ∥在t串中,从第j+k字符再与s[i]比较 (4)j=j+1 ∥t串取下一字符 (5) i=i+1 ∥s串指针i后移(加1)。 9.试利用下列栈和串的基本操作完成下述填空题。 initstack(s) 置s为空栈; push(s,x) 元素x入栈; pop(s) 出栈操作; gettop(s) 返回栈顶元素; sempty(s) 判栈空函数; setnull(st) 置串st为空串; length(st) 返回串st的长度; equal(s1,s2) 判串s1和s2是否相等的函数; concat(s1,s2) 返回联接s1和s2之后的串; sub(s,i,1) 返回s中第i个字符; empty(st) 判串空函数 FUNC invert(pre:string; VAR exp:string):boolean; {若给定的表达式的前缀式pre正确,本过程求得和它相应的表达式exp并返回“true”,否则exp为空串,并返回“false”。已知原表达式中不包含括弧,opset为运算符的集合。} VAR s:stack; i,n:integer; succ:boolean; ch: char; BEGIN i:=1; n:=length(pre); succ:=true; (1)__; (2)__; WHILE (i BEGIN ch:=sub(pre,i,l); IF (3)_ THEN (4)__ ELSE IF (5)__THEN (6)_ ELSE BEGIN 4

exp:=concat((7)___,(8)____); exp:=concat((9)___,(10)___); (11)__; END; i:=i+1 END; IF (12)___THEN BEGIN exp:=concat(exp,sub(pre,n,1)); invert:=true END ELSE BEGIN setnull(exp); invert:=false END END; 注意:每个空格只填一个语句。 (1)initstack(s) ∥栈s初始化为空栈 (2) setnull (exp) ∥串exp初始化为空串 (3) ch in opset ∥判取出字符是否是操作符 (4) push (s,ch) ∥如ch是运算符,则入运算符栈s (5) sempty (s) ∥判栈s是否为空 (6) succ := false ∥若读出ch是操作数且栈为空,则按出错处理 (7) exp (8) ch ∥若ch是操作数且栈非空,则形成部分中缀表达式 (9) exp (10) gettop(s) ∥取栈顶操作符 (11) pop(s) ∥操作符取出后,退栈 (12) sempty(s) ∥将pre的最后一个字符(操作数)加入到中缀式exp的最后 三、判断题 1.( )子串“ABC”在主串“AABCABCD”中的位置为2。T 2.( )KMP算法的特点是在模式匹配时指示主串的指针不会变小。√ 3.( )设模式串的长度为m,目标串的长度为n,当n≈m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。√ 4.( )串是一种数据对象和操作都特殊的线性表。√ 5.( )串长度是指串中不同字符的个数。× 6.( ) 如果两个串含有相同的字符,则这两个串相等。X 7.( )KMP算法的最大特点是指示主串的指针不回溯。√ 四、简答题 1.KMP算法(字符串匹配算法)较Brute(朴素的字符串匹配)算法有哪些改进? 朴素的模式匹配(Brute-Force)时间复杂度是O(m*n),KMP算法有一定改进,时间复杂度达到O(m+n)。主要优点是主串指针不回溯。当主串很大不能一次读入内存且经常发生部分匹配时,KMP算法的优点更为突出。 2.给出字符串‘abacabaaad’在KMP算法中的next和nextval数组。 模式串的next函数定义如下:

合集下载

《数据结构与算法(C++语言版)》第4章_串

《数据结构与算法(C++语言版)》第4章_串

串函数与串的类定义
• 常用的 常用的C++串函数 串函数 • C++的串库(string.h)中提供了许多字符串的操作函数,几 个常用的C++字符串函数及其使用方法如下。 •假设已有以下定义语句:
串函数与串的类定义
• (1)串拷贝函数 • char *strcpy(char *s1, const char *s2),将字符串s2复制到字 符串数组s1中,返回s1的值。 • char *strncpy(char *s1, const char *s2, size_tn)将字符串s2中最 多n个字符复制到字符串数组s1中,返回s1的值。 • 例如:
串函数与串的类定义
• (3)串比较函数 • int strcmp(const char *s1, const char *s2),比较字符串s1和字 符串s2。函数在s1等于、小于或大于s2时,分别返回0、小 于0或者大于0的值。 • int strncmp(const char *s1, const char *s2, size_tn)比较字符串 s1中的n个字符和字符串s2。函数在s1等于、小于或大于s2 时,分别返回0、小于0或者大于0的值。 • 例如:
串模式匹配
• 无回溯的匹配算法 • 在上面介绍的匹配算法中,某趟匹配失败时,下一趟的匹 配相当于将子串P后移1位再从头与主串中对应字符进行比 较,即相当于i指示器回溯到上趟(最近失败的一趟)匹配 的起点的下一个位置,这样,主串中每个字符都要与子串 中的第1个字符对应一次,再向后比较。因此,主串中每个 字符参加比较的次数最多可达n次(n为子串长度),因此 时间复杂度为O(nm)。那么,能否使目标串中每个字符只参 加一次比较呢?也就是说,能否不回溯i指示器?回答是肯 定的。这个问题是由D.E.Knoth与V.R.Pratt和J.H.Morris同时 解决的,所以有的文献也称这种思想的串匹配算法为KMP 算法。

数据结构课件第4章串-文档资料

数据结构课件第4章串-文档资料

/* 没有截断*/
for(i=s->len;i<s->len+t.len;++)
s->ch[i]= t.ch[i-s->len];
s->len+=t.len;
flag=1;
}if 结束
19
else if (s->len< MAXLEN ) { /* 截断t的一部份*/ for (i=s->len; i<MAXLEN; i++) s->ch[i]= t.ch [i-s->len]; s->len=MAXLEN; flag=0;
精品jing
数据结构课件第4章串
2
4.1 串的逻辑结构
以下是串的 3 个例子: 例4-1 x = computer 例4-2 y = student-1 例4-2 z = data structure
串的定义 串的基本操作
4.1.1 串的定义
3
串是由零个或多个字符组成的有限序列。记为: s = a1 a2 … an ( n ≥ 0 )
其中: s 是串的名,用单引号括起来的字符序列是串的值; ai(1≤i≤n)可以是字母、数字或其他字符; n 是串中字符的数目,称为字符串的长度。
4
零个字符的串称为空串 (null string),它的长度为 零。用 “” 来表示空串。
串中的任意连续的字符组成的子序列称为该串的子 串;包含子串的串相应地称为主串。
t串长t.len
s
t
t串被全部截去 s
新串s的长度
MAXLEN
1ring *s, SString t) {
/* 用 s返回由 s和 t联接而成的新串。*/

数据结构(C语言版)第4章串

数据结构(C语言版)第4章串

第4章串串:限定数据元素类型的线性表。

1 逻辑结构1.1 定义位串:数据元素属于{0,1}ASCII码串: 数据元素属于ASCII码字符集。

数字串:数据元素属于整数集合2 顺序串///////////////////////////////// // 项目路径:7动态顺序串/////////////////////////////////2.2 构造/析构(测试函数Test1)template <class T>String<T>:: String( ){ m_Data=NULL; m_Size=m_Length=0; }template <class T>String<T>::String(T a[], int n){ m_Size = m_Length = n;m_Data = new T[m_Size];if(!m_Data) throw "内存不够,上溢";for(int i=0; i<m_Length; i++)m_Data[i]=a[i];}template <class T>String<T>::String(String &s) // 拷贝构造函数{ m_Size = m_Length = s.m_Length;m_Data = new T[m_Size];if(!m_Data) throw "内存不够,上溢";for(int i=0; i<m_Length; i++)m_Data[i]=s.m_Data[i];}template <class T>String<T>:: ~String( ){ delete []m_Data; }2.3 比较(测试函数Test2)// 重载<template <class T>bool String<T>::operator<(String &s){ for(int i=0; i<m_Length && i<s.m_Length; i++) { if(m_Data[i]<s.m_Data[i]) return true;if(m_Data[i]>s.m_Data[i]) return false;}if(m_Length<s.m_Length) return true;return false;}// 重载==template <class T>bool String<T>::operator==(String &s){ for(int i=0; i<m_Length && i<s.m_Length; i++) if(m_Data[i]!=s.m_Data[i]) return false; if(m_Length==s.m_Length) return true;return false;}2.4 取子串、连接(测试函数Test3)// 取子串template <class T>String<T> String<T>::Substr(int pos,int len) { if(pos+len>m_Length) // 预防子串长度越界len=m_Length-pos;String<T> s;s.m_Length=s.m_Size=len;s.m_Data = new T[s.m_Size];if(!s.m_Data) throw "内存不够,上溢";for(int i=0; i<len; i++)s.m_Data[i]=m_Data[pos+i];return s;}// 连接stemplate <class T>void String<T>::Concat(String s){ if(m_Length+s.m_Length > m_Size) // 空间不够ReNew(m_Length+s.m_Length);for(int i=0; i<s.m_Length; i++)m_Data[m_Length+i] = s.m_Data[i];m_Length += s.m_Length;}// 重新分配串的存储空间template <class T>void String<T>::ReNew(int size){ T *p=new T[size]; // 重新申请空间 m_Size=size;for(int i=0; i<m_Length; i++) // 数据迁移p[i]=m_Data[i];delete []m_Data; // 释放原串空间 m_Data = p;}2.5 插入、删除(测试函数Test4)// 第i个位置上插入stemplate <class T>void String<T>::Insert(int pos, String s){ if(m_Length+s.m_Length > m_Size) // 空间不够 ReNew(m_Length+s.m_Length);for(int i=m_Length-1; i>=pos; i--) // 向后移位 m_Data[i+s.m_Length] = m_Data[i];for(i=0; i<s.m_Length; i++)m_Data[pos+i] = s.m_Data[i];m_Length += s.m_Length;}// 删除子串template <class T>void String<T>::Delete(int pos,int len){ for(int i=pos+len; i<m_Length; i++) // 向前移位 m_Data[i-len] = m_Data[i];m_Length -= len;}2.6 顺序串的评价优点:访问子串方便,缺点:空间大小不灵活,插入、删除费时。

数据结构第4章串.

数据结构第4章串.

4.1 串
4.1.1 串的基本概念
串: 由零个或多个字符组成的有限序列。 s = “ a 1a 2 … a n ” s—串名 a1a2… an —串值 ai为字符 ( n≥0)
|s|—串的长度,即串中字符的数目。 空串:零个字符的串,记作φ = “”。空格串 |φ|=0
子串:串中任意个连续的字符组成的子序列 主串:包含子串的串。 例,串 “eij” 是串 “beijing” 的子串, “beijing” 称为主串。 字符在串中的位置:字符在序列中的序号 子串在主串中的位置:子串的第一个字符在主 串中的位置。
(9) 串替换StrReplace(S,i,T) 操作条件: 串S,T存在。 操作结果: 用串T替换串S中自第i个字符开始,长度与T相 等的子串,S的串值改变。
2. 串的存储 顺序串: 串的顺序存储结构。串中的字符被顺 序地存放在一组地址连续的存储单元中。 定长:按预定义的大小为串变量分配一个长度 固定的存储区。 定长顺序串用字符数组描述:
#define MAXSIZE 255 /*假设要处理的串的长度不 会超过255*/ char S[MAXSIZE];
串的实际长度可在这个预定义长度的范围内 随意设定,超过予定义长度的串值则被舍去 (“截断”)
0 C
1 h
2 i
3 n
4 e5 sLeabharlann 6 e \0… …
MAXSIZE-1
串长有两种表示方法: • 用一个整数来存储串的长度。串可以结构描述:
} int StrCat(SeqString *S1, else SeqString *S2) { /* 将 S2 连接到 S1 的末尾构成新串, for(i=0;i<MAXSIZE-S1若S2完全连接到S1末尾则返回 >len;i++) 1,否则返回零*/ S1->s[S1->len+i]=S2->s[i]; { int i; S1->len=MAXSIZE ; if(S1->len+S2return 0; >len<=MAXSIZE) } { }

数据结构-第4章 串

数据结构-第4章 串
真子串是指不包含自身的所有子串。
4.1 串的类型定义
子串的序号:将子串在主串中首次出现时的该 子串的首字符对应在主串中的序号,称为子串 在主串中的序号(或位置)。 【例】 A=“abcdefbbcd”,B=“bcd”,B在A中的 序号为2。 特别地,空串是任意串的子串,任意串是其自 身的子串。
4.1.2 串的抽象数据类型定义
//查找ab子串
if (p->data==‘ a’ && p->next->data==‘b’)
{ p->data=‘x’; p->next->data=‘z’;
q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=‘y’;
q->next=p->next; p->next=q;
s: a a a a b c d
t: a ab bac acb bc c ✓ 匹配成功 算法的思路是从s的每一个字符开始依次与t的 字符进行匹配。
4.2.1 Brute-Force算法
int BFIndex(SqString s,SqString t)
{ int i=0, j=0,k;
while (i<s.length && j<t.length)
4.1 串的类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法
本章要求
理解: 1、串的基本概念、类型定义 2、串的存储表示和实现 3、串的KMP算法
掌握: 4、串的简单模式匹配算法(BF)
第4章 串的基本概念
串(或字符串):是由零个或多个字符组成 的有限序列。
串的逻辑表示: S=“a1a2…ai…an”,其中S为 串名,ai (1≤i≤n)代表单个字符,可以是字母、 数字或其它字符(包括空白符)。 串值:双引号括起来的字符序列。双引号不是 串的内容,只起标识作用。

数据结构 第四章 串

数据结构 第四章 串

13 14
15
16 17
maxsize
…
t
h
i
s
i
s
a
s
t
r
i
n
g
\0
顺序串示意图
联接算法 SeqString *stract(SeqString *s1,SegString *s2) { for(int i=0; i<=s2curlen; i++) s1str[s1curlen++]=s2str[i]; return s1; }
求子串算法 SeqString *substr(SeqString *s, int i, int j) { SegString *ss=new SegString[1]; for(int k=0, sscurlen=0; k<j&&i+k< scurlen; k++) ssstr[sscurlen++]=sstr[i+k]; ssstr[sscurlen]=’\0’; return ss; }
第四章 串
内容 串及其运算 串的 存储结构 串运算的实现
4.1 串及其运算
4.1.1 串的基本概念
串(String)是由零个或多个字符组成的有限序列。 一般记为 S= ˝a1a2a3……an˝ n≥0 其中S为串名, 双引号括住的字符序列是串值; ai 的可以字母、数字或其它字符。字符个数n为串 的长度。 当n=0时为空串(S=˝˝)。串中任意个 连续字符组成的有限子序列称为该串的子串。
(3)求串长(strlen) strlen(s)是获得字符串S长度的函数。例如: s= ˝string ˝; 则strlen(s)的值为6。 strlen(˝Get length of the string˝ )的值为24。 (4)求子串(substr) strlen(s, i, j)表示从字串S的第i个字符开始抽出j个字符构成 新的字串的函数。其中1≤i≤strlen(s), 1≤i≤strlen(s)-i+1。 例如:s= ˝Get a substring from the string˝ 则substr(s,7,9)的值为˝substring˝ 。 (5)串比较(strcmp) strcmp(s1,s2)为获得字串s1和s2比较结果的函数。当s1<s2 时,函数值小于0,当s1=s2时,函数值等于0。 当s1=s2 时,函数值大于0。

数据结构考前复习3

第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的?( B )A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )A.求子串 B.联接 C.匹配 D.求串长10.串的长度是指( B )A.串中所含不同字母的个数 B.串中所含字符的个数C.串中所含不同字符的个数 D.串中所含非空格字符的个数二、填空题1.空格串是指由空格字符(ASCII值32)所组成的字符串,其长度等于空格个数__。

2.组成串的数据元素只能是__字符______。

3.一个字符串中任意个连续的字符组成的子序列称为该串的子串。

四、应用题1.名词解释:串串是零个至多个字符组成的有限序列。

从数据结构角度讲,串属于线性结构。

与线性表的特殊性在于串的元素是字符。

2.描述以下概念的区别:空格串与空串。

空格是一个字符,其ASCII码值是32。

空格串是由空格组成的串,其长度等于空格的个数。

空串是不含任何字符的串,即空串的长度是零。

第六章树和二叉树一、选择题1.已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( D )A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE 4. 设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为( D )A.5 B.6 C.7 D.85. 在下述结论中,正确的是( D )①只有一个结点的二叉树的度为0; ②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。

A.①②③ B.②③④ C.②④ D.①④结点的度:一个结点的子数个数称为此结点的度数的度;树中所有结点的读的最大值6. 设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是( A )A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定8.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( B )A.9 B.11 C.15 D.不确定10.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。

第四章 串 数据结构

空串:长度为零的字符串,n = O 空格串:数据元素都是空格的字符串; 子串:串中连续的任意个字符组成的子 序列,称为该串的子串; 主串:包含子串的串;
§4.1 串的逻辑结构及定义 一 串的逻辑结构
下面是一些串的例子:
说明:
(1) a = ‘ LIMING’
1) 串中包含的字符个数,称 为串的长度。长度为0的串称
2.优点是操作方便;不足之处是存储密度较低。
所谓存储密度为:
串值所占的存储单元 存储密度
实际分配的存储密度 若要将多个字符存放在一个结点中,就可以缓 解这个问题。举例:
S s t r i n g####^
§4.2串的表示及实现
§4.2.2串的链式存储结构及操作虚拟实现
说明: (1) 由于串中的字符个数不一定是每个结
找不到模式串(无回溯):O(m)
aaaaaaaaaaaa xyz
§4.2串的表示及实现
§4.2.1串的顺序存储结构及操作虚拟实现
找到模式串(有回溯):
最好:回溯很少,或没回溯O( m+n ) abcabcabcaab aab
最坏:回溯很多,或每次都有回溯 O( m* n ) aaaaaaaaaaab aaab
点存放字符个数的整倍数,所以,需要在最后一个 结点的空缺位置上填充特殊的字符。
(2) 这种存储形式优点是存储密度高于结点大 小为1 的存储形式;不足之处是做插入、删除字符
的操作时,可能会引起结点之间字符的移动,算法 实现起来比较复杂。
(3)存储密度小,运算处理方便,但占用存储量大; 存储密度大,运算处理困难,但占用存储量小.
§4.1 串的逻辑结构及定义 一 串的逻辑结构
3)判空操作 StrEmpty(S) 功能:若为空串,则返回TRUE,否则返回FALSE

数据结构-4 串

第四章串一.单项选择题1.串的连接运算不满足。

A. 分配律B. 交换律C. 结合律D. 都不满足2.串是一种特殊的线性表,其特殊性体现在。

A. 可以顺序存储B. 数据元素是一个字符C. 可以链接存储D. 数据元素可以是多个字符3.设有两个串p和q,求q在p中首次出现的位置的运算称作。

A. 连接B. 模式匹配C. 求子串D. 求串长4.串是一个的序列。

A. 不少于一个字母B. 有限个字符C. 不少于一个字符D. 空格或字母5.已知串s=’ABCDEFGH’,则s的所有不同子串的个数为。

A. 8B. 9C. 36D. 376. 设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x 和y 串的连接串,subs(s,i,j)返回串s 的从序号i 的字符开始的j 个字符组成的子串,len(s)返回串s 的长度,则con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是。

A. BCDEFB. BCDEFGC. BCPQRSTD. BCDEFEF二.填空题1.两个串相等的充分必要条件是。

2.空格串是①,其长度等于②。

3.模式串‘abaabade’的next函数值为。

4.在串S=’tuition’中,以t为首字符且值不相同的子串有个。

5. 使用“求子串”substring(S,pos,len)和“联接”concat(S1,S2)的串操作,可从串s=’conduction’中的字符得到串t=’cont’,则求t的串表达式为。

6. 已知字符串p=’abcabcabbac’,则next(3)和next(6)分别为①、②。

7. 设对主串’bcdbcddabcdbcdbac’和模式串’bcdbcdb’进行KMP模式匹配。

第1趟匹配失败后,若使用非改进的Next函数,则下一趟匹配将由主串的第①个字符与模式串的第__②___字符开始比较。

若采用改进的Next函数,则下一趟匹配将由主串的第③个字符与模式串的第___④__字符开始比较。

数据结构第四章 串


//把串S中符合T的子串替换
StrInsert (&S, pos, T)
//插入子串
StrDelete (&S, pos, len) //删除子串
9
第4章 串
4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法
10
4.2 串的表示和实现
4.2.1 定长顺序存储表示 4.2.2 堆分配存储表示 4.2.3 串的块链存储表示
串的连接算法
Status Concat(SString S1, SString S2, SString &T) { // 用T返回由S1和S2联接而成的新串。若未截断, 则返回 TRUE,否则FALSE if (S1[0]+S2[0] <= MAXSTRLEN) { //空间大,不用截断
T[1...S1[0]] = S1[1...S1[0]]; T[S1[0]+1…S1[0]+S2[0]] = S2[1…S2[0]]; T[0] = S1[0]+S2[0]; uncut = TRUE; }
Concat (&T, S1, S2) //连接串
StrEmpty (S)
//判断串是否空
8
4.1 串类型的定义
基本操作
SubString (&Sub, S, pos, len) //求子串
ClearString (&S)
//清空串S
Index (S, T, pos)
//子串定位
Replace (&S, T, V)
return OK; }
16
4.2 串的表示和实现
4.2.1 定长顺序存储表示 4.2.2 堆分配存储表示 4.2.3 串的块链存储表示
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档