《数据结构(C++版)(第二版)》第04章

合集下载

严蔚敏《数据结构(c语言版)习题集》答案第四章 串

严蔚敏《数据结构(c语言版)习题集》答案第四章 串
《一定能摸到红球吗?》说课稿
林银花
一、教材说明:
1、 课题:《一定能摸到红球吗?》
2、 本节内容的地位和作用
在现代社会中,人们面临着更多的机会和选择,常常需要在不确定情境中作出合理的决策,概率正是通过对不确定现象和事件发生的可能性的刻画,来为人们更好的制定决策提供依据和建议.本节内容又是义务教育阶段,唯一培养学生从不确定的角度来观察世界的数学内容,让学生了解可能性是普遍的,有助于他们理解社会,适应生活.
(1) 每位同学从盒子中轮流摸球,记录下所摸球的颜色,并将球放回盒中.
(2) 做10次这样的活动,将最终结果填在表中.
(3) 全班将各小组活动进行汇总,摸到红球的次数是多少?摸到黄球的次数是多少?他们各占总数的百分比是多少?
(4) 你认为哪种颜色的球多?打开看一看.
(5) 如果从盒中任意摸出一球,你认为摸到哪种颜色的球可能性大? 学生阅读学习目标.
学生两人一组进行活动.一人摸一人记录.并交流.
题(1):学生先想象后画图,并通过搭建几何体验证学习成果。
题(2):学生四人一组进行活动,一人搭几何体,另三人画图并交流,如有异义,举手询问。依次轮流。 使学生明确学习目标,进入学习角色,做到有的放矢。
目的是使学生体会到进行概率试验时,一定要保证随机性.
课堂组织策略:创设贴近学生生活,生动有趣的问题情境,开展活泼、主动、有效的数学活动,组织学生主动参与、勤于动手、积极思考,使他们在自主探索和合作交流的过程中真正理解和掌握概率有关内容。
学生学习策略:明确学习目标,了解所需掌握的知识,在教师的组织、引导、点拨下主动地从事观察、试验、猜测、验证与交流等数学活动,从而真正有效地理解和掌握知识。
(3)、情感目标:

数据结构第四章考试题库(含答案)

数据结构第四章考试题库(含答案)

第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的?()【北方交通大学 2001 一、5(2分)】A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储2 若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,i ndex(S2,‘8’),length(S2))) 其结果为()【北方交通大学 1999 一、5 (25/7分)】A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345E.ABC###G1234 F.ABCD###1234 G.ABC###012343.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长【北京邮电大学 2000 二、4(20/8分)】【西安电子科技大学 1996 一、1 (2分)】4.已知串S=‘aaab’,其Next数组值为()。

【西安电子科技大学 1996 一、7 (2分)】A.0123 B.1123 C.1231 D.12115.串‘ababaaababaa’的next数组为()。

【中山大学 1999 一、7】A.9 B.2 C.6 D.456.字符串‘ababaabab’的nextval 为()A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )【北京邮电大学 1999 一、1(2分)】7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(),nextval数组的值为()。

数据结构(第二版)习题答案第4章

