第3章 线性结构-数组-串
《数据结构》填空作业题(答案)

《数据结构》填空作业题答案第 1 章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3.数据结构的形式定义为:数据结构是一个二元组:Data Structure =( D, S)。
4.数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5.数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6.在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7.在树形结构中,数据元素之间存在一对多的关系。
8.数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9.数据的逻辑结构包括线性结构、树形结构和图形结构 3 种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12.数据的存储结构可用 4 种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14.数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16.数据元素可由若干个数据项组成。
17.算法分析的两个主要方面是时间复杂度和空间复杂度。
18.一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19.算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
数据结构第三章字符串

串
子串:串中任意个连续的字符组成的子序列。 主串:包含子串的串。 子串的位置:子串的第一个字符在主串中的序号。
S1="ab12cd " S2="ab12" S3="ab13" S4="ab12φ" S5=" " S6="φφφ "
串
串的比较:通过组成串的字符之间的比较来进行的。
给定两个串:X="x1x2…xn"和Y="y1y2…ym",则: 1. 当n=m且x1=y1,…,xn=ym时,称X=Y; 2. 当下列条件之一成立时,称X<Y: ⑴ n<m且xi=yi(1≤ i≤n); ⑵存在k≤min(m,n),使得xi=yi(1≤i≤k-1)且xk<yk。 例:S1="ab12cd ",S2="ab12",S3="ab13"
串
例:主串S="ababcabcacbab",模式T="abcac"
i
第 4 趟
a b a b c a b c a c b a b a b c a c
j
i=4,j=1失败 i回溯到5,j回溯到1
Hale Waihona Puke 串例:主串S="ababcabcacbab",模式T="abcac"
i
第 5 趟
a b a b c a b c a c b a b a b c a c
为什么BF算法时间性能低?
在每趟匹配不成功时存在大量回溯,没有利用已经 部分匹配的结果。
如何在匹配不成功时主串不回溯?
主串不回溯,模式就需要向右滑动一段距离。
数据结构(C语言版)_第3章 串与数组

char data; struct lnode *next;
}lstring;
3.3.3 串的存储结构——链式存储结构
当结点大小>1时,可以采用块链结构。
#define CHUNKSIZE 100
/*可由用户定义块的大小*/
typedef struct Chunk
第三章 串与数组
本章要点
➢字符串的基本概念与基本运算 ➢字符串的存储和基本运算的实现 ➢数组的概念和基本运算 ➢数组的存储结构 ➢特殊矩阵的压缩存储及运算 ➢广义表的概念及相关术语 ➢广义表的存储形式
3.1 “文学研究助手”案例导入
“文学研究助手”引例:请从下面的英文文章里,统计其中 good出现的次数和位置,并查找单词the所在的行号,该行中出 现的次数以及在该行中的相应位置。
3.4.1 数组的定义
数组是n个具有相同类型的数据元素构成的有限序列,数组 中的数据是按顺序存储在一块地址连续的存储单元中。
数组中的每一个数据通常称为数组元素,数组元素用下标 区分,其中下标的个数由数组的维数决定。
若线性表中的数据元素为非结构的简单元素,则称为一维 数组,又称为向量;若一维数组中的数据元素又是一维数组结 构,则称为二维数组;依次类推,若二维数组中的元素又是一 个一维数组结构,则称作三维数组。
3.3.4 串的基本操作的实现算法
第二种顺序存储方式下几种基本操作的算法
算法1:串连接操作 算法2:串比较操作 算法3:取子串操作 算法4:串插入操作 算法5:串删除操作 算法6:串置换函数 算法7:子串定位操作
3.3.5 串的应用
【例3-1】设计一个算法求串s中出现的第1个最长重复子串 及其位置。
第三章 特殊线性表

