数据结构串B
专升本《数据结构》
专升本《数据结构》专升本《数据结构》一、〔共 75 题,共 150 分〕1. 数据的逻辑结构是由〔〕局部组成的。
〔2 分〕 A.2 B.3 C.4 D.5标准答案: A2. 算法是对某一类问题求解步骤的有限序列,并具有〔〕个特性。
〔2 分〕A.3B.4C.5D.6标准答案: C3. 队列的入队操作是在〔〕进行的。
〔2 分〕 A.队头 B.队尾 C.任意位置 D. 指定位置标准答案: B4. 队列的出队操作是在〔〕进行的。
〔2 分〕 A.队头 B.队尾 C.任意位置 D. 指定位置标准答案: A5. 数组通常采用顺序存储的优点是〔〕。
〔2 分〕 A.便于增加存储空间 B. 便于依据下标进行随机存取 C.防止数据元素的挪移 D.防止下标溢出标准答案: B6. 以下给出的操作中,〔〕是允许对队列进行的操作。
〔2 分〕 A.删除队首元素 B.取出最近进队的元素 C.按元素大小排序 D.中间插入元素标准答案: A7. 采用带头结点的单链表存储的线性表,假设表长为 n,在删除第号元素时,需要挪移指针〔〕次。
〔 2 分〕A.k+1B.kC.k-1D.k-2标准答案: C8. 字符数组 a[1..100]采用顺序存储, a[6]地址是 517,那末 a 的首地址为〔〕。
〔2 分〕 A.510 B.512 C.514 D.516标准答案: B9. 深度为 n 的彻底二叉树最多有〔〕个结点。
〔2 分〕 A.2n+1 B.2n-1 C.2nD.2n-1标准答案: D10. 假设二叉树对应的二叉链表共有 n 个非空链域,那末该二叉树有〔〕个结点的二叉树。
〔2 分〕 A.n-1 B.n C.n+1 D.2n标准答案: A11. 下面表达错误的选项是〔〕。
〔2 分〕 A.借助于队列可以实现对图的广度优先遍历 B.二叉树中序遍历的序列是有序 C.惟独一个结点的二叉树的度为D.空格串是指由 1 个或者以上的空格符号组成的串标准答案: B12. 以下与数据的存储结构无关的术语是〔〕。
915数据结构b考研大纲
915数据结构b考研大纲
数据结构是计算机科学与技术专业的重要课程之一,也是考研
复试中的重要科目。
根据我所了解的信息,考研数据结构B的大纲
主要包括以下内容:
1. 线性表,顺序表、链表、栈、队列等基本数据结构的定义、
实现和应用。
2. 树与二叉树,树的基本概念、二叉树的遍历、线索二叉树、
树与森林等相关知识。
3. 图,图的基本概念、图的存储结构、图的遍历、最小生成树、最短路径等相关算法。
4. 排序算法,各种排序算法的原理、实现和比较。
5. 查找算法,顺序查找、二分查找、哈希查找等相关算法的原
理和应用。
6. 字符串匹配算法,暴力匹配、KMP算法、Boyer-Moore算法
等字符串匹配算法的原理和实现。
除了以上基本内容,考研数据结构B的大纲还涉及到一些高级内容,如平衡二叉树、B树、红黑树、图的最小生成树算法(Prim 算法、Kruskal算法)、图的最短路径算法(Dijkstra算法、Floyd 算法)等。
学生在备考期间需要深入理解这些内容,并且能够熟练运用到实际问题中。
总的来说,考研数据结构B的大纲涵盖了数据结构的基本理论知识和常见算法的实现,考生需要通过系统学习和练习,掌握这些知识点,为顺利通过考试打下坚实的基础。
希望我的回答能够帮助到你。
数据结构智慧树知到答案章节测试2023年甘肃财贸职业学院
第一章测试1.算法的时间复杂度取决于()A:待处理数据的初态B:问题的规模C:前两个都是D:其它三项均是答案:B2.计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备具备输入、输出和()等5个特性。
A:可行性、确定性和有穷性B:易读性、稳定性和安全性C:可行性、可移植性和可扩充性D:确定性、有穷性和稳定性答案:A3.从逻辑上可以把数据结构分为()两大类。
A:线性结构、非线性结构B:动态结构、静态结构C:初等结构、构造型结构D:顺序结构、链式结构答案:D4.算法可以用不同的语言描述,如果用C 语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。
()A:对B:错答案:A5.数据的逻辑结构是指数据的各数据项之间的逻辑关系。
()A:对B:错答案:B第二章测试1.若线性表采用顺序存储结构,每个元素占用4个存储单元,第1个元素的存储地址为100,则第15个元素的存储地址是()。
A:160B:156C:415D:154答案:D2.若长度为n的非空线性表采用顺序存储结构,删除表中第i个数据元素,i的合法值应该是()。
A:1≤i≤nB:i≤nC:1≤i≤n+1D:i>0答案:A3.在一个具有n个结点的有序线性链表中插入一个新结点,使得链表仍然保持有序,则该操作的时间复杂度为()。
A:O(n)B:O(log2n)C:O(n2)D:O(1)答案:A4.在程序设计中,通常用数组来描述线性表的顺序存储结构。
()A:对B:错答案:A5.在链式存储结构中,所有结点必然占用一片连续的存储区域。
()A:错B:对答案:A第三章测试1.递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。
A:线性表B:队列C:多维数组D:栈答案:D2.如果以链表作为栈的存储结构,则退栈操作时()。
A:必须判别栈是否空B:必须判别栈是否满C:对栈不作任何判别D:判别栈元素的类型答案:A3.一个队列的入列序是1,2,3,4,则队列的输出系列是()。
数据结构(C语言版)选择、填空题
数据结构(C语言版)选择、填空题一概论选择1、( B)是数据的基本单位。
A、数据结构B、数据元素C、数据项D、数据类型2、以下说法不正确的是(A )。
A、数据结构就是数据之间的逻辑结构。
B、数据类型可看成是程序设计语言中已实现的数据结构。
C、数据项是组成数据元素的最小标识单位。
D、数据的抽象运算不依赖具体的存储结构。
3、学习数据结构主要目的是(C )。
A、处理数值计算问题B、研究程序设计技巧C、选取合适数据结构,写出更有效的算法。
D、是计算机硬件课程的基础。
4、一般而言,最适合描述算法的语言是( C)。
A、自然语言B、计算机程序语言C、介于自然语言和程序设计语言之间的伪语言D、数学公式5、通常所说的时间复杂度指(B )。
A、语句的频度和B、算法的时间消耗C、渐近时间复杂度D、最坏时间复杂度6、A算法的时间复杂度为O(n^3),B算法的时间复杂度为O(2^n),则说明(B )。
A、对于任何数据量,A算法的时间开销都比B算法小B、随着问题规模n的增大,A算法比B算法有效C、随着问题规模n的增大,B算法比A算法有效D、对于任何数据量,B算法的时间开销都比A算法小填空1、数据的(存储)结构依赖于计算机语言.2、数据的逻辑结构可分为线性结构和(非线性)结构。
3、算法的时间复杂度与问题的规模有关外,还与输入实例的(初始状态)有关。
4、常用的四种存储方法是什么?顺序存储方法、链式存储方法、索引存储方法和散列存储方法5、常见的数据的逻辑结构有哪两种?线性结构和逻辑结构6、一般,将算法求解问题的输入量称为(问题的规模)。
二线性表选择题1、以下关于线性表的说法不正确的是( C)。
A、线性表中的数据元素可以是数字、字符、记录等不同类型。
B、线性表中包含的数据元素个数不是任意的。
C、线性表中的每个结点都有且只有一个直接前趋和直接后继。
D、存在这样的线性表:表中各结点都没有直接前趋和直接后继。
2、线性表的顺序存储结构是一种( A)的存储结构。
数据结构串和数组的习题答案
补充习题:
8.存取数组中任一元素的时间都是相等的,这种存取方式为 ( )存取方式。
A)顺序 B)随机 C)线性 D)非线性 9.设一个一维数组第一个元素的存储单元的地址是100,每 个元素的长度是6,则它的第5个元素的地址是( )。 A)130 B)105 C)106 D)124 10.设n阶方阵是一个上三角矩阵,则需要存储的元素个数是 ( )。 A)n2/2 B)n(n+1)/2 C)n D)n2 11.对一些特殊矩阵采用压缩存储的目的主要是为( )。
{
temp=strstr(s,t); //返回t在s中第一次出现的指针 while(temp) { n=strlen(s)-strlen(temp); strncpy(head,s,n); tail=temp+strlen(t); strcat(head,tail); //把head,tail连接为新串 s=head; temp=strstr(s,t); }
(3,1,5),(3,2,-1),(4,5,4),(5,1,-3),则其转置矩阵的三元 组表中第3个三元组为( )。
A) (2,1,3)
C) (3,2,-1)
B) (3,1,5)
D) (2,3,-1)
14.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素 的行下标和列下标互换,就完成了对该矩阵的转置运算,这 种观点( ) A)正确 B)不正确
}
}
习题5.6:
解:(1) (2) (3) (4) 6*8*6 1000+(5*8+7)*6 1000+(1*8+4)*6 1000+(7*6+4)*6
习题5.9:
解: u=i-j+1 v=j-1
数据结构栈和队列B
5
front
rear
问3: 在具有n个单元的循 环队列中,队满时共有多少 个元素? N-1个
3.2 队列
20
循环队列:
队列存放数组被当作首尾相接的表处理。
队头、队尾指针加1时从maxSize -1直接进到0,可用语言的取 模(余数)运算实现。
队空: 队满: 入队: 出队: 求队长:
Q.front =Q. rear Q.front =(Q.rear + 1) % maxSize Q.rear = (Q.rear + 1) % maxSize Q.front = (front + 1) % maxSize; (Q.rear-Q.front+maxSize)%maxSize
rear
M-1 0 1
实现:利用“模”运算 入队:rear=(rear+1)%M; sq[rear]=x; 出队:front=(front+1)%M; x=sq[front]; 队满、队空判定条件
front
循环队列示意图:
假上溢的解决办法 把顺序队列看成首尾相接的环(钟表)-循环队列 基本操作的实现
队空条件 : front = rear (初始化时:front = rear ) 队满条件: front = (rear+1) % N (N=maxsize) 队列长度(即数据元素个数):L=(N+rear-front)% N
6 问1:左图中队列maxsize N=?
J2 J1 J3
问2:左图中队列长度L=?
链队列类型定义: typedef struct { QueuePtr front ; //队首指针 QueuePtr rear ; //队尾指针 } LinkQueue;
数据结构:串期末单元测试与答案
一、单选题1、串是一种特殊的线性表,其特殊性体现在()。
A.数据元素可以是多个字符串B.数据元素是一个字符C.可以顺序存储D.可以链式存储正确答案:B2、串下面关于串的的叙述中,()是不正确的?A.串既可以采用顺序存储,也可以采用链式存储B.串是字符的有限序列C.模式匹配是串的一种重要运算D.空串是由空格构成的串正确答案:D3、串“ababaaababaa”的next数组为()。
A.0,1,1,2,3,4,2,2,3,4,5,6B.0,1,2,3,4,5,6,7,8,9,9,9C.0,1,2,3,0,1,2,3,2,2,3,4,5D.0,1,2,1,2,1,1,1,1,2,1,2正确答案:A4、串“ababaabab”的nextval为()。
A.0,1,0,1,0,4,1,0,1B.0,1,0,1,0,1,0,1,1C.0,1,0,1,0,0,0,1,1D.0,1,0,1,0,2,1,0,1正确答案:A5、串的长度是指()。
A.串中所含不同字符的个数B.串中所含非空格字符的个数C.串中所含字符的个数D.串中所含不同字母的个数正确答案:C6、有n个字符的字符串的非空子串个数最多有()。
A.n(n-1)/2B.n-1C.nD.n(n+1)/2正确答案:D7、以下()是”abcd321ABCD”串的子串。
A.“21AB”B.321ABC.abcdD.“abcABC”正确答案:A8、两个串相等必有串长度相等且()。
A.两个所含字符任意B.串中各位置字符均对应相等C.两个串含有相同的字符D.串的各位置字符任意正确答案:B9、若串s="software",其子串的个数是()。
A.36B.37C.9D.8正确答案:B10、函数SubStr(S,m,n)是从S的第m(>0)个字符幵始,连续取n个字符构成子串返回的运算,若设串S="tsinghua",则用SubStr(S,3,4)抽取的子串是()。
数据结构课后参考答案
第 3 章特殊线性表——栈、队列和串2005-07-14第 3 章特殊线性表——栈、队列和串课后习题讲解1. 填空⑴设有一个空栈,栈顶指针为1000H,现有输入序列为1、2、3、4、5,经过push,push,pop,push,pop,push,push后,输出序列是(),栈顶指针为()。
【解答】23,1003H⑵栈通常采用的两种存储结构是();其判定栈空的条件分别是(),判定栈满的条件分别是()。
【解答】顺序存储结构和链接存储结构(或顺序栈和链栈),栈顶指针top= -1和top=NULL,栈顶指针top等于数组的长度和内存无可用空间⑶()可作为实现递归函数调用的一种数据结构。
【解答】栈【分析】递归函数的调用和返回正好符合后进先出性。
⑷表达式a*(b+c)-d的后缀表达式是()。
【解答】abc+*d-【分析】将中缀表达式变为后缀表达式有一个技巧:将操作数依次写下来,再将算符插在它的两个操作数的后面。
⑸栈和队列是两种特殊的线性表,栈的操作特性是(),队列的操作特性是(),栈和队列的主要区别在于()。
【解答】后进先出,先进先出,对插入和删除操作限定的位置不同⑹循环队列的引入是为了克服()。
【解答】假溢出⑺数组Q[n]用来表示一个循环队列,front为队头元素的前一个位置,rear为队尾元素的位置,计算队列中元素个数的公式为()。
【解答】(rear-front+n)% n【分析】也可以是(rear-front)% n,但rear-front的结果可能是负整数,而对一个负整数求模,其结果在不同的编译器环境下可能会有所不同。
⑻用循环链表表示的队列长度为n,若只设头指针,则出队和入队的时间复杂度分别是()和()。
【解答】O(1),O(n)【分析】在带头指针的循环链表中,出队即是删除开始结点,这只需修改相应指针;入队即是在终端结点的后面插入一个结点,这需要从头指针开始查找终端结点的地址。
⑼串是一种特殊的线性表,其特殊性体现在()。
数据结构第四章串习题及答案
习题四串一、单项选择题1.下面关于串的的叙述中,哪一个是不正确的?()A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储2.串是一种特殊的线性表,其特殊性体现在()。
A.可以顺序存储 B.数据元素是一个字符C.可以链接存储 D.数据元素可以是多个字符3.串的长度是指()A.串中所含不同字母的个数 B.串中所含字符的个数C.串中所含不同字符的个数 D.串中所含非空格字符的个数4.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长5.若串S=“software”,其子串的个数是()。
A.8 B.37 C.36 D.9二、填空题1.含零个字符的串称为______串。
任何串中所含______的个数称为该串的长度。
2.空格串是指__ __,其长度等于__ __。
3.当且仅当两个串的______相等并且各个对应位置上的字符都______时,这两个串相等。
一个串中任意个连续字符组成的序列称为该串的______串,该串称为它所有子串的______串。
4.INDEX(‘DATASTRUCTURE’,‘STR’)=________。
5.模式串P=‘abaabcac’的next函数值序列为________。
6.下列程序判断字符串s 是否对称,对称则返回1,否则返回0;如 f("abba")返回1,f("abab")返回0;int f((1)__ ______){int i=0,j=0;while (s[j])(2)___ _____;for(j--; i<j && s[i]==s[j]; i++,j--);return((3)___ ____)}7.下列算法实现求采用顺序结构存储的串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)__ __;}else (4) ___;}(5) __} }第四章串一、单项选择题1.B2. B3.B4.C5. C二、填空题1.空、字符2.由空格字符(ASCII值32)所组成的字符串空格个数3.长度、相等、子、主4.55.011223126.(1)char s[ ] (2) j++ (3) i >= j7.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。
数据结构(CC++语言版)第4章串
•
else return -1;
•}
34
4.3 模式匹配
35
4.3 模式匹配
朴素的模式匹配——BF算法分析
为什么BF算法时间性能低?
在每趟匹配不成功时存在大量回溯,没有利用已经 部分匹配的结果。
如何在匹配不成功时主串不回溯?
主串不回溯,模式就需要向右滑动一段距离。
如何确定模式的滑动距离?
36
4.3 模式匹配
T[strLength(S1) +i]=S2[i]; strLength(T) =MAXSTRLEN; return FALSE; } }
CompStr (S, T)
初始条件:串 S 和 T 存在。 操作结果:若S T,则返回值 0;
若S T,则返回值 0; 若S T,则返回值 0
例如:CompStr(data, state) < 0 CompStr(capture, case) > 0
• 由于在计算机科学、生物信息学等许多领域的重要应用, 串模式匹配已经变成了一个非常重要的计算问题
28
4.3 模式匹配
常用的模式匹配算法: • 朴素的模式匹配(BF算法) • 无回溯的模式匹配(KMP算法) 其他模式匹配算法
29
4.3 模式匹配
朴素的模式匹配——BF算法
基本思想:从主串S的第一个字符开始和模式T 的第 一个字符进行比较,若相等,则继续比较两者的后 续字符;否则,从主串S的第二个字符开始和模式T 的第一个字符进行比较,重复上述过程,直到T 中的 字符全部比较完毕,则说明本趟匹配成功;或S中字 符全部比较完,则说明匹配失败。
S1="ab12 cd " S2="ab12" S3=“cd"
数据结构(C语言版)习题及答案第四章
数据结构(C语言版)习题及答案第四章习题4.1选择题1、空串与空格串是(B)。
A、相同B、不相同C、不能确定2、串是一种特殊的线性表,其特殊性体现在(B)。
A、可以顺序存储B、数据元素是一个字符C、可以链式存储D、数据元素可以是多个字符3、设有两个串p和q,求q在p中首次出现的位置的操作是(B)。
A、连接B、模式匹配C、求子串D、求串长4、设串1=“ABCDEFG”,2=“PQRST”函数trconcat(,t)返回和t串的连接串,trub(,i,j)返回串中从第i个字符开始的、由连续j 个字符组成的子串。
trlength()返回串的长度。
则trconcat(trub(1,2,trlength(2)),trub(1,trlength(2),2))的结果串是(D)。
A、BCDEFB、BCDEFGC、BCPQRSTD、BCDEFEF5、若串=“oftware”,其子串个数是(B)。
A、8B、37C、36D、94.2简答题1、简述空串与空格串、主串与子串、串名与串值每对术语的区别?答:空串是指长度为0的串,即没有任何字符的串。
空格串是指由一个或多个空格组成的串,长度不为0。
子串是指由串中任意个连续字符组成的子序列,包含子串的串称为主串。
串名是串的一个名称,不指组成串的字符序列。
串值是指组成串的若干个字符序列,即双引号中的内容。
2、两个字符串相等的充要条件是什么?答:条件一是两个串的长度必须相等条件二是串中各个对应位置上的字符都相等。
3、串有哪几种存储结构?答:有三种存储结构,分别为:顺序存储、链式存储和索引存储。
4、已知两个串:1=”fgcdbcabcadr”,2=”abc”,试求两个串的长度,判断串2是否是串1的子串,并指出串2在串1中的位置。
答:(1)串1的长度为14,串2的长度为3。
(2)串2是串1的子串,在串2中的位置为9。
5、已知:1=〃I’matudent〃,2=〃tudent〃,3=〃teacher〃,试求下列各操作的结果:trlength(1);答:13trconcat(2,3);答:”tudentteachar”trdelub(1,4,10);答:I’m6、设1=”AB”,2=”ABCD”,3=”EFGHIJK,试画出它们在各种存储结构下的结构图。
数据结构期末考试复习题
数据结构期末考试复习题1第一部分线性一.选择题 1.以下说法正确的是。
A.数据元素是数据的最小单位。
B. 数据结构是带结构的各数据项的集合。
C.数据项是数据的基本单位。
D. 数据结构是带结构的数据元素的集合。
2. 在设计存储结构时,通常不仅要存储各数据元素的值,而且还要存储。
A.数据的处理方法B.数据元素的类型 D.数据的存储方法D.一对多C.数据元素之间的关系 A.一对一3.树状结构中的数据元素之间存在逻辑关系。
B.多对一C.多对多4.以下数据结构中,哪一个不属于线性结构。
A.串B.广义表C.栈D.树5.对一个具有n个结点的单链表,在表头位置插入其值等于x的结点时,操作的时间复杂度为。
A. O(1)B. O(x)C. O(n)D. O(n2)6. 设一顺序栈已含3个元素a、b、c,元素d正等待进栈。
那么下列4个序列中不可能出现的出栈序列是。
A. dcbaB. cdbaC. cbdaD. cadb 7. 如果栈采用顺序存储结构,则入栈操作时。
A. 必须判别栈是否满。
B. 必须判别栈是否空。
C. 判别栈元素的类型。
D. 对栈不做任何操作。
8.用一个大小为N的数组来实现循环队列Q,假定front 和rear分别为队头指针和队尾指针,判断该循环队列为满的条件是。
A.(+1)==B. ==C.(+1)%N==D. (+1)%N== 9.串S=“串string”的长度是。
A. 6B. 7C. 8D. 910.设二维数组arr[6][4]的每个元素占6个单元,按行优先顺序存放在起始地址为2000的连续内存单元中,则存储地址为2066的是元素。
A. arr[2][3] B. arr[3][3]C. arr[5][1]D. arr[4][1] 二.填空题1.根据数据元素之间关系的不同特性,通常有4类基本数据结构,它们是: (____________)、(___________)、(___________)、(___________)。
数据结构相关题库及答案
第三章栈和队列一、判断题:1、栈和队列都是限制存取点的线性结构(易)2、栈和队列是两种重要的线性结构。
(易)3、带头结点的单链表形式的队列,头指针F指向队列的头结点,尾指针R指向队列的最后一个结点(易)4、在对不带头结点的链队列作出队操作时,不会改变头指针的值。
(易)答案:1-4 √√××二、选择题:1、一个栈的入栈序列a,b,c,d,e,则栈的不可能的输出序列是C____。
A、 edcba B、 decbaC、 dceabD、 abcde2、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为_C___。
A、 iB、 n=iC、 n-i+1D、不确定3、栈结构通常采用的两种存储结构是_A___。
A、顺序存储结构和链式存储结构B、散列方式和索引方式C、链表存储结构和数组D、线性存储结构和非线性存储结构4、判定一个顺序栈ST(最多元素为m0)为空的条件是_B___。
A、top !=0 B、top= =0 C、top !=m0D、top= =m0-15、判定一个顺序栈ST(最多元素为m0)为栈满的条件是D。
A、top!=0 B、top= =0 C、top!=m0 D、top= =m0-16、队列操作的原则是( A ) A、先进先出 B、后进先出 C、只能进行插入 D、只能进行删除7、向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行__ _C_。
(不带空的头结点) (易)A、HS—>next=s;9B、s—>next= HS—>next; HS—>next=s;C、s—>next= HS; HS=s;D、s—>next= HS; HS= HS—>next8、从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行__ _B_。
(不带空的头结点) (中)A、x=HS; HS= HS—>next;B、x=HS—>data;C、HS= HS—>next; x=HS—>data;D、x=HS—>data; HS= HS—>next;9、一个队列的数据入列序列是1,2,3,4,则队列的出队时输出序列是___C_ 。
南理工计算机系数据结构2004数据结构B
南理工计算机系数据结构2004数据结构B在南理工计算机系的学习历程中,2004 年的数据结构 B 课程无疑是一座重要的知识高峰。
这门课程宛如一把钥匙,为我们打开了计算机科学领域中数据存储、组织和操作的神秘大门。
数据结构,简单来说,就是研究数据在计算机中的存储和组织方式,以及如何高效地对这些数据进行操作。
它是计算机程序设计的基础,对于编写高效、可靠的程序至关重要。
在 2004 年的数据结构 B 课程中,我们首先接触到的是线性表。
线性表是一种最简单、最基本的数据结构,它就像一排整齐排列的元素,可以是整数、字符或者更复杂的对象。
顺序表和链表是线性表的两种常见实现方式。
顺序表就像是一个固定大小的盒子,元素依次紧密排列;而链表则像是一串珍珠,每个元素通过指针连接在一起。
接着是栈和队列。
栈就像是一个只能从一端进出的容器,遵循“后进先出”的原则。
想象一下叠盘子,最后放上去的盘子总是最先被拿下来,这就是栈的特点。
队列则相反,它类似于排队买票的队伍,遵循“先进先出”的原则,先到的先服务。
数组和字符串也是课程中的重要内容。
数组是一种固定大小的线性结构,通过下标可以快速访问其中的元素。
字符串则是由字符组成的特殊数组,在处理文本数据时经常会用到。
树和二叉树是课程中的难点也是重点。
树就像一棵倒立的树,每个节点可以有多个子节点。
二叉树则是每个节点最多有两个子节点的特殊树结构。
二叉搜索树、平衡二叉树等都是常见的二叉树类型。
二叉搜索树可以快速地进行查找、插入和删除操作,而平衡二叉树则通过自动调整保持树的平衡,提高操作效率。
图是另一种复杂的数据结构,它由顶点和边组成。
图的遍历算法,如深度优先搜索和广度优先搜索,让我们能够全面地访问图中的每个顶点和边。
最短路径算法,如迪杰斯特拉算法和弗洛伊德算法,帮助我们在图中找到两点之间的最短路径。
在学习数据结构 B 的过程中,实验和编程作业是必不可少的环节。
通过实际动手编写代码,实现各种数据结构和算法,我们才能真正理解和掌握它们。
计算机学科专业基础综合数据结构-非统考补充内容:串、数组和稀疏矩阵、树与二叉树(一)
计算机学科专业基础综合数据结构-非统考补充内容:串、数组和稀疏矩阵、树与二叉树(一)(总分:103.00,做题时间:90分钟)一、{{B}}单项选择题{{/B}}(总题数:45,分数:103.00)1.一棵有n个结点的树的所有结点的度数之和为______。
∙ A.n-1∙ B.n∙ C.n+1∙ D.2n(分数:2.00)A. √B.C.D.解析:[解析] 对于一棵树,所有结点的度之和等于分支总数,总分支数比总结点数少1,因此有n个结点的树度之和等于n-1。
2.在二叉树中某一结点的深度为3,高度为4,该树的高度至少为______。
∙ A.5∙ B.6∙ C.7∙ D.8(分数:2.00)A.B. √C.D.解析:[解析] 该结点处于第3层,从叶结点向上处于第4层。
由根结点开始从上至下到该结点所在的层一共3层,而从该结点所在层开始,不包括该结点所在层到某一叶子结点一共3层,因此,至少有6层。
3.在一棵满二叉树中,某结点的深度为4,高度为4,则可推知该满二叉树的高度为______。
∙ A.4∙ B.5∙ C.6∙ D.7(分数:2.00)A.C.D. √解析:[解析] 对于二叉树中的某个结点,其深度是从根算起的,而高度是从叶结点算起的。
一个叶结点的高度为1,其他任意一个结点的高度等于其左、右子树高度中的大值再加1。
此结点从上向下算是第4层,从下向上算也是第4层,由此可知高度为7。
4.一个深度为k且只有k个结点的二叉树按照完全二叉树顺序存储的方式存放于一个一维数组R[n]中,则n应至少是______。
∙ A.2k∙ B.2k+1∙ C.2k-1∙ D.2k(分数:2.00)A.B.C. √D.解析:[解析] 深度为k且只有k个结点的二叉树是一棵单支树。
本题需要计算可以保证存储这样一棵二叉树的最小空间,因此要找到所有这种单支二叉树中占用存储空间最大的那一棵,正好对应一棵所有结点的左子树均为空的单枝树,此时的二叉树所需要的存储空间恰恰和与其高度相同的满二叉树相同,需要2k-1个结点单元。
数据结构填空选择
数据结构填空选择1.数据的物理结构包括数据元素的表示和数据元素关系的表示。
2.对于给定的n个元素,可以构造出的逻辑结构有集合,线性结构,树形结构,__图状结构或网状结构_四种。
3.数据的逻辑结构是指数据的组织形式,即数据元素之间逻辑关系的总体。
而逻辑关系是指数据元素之间的关联方式或称“邻接关系”4.一个数据结构在计算机中的表示(或称映像)称为存储结构(又数据的物理结构)。
5.抽象数据类型的定义仅取决于它的一组__逻辑特性_,而与_在计算机内部如何表示和实现_无关,即不论其内部结构如何变化,只要它的_数学特性_不变,都不影响其外部使用。
6.数据结构中评价算法的两个重要指标是算法的时间复杂度和空间复杂度7.数据结构是研讨数据的_逻辑结构_和_物理结构_,以及它们之间的相互关系,并对与这种结构定义相应的_操作(运算)_,设计出相应的_算法。
8.一个算法具有5个特性:有穷性、确定性、可行性,有零个或多个输入、有一个或多个输出4.从一个具有n个结点的单链表中查找其值等于某的结点时,在查找成功的情况下,需平均比较____C____个元素结点。
A.n/2B.nC.(n+1)/2D.(n-1)/210.线性表的顺序存储结构是一种___A____的存储结构。
A.随机存取B.顺序存取C.索引存取D.散列存取17.向一个栈顶指针为h的链栈中插入一个结点时,应执行___B___。
A.h->ne某t=;B.->ne某t=h;h=;C.->ne某t=h->ne某t;h->ne某t=;D.->ne某t=h;h=h->ne某t;1.线性表是一种典型的___线性_结构。
4.要从一个顺序表删除一个元素时,被删除元素之后的所有元素均需___前移____一个位置,移动过程是从___前____向___后____依次移动每一个元素。
5.在线性表的顺序存储中,元素之间的逻辑关系是通过__物理存储位置_____决定的;在线性表的链接存储中,元素之间的逻辑关系是通过__链域的指针值_____决定的。
2022年广东技术师范大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)
2022年广东技术师范大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、将线性表的数据元素进行扩充,允许带结构的线性表是()。
A.串B.树C.广义表D.栈2、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
A.60B.66C.18000D.333、若线性表最常用的操作是存取第i个元素及其前驱和后继元素的值,为节省时间应采用的存储方式()。
A.单链表B.双向链表C.单循环链表D.顺序表4、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V75、循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是()。
A.(rear-front+m)%mB.rear-front+1C.rear-front-1D.rear-front6、下列关于无向连通图特性的叙述中,正确的是()。
Ⅰ.所有的顶点的度之和为偶数Ⅱ.边数大于顶点个数减1 Ⅲ.至少有一个顶点的度为1A.只有Ⅰ B.只有Ⅱ C.Ⅰ和Ⅱ D.Ⅰ和Ⅲ7、下列选项中,不能构成折半查找中关键字比较序列的是()。
A.500,200,450,180 B.500,450,200,180C.180,500,200,450 D.180,200,500,4508、下述二叉树中,哪一种满足性质:从任一结点出发到根的路径上所经过的结点序列按其关键字有序()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
即(4-3)式含义 ‘Tj-(k-1) …Tj-1’ 截取一段,但k有限制,1<k<j
两式联立可得:‘T1…Tk-1’=‘Tj-(k-1) …Tj-1’
加速的前提:T首与Tj 处有相同子串!
注意:j 为当前已知的失配位置,我们的目标是计算新起点 k。 式中仅剩一个未知数k,理论上已可解!
奇妙的结论: k 仅与模式串T有关!
15
补充:递推与递归的区别:
递推:由“小”到“大”递进 递归:由“大”到“小”嵌套 例如:求f(n)=n!
① 递推法: fact=1; for ( i=1; i<=n; i++) ② 递归法:
fact*= i;
long int fact(n) int n; { long f; if(n>1)f=n*fact(n-1); else f=1; return(f); }
0.其中,T非空,1≤pos≤StrLength(S)
i=pos; j=1; while ( i<=S[0] && j<=T[0] ) {
//如果i,j二指针在正常长度范围,
i-j=回到起始点之前, i-j+1=回到首字符, i-j+2=定位到第二个字符
if (S[i] = = T[j] ) {++i, ++j; } //则继续比较后续字符 else {i=i-j+2; j=1;} //若不相等,指针后退重新开始匹配
k
k
Index_kmp的返回值应为i=6
需要讨论两个问题: ①如何由当前部分匹配结果确定模式向右滑动的新比较起点k? ② 模式应该向右滑多远才是高效率的?
8
② KMP算法的推导过程:(见教材P81)
请抓住部分匹配时的两个特征:
(1)
i
k是追求的新起点
S=‘a b a b c a b c a c b a b’ T=‘a b c a c’
下一个要讨论的问题是:如何用递推方式来求出最 大相同子串的长度呢?换言之,如何让电脑替我们 求出最大相同子串呢?
递推法编程,参见教材P83程序
void get_next(SString T, int &next[ ] ){
//求模式串T的next函数值并存入数组next[ ]
i=1; j=0; next[1]=0; while(i<T[0] ){ //T[0]为T串之长度 if(j= = 0||T[i]= =T[j]) {++i; ++j; next[i]=j;} //首次必j=0 else j=next[j]; } 1 2 3 4 5 }// get_next T[i]: a b a a b
第i个位置匹配成功,前i-1个位置每个位置只比较了一次,第i个位置比 较了(i-1+m)次,平均比较次数:
n m 1
i 1
n m 1 1 1 pi (i 1 m) (i 1 m) 2 (m n) n m 1 i 1
最好情况下算法的平均时间复杂度O(n+m)。 ②最坏的情况下:
第 1 次匹配 S=abacaba b T=abab T=abab i=4 失败 j=4 j=2
因t1≠t2,s2=t2,必有s2≠t1,又因t1=t3,s3=t3,所以必有s3=t1。 因此,第二次匹配可直接从i=4, j=2开始。
① KMP算法设计思想: (参见教材P80-84)
尽量利用已经部分匹配的结果信息,尽量让i不要回溯,加快 模式串的滑动速度。 例:i i
j=1时, next[ j ]≡ 0;//属于“j=1”情况 j=2时, next[ j ]≡ 1;// 找不到1<k<j的k,属于“其他情况” j=3时, k={2},只需查看‘T1’=‘T2’成立否,No则属于其他情况 j=4时, k={2,3},要查看‘T1’=‘T3’ 及‘T1T2’=‘T2 T3’ 是否成立 j=5时, k={2,3,4},要查看‘T1’=‘T4’ ,‘T1T2’=‘T3T4’ 和 ‘T1T2T3’=‘T2T3T4’ 以此类推,可得后续next[j]值。 从两头往中间比较 13
S=‘a b a b c a b c a c b a b’ aba a T=‘a b c a c’
i i i
S=‘a b a b c a b c a c b a b’ T=‘a b c a c’
k i-T[0]为匹配位置
S=‘a b a b c a b c a c b a b’ T=‘a b c a c’
模式串从j的前一位 往左经过k-1位
next[j]函数表征着模式T中最大相同前缀子串和后缀子串 (真子串)的长度。 可见,模式中相似部分越多,则next[j]函数越大,它既表示 模式T字符之间的相关度越高,也表示j位置以前与主串部分匹 配的字符数越多。
11
(2) next[ j ]具体怎么求?
计算Next[j]的方法: •当j=1时,Next[j]=0; //Next[j]=0表示根本不进行字符比较 •当j>1时,Next[j]的值为:模式串的位置从1到j-1 构成的串中所出现的首尾相同的子串的最大长度加1。 无首尾相同的子串时Next[j]的值为1。 // Next[j]=1表示从模式串头部开始进行字符比较
9
新起点 k怎么求? 根据模式串T的规律: ‘T1…Tk-1’=‘Tj-(k-1) …Tj-1’ 由当前失配位置j(已知) ,可以归纳出计算新起点 k的表达式。 令k = next[ j ](k 与j 显然具有函数关系),则 0 当j=1时 //不比较 next[ j ]= max { k | 1<k<j 且‘T1…Tk-1’=‘Tj-(k-1) …Tj-1’ } 1 其他情况
T[j]:
6 7 8
c a c a b a a b c a c
14
next[i]: 0 1 1 2 2 3 1 2
求解next[j]流程图(递推)
i=1; j=0 next[1]=0 N
i<T[0]
END N
Y
j==0 || T[i]==T[j]
Y
++i; ++j; next[i]=j; j=next[j];
求:串T在串S中第pos个字符之后的位置。
BF算法设计思想:
• 将主串S的第pos个字符和模式T的第1个字符比较, 若相等,继续逐个比较后续字符; 若不等,从主串S的下一字符(pos+1)起,重新与T第一 个字符比较。 • 直到主串S的一个连续子串字符序列与模式T相等。返回值 为S中与T匹配的子序列第一个字符的序号,即匹配成功。 否则,匹配失败,返回值 0。
(2)
i k
设目前打算与T的第k字符开始比较
‘T1…Tk-1’
则T的1~k-1位=S前i-(k-1) ~i-1位 即(4-2)式含义
S=‘a b a b c a b c a c b a b’刚才肯定是在S的i处和T的第j字符 处失配 则T的j-(k-1) ~j-1位= S前i-(k-1) ~i-1位 T=‘a b c a c’
2
BF算法的实现
例如,设目标串s=―cddcdc‖,模式串t=―cdc‖。s的长度为n(n=6),t的长度为m(m=3)。 用指针i指示目标串s的当前比较字符位置,用指针j指示模式串t的当前比较字符位置。 BF模式匹配过程如下所示。
第 1 次匹配
s=cddcdc t=cdc
i=3 j=3 i=2 j=1 i=3 j=1 i=6 j=3 成功 失败 失败 失败
} if(j>T[0]) return i-T[0]; //T子串指针j正常到尾,说明匹配成功, else return 0; //否则属于i>S[0]情况,i先到尾就不正常 } //Index_BP
4
BF算法的时间复杂度 主串长n; 子串长m。可能匹配成功的位置(1 ~ n-m+1)。 ①最好的情况下:
第i个位置匹配成功,但每个i-1位置都比较了m次,总共比较了(i*m)次, 平均比较次数:
n m 1
i 1
n m 1 m 1 pi (i m) i 2 m(n m 2) n m 1 i 1
设n>>m,最坏情况下的平均时间复杂度为O(n*m)。
分析算法的思想:
16
③ KMP算法的实现—即Index( )操作的实现
第二步:执行定位函数Index_kmp (与BF算法模块非常相似) Int Index_KMP(SString S, SString T, int pos) { //见教材P82 i=pos; j=1; while ( i<=S[0] && j<=T[0] ) { if (j==0|| S[i] = = T[j] ) {++i, ++j} //不失配则继续比较后续字符 else {j=next[j];} //特点:S的i指针不回溯,而且从T的k位置开始匹配 } if(j>T[0]) return i-T[0]; //子串结束,说明匹配成功 else return0; }//Index_KMP
怎样计算模式T所有可能的失配点 j 所对应的 next[j]?
12
例:
模 式 串 T: a b a a b c a c 可能失配位 j: 1 2 3 4 5 6 7 8 新匹配位k=next[j] : 0 1 1 2 2 3 1 2 刚才已归纳: 讨论:
next[j]与s无关, 可以预先计算
0 当j=1时 next[ j ]= max { k |1<k<j 且‘T1…Tk-1’=‘Tj-(k-1) …Tj-1’ } 1 其他情况
• 从主串S的第pos个字符起和模式的第一个字符比较,若相 等,继续比较后续字符;否则, 从主串的下一个字符起再重 新和模式的字符比较。以此类推,直到模式T中的每个字符 依次和主串S中的一个连续的字符序列相等,则匹配成功, 函数返回T首字符在S中的位置;否则匹配不成功。