数据结构(第二版)习题答案第4章
printf("input char to s2:\n");
gets(s2.str);
s2.length=strlen(s2.str);
m=strcompare(s1,s2);
if(m==1) printf("s1>s2\n");
else if(m==-1) printf("s2>s1\n");
free(S);
free(T1);
free(T2);
}
【参考程序
2】:
#include<stdio.h>
#define MAXSIZE 100
typedef struct{
char str[MAXSIZE];
int length;
}seqstring;
for(k=0;k<t2.length;k++)
s->str[c+k]=t2.str[k];
else if(t1.length<t2.length)
{ for(m=s->length-1;m>i-1;m--)
s->str[t2.length-t1.length+m]=s->str[m]; //后移留空
while (i<t->length && j<p->length)
{
if(j==-1||t->str[i]==p->str[j])
{i++; j++;}
else j=next[j];
}
if (j==p->length) return (i-p->length);

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (42)第7章查找 (54)第8章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。

如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。

数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。

在有些情况下,数据元素也称为元素、结点、记录等。

数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。

数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。

例如,学生基本信息表中的学号、姓名、性别等都是数据项。

数据对象:是性质相同的数据元素的集合,是数据的一个子集。

例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

存储结构:数据对象在计算机中的存储表示,也称为物理结构。

抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。

具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

数据结构 (C语言版) (第二版)(目录)

数据结构 (C语言版) (第二版)(目录)

数据结构(C语言版)(第二版)(目录)第1章导论
1 算法和数据结构
2 什么是数据结构
3 符号,引理,定理与证明
4 说明文篇
5 C语言和程序设计
6 总结
第2章算法分析
1 算法的衡量标准
2 时间和空间复杂度分析
3 运行时复杂度分析
4 递归分析
第3章线性表
1 一维数组
2 线性表
3 顺序表
4 链表
5 循环链表
6 树表
7 双向链表
第4章栈
1 栈的定义
2 栈的抽象数据类型
3 栈的基本操作
4 栈的应用——后缀表达式的求算
第7章树
1 树的定义
2 树的抽象数据类型
3 树的存储
4 树的遍历
5 二叉树
6 二叉排序树(搜索树)
7 平衡二叉树
8 哈夫曼树
9 图的存储
第8章查找
1 静态查找
2 哈希表
3 动态单值查找
第10章数据结构综合应用
1 树的遍历
2 贪心法
3 回溯法
4 分析与评价
附录 A C语言库
1 算法入口及时区函数
2 内存处理函数
3 字符串处理函数
4 文件处理函数
附录 B 内存分配方式。

数据结构授课教案-第4章

数据结构授课教案-第4章
分钟
教学手段
板书、课件
总结
分钟
备注
共2学时
注:课型一栏填写理论课、实验课、习题课等
授课内容
备注
第四章串
4.1串类型的定义
一、串的基本概念
串(String)是零个或多个字符组成的有限序列。
一般记为:S=‘a1a2…an’ (n≥0)
其中S为串名,用单引号括起来的为串值,n为串的长度。
空串(Null String):n=0时的串为空串
len>s.length-pos+1)
return error;
if(sub.ch) free(sub.ch);
if(!len){
sub.ch=null;
sub.length=0;
}
else{
sub.ch=(char *)malloc(len*sizeof(char));
sub.ch[0..len-1]=s[pos-1..pos+len-2];
t.length=s1.length+s2.length;
t.ch[s1.length..t.length-1]=s2.ch[0..s2.length-1];
}
Statussubstr(hstringsub,hstrings,intpos,intlen){
if(pos<1 || pos>s.length||len<0 ||
空格串(Blank string):由一个或多个称为空格的特殊字符组成的串。
请注意空串(Null String)和空格串(Blank string)的区别。
子串:串中任意个连续的字符组成的子序列称为该串的子串。主串:包含子串的串相应地称为主串。通常将字符在串中的序号称为该字符在串中的位置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。

《数据结构(C语言版 第2版)》(严蔚敏 著)第四章练习题答案

《数据结构(C语言版 第2版)》(严蔚敏 著)第四章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第四章练习题答案第4章串、数组和广义表1.选择题(1)串是一种特殊的线性表,其特殊性体现在()。

A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符若答案:B(2)串下面关于串的的叙述中,()是不正确的?A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储答案:B解释:空格常常是串的字符集合中的一个元素,有一个或多个空格组成的串成为空格串,零个字符的串成为空串,其长度为零。

(3)串“ababaaababaa”的next数组为()。

A.012345678999 B.012121111212 C.011234223456 D.0123012322345答案:C(4)串“ababaabab”的nextval为()。

A.010104101B.010102101 C.010100011 D.010101011答案:A(5)串的长度是指()。

A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数答案:B解释:串中字符的数目称为串的长度。

(6)假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()。

A.808 B.818 C.1010 D.1020答案:B解释:以行序为主,则LOC[5,5]=[(5-1)*100+(5-1)]*2+10=818。

(7)设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。

A.BA+141 B.BA+180 C.BA+222 D.BA+225答案:B解释:以列序为主,则LOC[5,8]=[(8-1)*8+(5-1)]*3+BA=BA+180。

数据结构(C++版)(第二版) 第04章

数据结构(C++版)(第二版)  第04章

7.串删除del(&S,i,j)
删除串S中从第i个字符开始连续j个字符。
8.求子串位置index(S,T)
求T子串在S主串中首次出现的位置,若T串不是S串的子串,则得到的位置为-1 (若在顺序存储中,数组的下标从1开始,则T串不是S串的子串时,得到的位置 为0)。
9.串替换replace(&S,i,j,T)
2.空串
不含任何字符的串称为空串,它的长度n=0,记为s=“”。
3.空白串
含有一个空格的串,称为空白串,它的长度n=1,记为s=“ ” 或s=“ø”。
2019年3月9日
2
4.子串、主串
若一个串是另一个串中连续的一段,则这个串称为另一个串的子串,而另一个串相 对于该串称为主串。例如,串s1=“abcdefg”,s2=“fabcdefghxyz”,则s1为s2的子 串,s2相对于s1为主串。 另外,空串是任意串的子串,任意串是自身的子串。 若一个串的长度为n,则它的子串数目为 n(n 1) 1 ,真子串个数为 (除串本身以外的子串都称为真子串)。 2
将S串中从第i个位置开始连续j个字符,用T串替换。
2019年3月9日
4
4.1.3 串的抽象数据类型描述
串的抽象数据类型可描述为:
ADT strings IS Data:含有n个字符a1,a2,a3,…,an Operation: void assign(&S,T) //表示将T串的值赋给S串 void concat(&S,T) //表示将S串和T串联接起来,使T串接入S 串的后面 int length(T) //求T串的长度 void substr(S,i,j,&T) //表示截取S串中从第i个字符开始连续j个字符,作为 S的一个子串,存入T串中 int strcmp(S,T) //比较S串和T串的大小,若S<T,函数值为负,S=T, 函数值为零,S>T,函数值为正 void insert(&S,i,T) //在S串的第i个位置插入T串 void del(&S,i,j) //删除串S中从第i个字符开始连续j个字符 int index(S,T) //求T子串在S主串中首次出现的位置,若T串不是S 串的子串,则位置为零 void replace(&S,i,j,T) //将S串中从第i个位置开始连续j个字符,用 T串替换 End strings
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.带末指针的名字表
在表中给出串的名字、头指针及末指针,具体形式见图4-7。
S 1 a S 2 b c d e f g b c d
图4-7 带末指针的名字表 从图4-7可知,两个串的名字分别为S1和S2,而S1的头指针指向a,末指 针指向g,故有S1=“abcdefg”,而S2的头指针指向g,末指针指向c,故有 S2=“gbc”。
4.子串substr(S,i,j,&T)
表示截取S串中从第i个字符开始连续j个字符,作为S的一个子串,存入T串。
5.串比较大小strcmp(S,T)
比较S串和T串的大小,若S<T,函数值为负;若S=T,函数值为零;若S>T,函数 值为正。
6.串插入insert(&S,i,T)
在S串的第i个位置插入T串。
2.串的紧缩存储
根据各机器字的长度,尽可能将多个字符存放在一个字中。假设一个字可存储4 个字符,则紧缩存储具体形式见图4-2。
2010年8月26日
6
H
H
o
w
o
d
o
y
w
o
u
d
d
o
o
y
o
u
d
o
图4-1 S串的非紧缩存储
2010年8月26日
图4-2 S串的紧缩存储(设一个字 有4个字符位置)
7
从上面介绍的两种存储方式可知,紧缩存储能够节省大量存储单元,但对串的单个 字符操作很不方便,需要花费较多的处理时间。而非紧缩存储的特点刚好相反,操 作方便,但将占用较多的内存单元。
2010年8月26日
12
(2)结点大小为k(k=4)的链串
具体描述形式见图4-5。数据类型描述为: class link 4 {public: char data [5]; // 仅使用data[1] 到data[4]存储空间 link4 * next ; };
2010年8月26日
13
4.2.3 索引存储
S
a
b
c
d
e
f ^
图4-4 S串的链式存储示意图
2010年8月26日
10
2.结点大小为K的链式存储
和紧缩存储类似,假设一个字中可以存储K个字符,则一个结点有K个数据域和一 个指针域,若一个结点中数据域少于K个,用代替。例如,串S=“abcdef ”的存储 结构具体形式如图4-5所示。假设K=4,并且链表带头结点。
2010年8月26日 17
4.3.2 串删除
1.顺序串的删除del(&S,i,j)
删除S串中从第i个位置开始连续j个字符,可以分成三种情形讨论:(1)若i值不在串 长度范围内,不能删除;(2)从i位置开始到最后的字符数目不足j个,删除时,不 需移动元素,只需修改串长度即可;(3)i和j都可以满足需求。算法描述如下: void seqstring:: delete (seqstring &s, int i , int j ) { if (( i<0)||( i>=s.curlen )) cout <<"error"; // i值不在串值范围内,不能删除 else if ( s.curlen -i+1<j ) s.curlen =i-1; //从i位置开始到最后的字符数目不足j个,删除时 //不需移动元素,只修改串长度即可 else { for (int k=i+j; k<=s.curlen ;k++) s.ch [k-j]= s.ch [k]; //元素前移j位 s.curlen =s.curlen –j ; //表长度减j } } 该算法的时间复杂度为O(n)。
n(n + 1) 2
4.1.2 串的运算
为描述方便,假定用大写字母表示串名,小写字母表示组成串的字符。
1.赋值assign(&S,T)
表示将T串的值赋给S串。
2.联接concat(&S,T)
表示将S串和T串联接起来,使T串接入S串的后面。
3.求串长度length(T)
求T串的长度。
2010年8月26日 3
该方法是用串变量的名字作为关键字组织名字表(索引表),该表中存储的是串名和 串值之间的对应关系。名字表中包含的项目根据不同的需要来设置,只要为存取串值 提供足够的信息即可。如果串值是以链接方式存储的,则名字表中只要存入串名及其 串值的链表的头指针即可。若串值是以顺序方式存放的,则表中除了存入指示串值存 放的起始地址首指针外,还必须有信息指出串值存放的末地址。末地址的表示方法有 几种:给出串长、在串值末尾设置结束符、设置尾指针直接指向串值末地址等。具体 介绍下面两种:
2010年8月26日 5
4.2 串的存储结构
4.2.1 顺序存储)类 似。但由于串中的元素全部为字符,故顺序串的存放形式与顺序表有所区别。
1.串的非紧缩存储
一个存储单元中只存储一个字符,和顺序表中一个元素占用一个存储单元类似。 具体形式见图4-1,设串S=“How do you do”。
第4章 串 章
本章学习内容 4.1 串的定义及运算 4.2 串的存储结构 4.3 串运算的实现 4.4 串操作应用举例
2010年8月26日
1
4.1 串的定义及运算
4.1.1 基本概念
1.串的定义
串(string)是由零个或多个字符组成的有限序列,记作s=“a1a2…an”,其中s为 串的名字,用成对的双引号括起来的字符序列为串的值,但两边的双引号不算串 值,不包含在串中。ai(1≤i≤n)可以是字母、数字或其他字符。n为串中字符的 个数,称为串的长度。 串s=“a1a2…an”,也可以表示为s=(a1,a2,…,an),即线性表的形式。因此,串也 是一种线性表,是一种数据类型受到限制(只能为字符型)的线性表。
2.空串
不含任何字符的串称为空串,它的长度n=0,记为s=“”。
3.空白串
含有一个空格的串,称为空白串,它的长度n=1,记为s=“ ” 或s=“”。
2010年8月26日
2
4.子串、主串
若一个串是另一个串中连续的一段,则这个串称为另一个串的子串,而另一个串相 对于该串称为主串。例如,串s1=“abcdefg”,s2=“fabcdefghxyz”,则s1为s2的子 串,s2相对于s1为主串。 另外,空串是任意串的子串,任意串是自身的子串。 若一个串的长度为n,则它的子串数目为 n(n + 1) + 1 ,真子串个数为 (除串本身以外的子串都称为真子串)。 2
7.串删除del(&S,i,j)
删除串S中从第i个字符开始连续j个字符。
8.求子串位置index(S,T)
求T子串在S主串中首次出现的位置,若T串不是S串的子串,则得到的位置为-1 (若在顺序存储中,数组的下标从1开始,则T串不是S串的子串时,得到的位置 为0)。
9.串替换replace(&S,i,j,T)
将S串中从第i个位置开始连续j个字符,用T串替换。
2010年8月26日
4
4.1.3 串的抽象数据类型描述
串的抽象数据类型可描述为:
ADT strings IS Data:含有n个字符a1,a2,a3,…,an Operation: void assign(&S,T) //表示将T串的值赋给S串 void concat(&S,T) //表示将S串和T串联接起来,使T串接入S 串的后面 int length(T) //求T串的长度 void substr(S,i,j,&T) //表示截取S串中从第i个字符开始连续j个字符,作为 S的一个子串,存入T串中 int strcmp(S,T) //比较S串和T串的大小,若S<T,函数值为负,S=T, 函数值为零,S>T,函数值为正 void insert(&S,i,T) //在S串的第i个位置插入T串 void del(&S,i,j) //删除串S中从第i个字符开始连续j个字符 int index(S,T) //求T子串在S主串中首次出现的位置,若T串不是S 串的子串,则位置为零 void replace(&S,i,j,T) //将S串中从第i个位置开始连续j个字符,用 T串替换 End strings
2010年8月26日
15
4.3 串运算的实现
1.顺序串上的插入insert(&S,i,T)
要将T串插入到S串中第i个位置,则S串中第i个位置开始,一直到最后的字符,每 个都要向后移动若干位,移动的位数为T串长度。算法描述如下: void seqstring ::Insert (seqstring &S, int i, seqstring T) { if ( S.curlen + T.curlen>=maxsize) cout<<"overflow"; else { for (int j=S.curlen-1; j>=i ; j--) S. ch[j+T.curlen]=s.ch[j]; //元素后移 T.curlen位 for (j=0; j<T.curlen; j++) S. ch [j+i]=T.ch[j]; //插入元素T到S 中 S.curlen=S.curlen +T.curlen; //表长度增加 } } 设n为S串长度,m为T串长度,则该算法的时间复杂度为O(n+m)。
//存放串的值的一维数组 //当前串的长度 //类中的成员函数
2010年8月26日
9
4.2.2 链式存储
串的链式存储结构,也称为链串,与第2章介绍的链表(线性表的链式存储)类 似,但链串的特点是链表中的结点数据域只能是字符型。
1.结点大小为1的链式存储
相关文档
最新文档