(6)撤消动态申请空间Destroy(*head)
void Destroy(LSNode *head) { LSNode *p, *p1;
p = head;
while(p != NULL)
{ p1 = p;
p = p->next;
free(p1); }
}
3.2 堆栈应用
1、括号匹配问题
例:假设一个算术表达式中包含圆括号、方括号和花括号三种类型的括号, 编写一个判别表达式中括号是否正确配对的函数,并设计一个测试主函数。 算法思想: 算术表达式中右括号和左括号匹配的次序正好符合后到的括号要最先 被匹配的“后进先出”堆栈操作特点,因此可以借助一个堆栈来进行判断。 括号匹配共有四种情况: (1)左右括号配对次序不正确;(2)右括号多于左括号; (3)左括号多于右括号; (4)左右括号匹配正确。 具体方法:顺序扫描算术表达式(表现为一个字符串),当遇到三种类型 的左括号时让该括号进栈;当扫描到某一种类型的右括号时,比较当前栈 顶括号是否与之匹配,若匹配则退栈继续进行判断;若当前栈顶括号与当 前扫描的括号不相同,则左右括号配对次序不正确;若字符串当前为某种 类型左括号而堆栈已空,则右括号多于左括号;字符串循环扫描结束时, 若堆栈非空(即堆栈中尚有某种类型左括号),则说明左括号多于右括号; 否则,左右括号匹配正确。
中缀表达式变换为后缀表达式的算法步骤可以总结 为: (1)设置一个堆栈,初始时将栈顶元素置为“#”。 (2)顺序读入中缀表达式,当读到的单词为操作数时 就将其输出,并接着读下一个单词。 (3)令x1为当前栈顶运算符的变量,x2为当前扫描读 到运算符的变量,当顺序从中缀表达式中读入的单词为 运算符时就赋予x2,然后比较x1的优先级与x2的优先级, 若x1的优先级高于x2的优先级,将x1退栈并作为后缀表 达式的一个单词输出,然后接着比较新的栈顶运算符x1 的优先级与x2的优先级。
数据结构详细笔记

第1章绪论◆基本概念:数据、数据元素、数据对象、数据结构、数据类型、抽象数据类型。
数据——所有能被计算机识别、存储和处理的符号的集合。
数据元素——是数据的基本单位,具有完整确定的实际意义。
数据对象——具有相同性质的数据元素的集合,是数据的一个子集。
数据结构——是相互之间存在一种或多种特定关系的数据元素的集合,表示为:Data_Structure=(D, R)数据类型——是一个值的集合和定义在该值上的一组操作的总称。
抽象数据类型——由用户定义的一个数学模型与定义在该模型上的一组操作,它由基本的数据类型构成。
◆算法算法:是指解题方案的准确而完整的描述。
算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。
算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。
特征包括:(1)可行性;(2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性;(3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义;(4)拥有足够的情报。
算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。
指令系统:一个计算机系统能执行的所有指令的集合。
基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。
算法的控制结构:顺序结构、选择结构、循环结构。
算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。
算法复杂度:算法时间复杂度和算法空间复杂度。
算法时间复杂度是指执行算法所需要的计算工作量。
算法空间复杂度是指执行这个算法所需要的内存空间。
for ( i = 1 , i < = 10 , i++ ) x=x+c; =>O(1)for ( i = 1 , i < = n , i++ ) x=x+n; =>O(n)多嵌套一个for,则为=>O(n^2) 以此类推真题难点:i = 1,while(i < = n)i = i * 3;=>O(log3^n)i = i * 2;=>O(log2^n) 以此类推数据的逻辑结构有以下两大类:线性结构:有且仅有一个开始结点和一个终端结点,且所有结点都最多只有一个直接前驱和一个直接后继。
数据结构(C++版)第3章 特殊线性表

特殊线性表——栈
3.1.3 栈的链接存储结构及实现
链栈:栈的链接存储结构 first
a1
a2
ai
an ∧
将哪一端作为栈顶? 将链头作为栈顶,方便操作。 链栈需要加头结点吗? 链栈不需要附设头结点。
特殊线性表——栈
栈的链接存储结构及实现
链栈:栈的链接存储结构 first top an
栈顶
a1
a2 a1 ∧
Pop( );
an
an-1
a1 ∧
特殊线性表——栈
顺序栈和链栈的比较
时间性能:相同,都是常数时间O(1)。
空间性能: 顺序栈:有元素个数的限制和空间浪费的问题。 链栈:没有栈满的问题,只有当内存没有可用空间时才会 出现栈满,但是每个元素都需要一个指针域,从而产生了 结构性开销。 结论:当栈的使用过程中元素个数变化较大时,用链栈是适 宜的,反之,应该采用顺序栈。
两栈共享空间
两栈共享空间
0 1 2 ……
S-1
a 1 a2 … ai
栈1底
bj … … b2 b 1
top2
栈2底
top1
栈1的底固定在下标为0的一端; 栈2的底固定在下标为StackSize-1的一端。 top1和top2分别为栈1和栈2的栈顶指针; Stack_Size为整个数组空间的大小(图中用S表示);
an
an-1
p
a1 ∧ top++可以吗?
特殊线性表——栈
链栈的实现——链栈的析构(链栈的销毁)
template <class T> LinkStack<T>::~LinkStack( ) {
Node<T> *p;
数据结构作业题及答案

数据结构作业题及答案第一章绪论1、简述下列概念:数据、数据元素、数据结构、逻辑结构、存储结构、线性结构、非线性结构。
数据:指能够被计算机识别、存储和加工处理的信息载体。
数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。
数据元素有时可以由若干数据项组成。
数据结构:指的是数据之间的相互关系,即数据的组织形式。
一般包括三个方面的内容:数据的逻辑结构、存储结构和数据的运算。
逻辑结构:指各数据元素之间的逻辑关系。
存储结构:就是数据的逻辑结构用计算机语言的实现。
线性结构:数据逻辑结构中的一类,它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
线性表就是一个典型的线性结构。
非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋和直接后继。
2、常用的存储表示方法有哪几种?顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。
由此得到的存储表示称为顺序存储结构。
链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。
由此得到的存储表示称为链式存储结构。
索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。
散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
3、求解下列算法的时间复杂度(1)i=1;k=0 while(i<n){k=k+10*i;i++;}T(n)=n-1∴T(n)=O(n)这个函数是按线性阶递增的(2)i=0;k=0;do{k=k+10*i;i++;} while(i<n);T(n)=n∴T(n)=O(n)这也是线性阶递增的(3)i=1;j=0;while(i+j<=n) {if(i<j)j++; else i++;}T(n)=n/2∴T(n)=O(n)虽然时间函数是n/2,但其数量级仍是按线性阶递增的。
《数据结构》填空作业题(答案)

《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3. 数据结构的形式定义为:数据结构是一个二元组:Data Structure =(D,S)。
4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7. 在树形结构中,数据元素之间存在一对多的关系。
8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9. 数据的逻辑结构包括线性结构、树形结构和图形结构3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16. 数据元素可由若干个数据项组成。
17. 算法分析的两个主要方面是时间复杂度和空间复杂度。
18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3)、联接 char *strcat(char *to,char *from); //将from串复制到to串的末尾,并返回to串开始处 的指针 【例】 strcat(s3,"\"); //s3="d:\datastruture\" strcat(s3,s2); //s3="d:\datastruture\string.c"
对于三角矩阵的压缩存储于上述相似。
5、稀疏矩阵的压缩存储
• 稀疏矩阵
设矩阵Amn中有t个非零元素,若t远远小于矩阵元 素的总数(即t<<m×n),则称A为稀疏矩阵。 • 三元组表 将表示稀疏矩阵的非零元素的三元组按行优先(或列优 先)的顺序排列(跳过零元素),并依次存放在向量中,这种 稀疏矩阵的顺序存储结构称为三元组表。 为了表示唯一性,除了每一个非零元素用一个三元组 表示外,在所有表示非零元素的三元组之前再添加一个三 元组:(I,J,t) 其中I表示稀疏矩阵的总行数,J表示稀疏矩阵的总列 数,t表示稀疏矩阵中非零元素的个数。
3.5 其他线性结构 -----数组和串
1、 数组的定义
• 是线性表在含义上的扩展:表中的数据元 素本身也是一个数据结构。 • 是一种复杂的非线性结构,它们的逻辑特
征是:一个数据元素可能有多个直接前驱
和多个直接后继。
2、二维数组
二维数组Am,n可视为由m个行向量组成的向量,或由n个 列向量组成的向量。
4、矩阵的压缩存储
• 矩阵中非零元素呈某种规律分布或者矩阵中出 现大量的零元素的情况下,为了节省存储空间, 我们可以对这类矩阵进行压缩存储:
A、即为多个相同的非零元素只分配一个存储空间; B、对零元素不分配空间。
4、矩阵的压缩存储
一)、特殊矩阵 指非零元素或零元素的分布有一定规律的 矩阵。常见的有对称矩阵、三角矩阵和对角矩 阵等。
4、矩阵的压缩存储
(1)对称矩阵
在一个n阶方阵A中,若元素满足下述性质: aij=aji (i≥0,j≤n-1) 则称A为对称矩阵。
4、矩阵的压缩存储
(2)对称矩阵的压缩存储 对称矩阵中的元素关于主对角线对称,故只要 存储矩阵中上三角或下三角中的元素,让每两个对 称的元素共享一个存储空间。这样,则可将n2个元素 压缩存储到n(n+1)/2个单元中,大致能够节约近一 半的存储空间。
6、 串(String)的基本概念
• 子串和主串 串中任意个连续字符组成的子序列称为该串的子串。 包含子串的串相应地称为主串。 通常将子串在主串中首次出现时,该子串首字符对应 的主串中的序号定义为子串在主串中的序号(或位置)。 【例】设A和B分别为 A="This is a string" B="is" 则B是A的子串,B在A中出现了两次。其中首次出现 对应的主串位置是3。因此称B在A中的序号(或位置)是3。 注意: ①空串是任意串的子串; ②任意串是其自身的子串。
下面以C语言中串运算介绍串的基本运算。
1)、求串长 int strlen(char *s);//求串s的长度 【例】 printf("%d",strlen(s1)); //输出s1的串长15
2)、串复制 char strcpy(char *to, char *from); // 将from串复制到to串中,并返回to开始处的指针 【例】 strcpy(s3,s1); // s3="d:\datastruture",s1串不变
aij
a00 a10 a11 a20 a21 a22 a30
……
a42 a43 a44
5 0 12 11 13 8 7 21 4 1 9 11 6 10 23
0 1 2
……
sk
n(n+1)/2
4、矩阵的压缩存储
• 二维数组aij与一维数组sk之间存在着一一对应 的关系:(行主序、下三角存储方式)
下标以0开始
4)、串比较 int strcmp(char *s1,char *s2); //比较s1和s2的大小,当s1<s2、s1>s2和s1=s2 时, //分别返回小于0、大于0和等于0的值; 【例】 result=strcmp("baker","Baker"); //result>0 result=strcmp("12","12"); //result=0 result=strcmp("Joe","joseph") //result<0
作 业
• 写程序综合以上串的基本操作,调试并 运行得出结果
小结
1. 线性结构的逻辑特征是什么? 2. 顺序表的表长如何计算?动态链表如何 定位? 3. 堆栈和队列各具备什么特性?为什么? 4. 队列什么时候会出现“假溢出”现象? 怎么解决? 5. 二维数组的存储机制是什么?什么时候 采用压缩存储,要注意些什么? 6. 串是特殊的线性表结构,为什么特殊?
【例】左所示的稀疏矩阵A的三元组表示见右 表格。
4 0 2 2 3 5 2 0 4 2 4 12 3 70 51
6、串(String)的基本概念
• 串是一种特殊的线性表,是零个或多个字符组成的有限序 列。一般记为: S=“a0a1……an-1” 其中: ①S是串名; ②双引号括起的字符序列是串值; ③将串值括起来的双引号本身不属于串,它的作用是避 免串与常数或与标识符混淆。 【例】“123”是数字字符串,它不同于整常数123; 【例】“xl”是长度为2的字符串。 ④ai(0≤i≤n-1)可以是字母、数字或其它字符; ⑤串中所包含的字符个数称为该串的长度。
3、数组的顺序表示和实现
2)以列序为主序
将数组元素按列向量排列,第j+1个列向量 紧接在第j个列向量后面。
【例】二维数组Am,n的按列优先存储的线性序列为: a00,a10,…,am-1,0,a01,a11,…,am1,1,…,a0,n-1, a1,n-1,…,am-1,n-1; LOC[aij]=LOC[a00]+(m*j+i)*S
5)、字符定位 char *strchr(char *s,char c); //找c在字符串s中第一次出现的位置, //若找到,则返回该位置,否则返回NULL 【例】 p=strchr(s2,'.'); //p指向"string"之后的位置. 注意: ①上述操作是最基本的,其中后 3个操作还有变种 形式:strncpy,strncat,strncmp和strstr。 ②其它的串操作见C的<string.h>。在不同的高级语 言中,对串运算的种类及符号都不尽相同 ③其余的串操作一般可由这些基本操作组合而成
7、串的基本运算
对于串的基本运算,很多高级语言均提供相应的运算 符或标准的库函数来实现。 为叙述方便,先定义几个相关的变量: char s1[20]="d:\datastruture"; char s2[20]="string.c"; char s3[30]; char *p; int result;
二维数组中的每个元素aij既属于第i行的行向量,又属于第j 列的列向量。
3、数组的顺序表示和实现
1)以行序为主序 将数组元素按行向量排列,第i+1个行向量紧接在第i 个行向量后面。
【例】二维数组Am,n的按行优先存储的线性序列为: a00,a01,…,a0,n-1,a10,a11,…,a1,n-1,…,am1,0,am-1,1,…,am-1,n-1; 元素aij的存储位置: LOC[aij]=LOC[a00]+(n*i+j)*S 每个数据元素占S个存储单元 ; LOC[a00]是a00的位置,也称基地址;