数据结构 张铭 习题

合集下载

数据结构试题集_张敏

数据结构试题集_张敏
8、深度为6的二叉树最多有( B )个结点
A、64 B、.63C、32 D、31
9、如图所示的二叉树的中序遍历序列是( B )
A、abcdgefB、dfebagcC、dbaefcgD、defbagc
10、下图G=(V,E)是一个带权连通图,G的最小生成树的权为( D )
A、15
B、16
C、17
D、18
}//purge_sq
(1)
(2)
(3)
(4)
(5)
31、下列函数的功能是,对以带头结点的单链表作为存储结构的两个递增有序表(表中不存在值相同的数据元素)进行如下操作:将所有在Lb表中存在而La表中不存在的结点插入到La中,其中La和Lb分别为两个链表的头指针。请在空缺处填入合适内容,使其成为一个完整的算法。
30、已知一个顺序表中的元素按关键字值非递减有序,下列算法删除顺序表中关键字相同的多余元素,使每个关键字不同的元素在表中只保留一个。
已知顺序表的存储结构描述如下:
#define NodeSize 20
typedef struct {
int elem [NodeSize];
int length;
} SqList;
4、若进栈次序为a,b,c,且进栈和出栈可以穿插进行,则可能出现的含3个元素的出栈序列个数是()
A、3 B、5 C、6 D、7
5、串匹配算法的本质是( )
A、串复制B、串比较C、子串定位D、子串链接
6、串的操作函数str定义为:
intstr(char*s){
char *p=s;
while (*p!=′\0′)p++;
}
else
{
q = pb; pb = pb -> next; f ree (q);

数据结构习题及参考答案

数据结构习题及参考答案

习题1一、单项选择题1.数据结构是指()。

A.数据元素的组织形式B.数据类型C.数据存储结构D.数据定义2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。

A.存储结构B.逻辑结构C.链式存储结构D.顺序存储结构3.树形结构是数据元素之间存在一种()。

A.一对一关系B.多对多关系C.多对一关系D.一对多关系4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。

for(i=1; i<=n; i++)for(j=i; j<=n; j++)x++;A.O(1)B.O(2n)C.O(n)D.O(3n)5.算法分析的目的是(1),算法分析的两个主要方面是(2)。

(1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性(2) A.空间复杂度和时间复杂度 B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。

(1) A.计算方法 B.排序方法C.解决问题的有限运算序列D.调度方法(2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性C.确定性,有穷性和稳定性D.易读性,稳定性和安全性7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。

A.低B.高C.相同D.不好说8.数据结构作为一门独立的课程出现是在()年。

A.1946B.1953C.1964D.19689.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。

A.正确B.错误C.前半句对,后半句错D.前半句错,后半句对10.计算机内部数据处理的基本单位是()。

A.数据B.数据元素C.数据项D.数据库二、填空题1.数据结构按逻辑结构可分为两大类,分别是______________和_________________。

2.数据的逻辑结构有四种基本形态,分别是________________、__________________、__________________和__________________。

3_数据结构与算法_北京大学2008_张铭_栈和队列

3_数据结构与算法_北京大学2008_张铭_栈和队列

“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
3.1.2 顺序栈
template <class T> class arrStack : public Stack <T> { private: // 栈的顺序存储 int mSize; // 栈中最多可存放的元素个数 int top; // 栈顶位置,应小于mSize T *st; // 存放栈元素的数组 public: // 栈的运算的顺序实现 arrStack(int size) { // 创建一个给定长度的顺序栈实例 mSize = size; top = -1; st = new T[mSize]; } arrStack() { // 创建一个顺序栈的实例 top = -1; } ~arrStack() { // 析构函数 delete [] st; } void clear() { // 清空栈内容 top,赵海燕,《数据结构与算法》,高教社,2008. 6
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
从栈顶读取,但不弹出
bool arrStack<T>:: top(T & item) { // 返回栈顶内容,但不弹出 if (top == -1) { // 栈空 cout << " 栈为空,不能读取栈顶元素"<< endl; return false; } else { item = st[top]; return true; } }
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
栈的实现方式
顺序栈(Array-based Stack) 使用向量实现,本质上是顺序表的简化版

数据结构第2章习题参考答案

数据结构第2章习题参考答案

数据结构第2章习题参考答案1. 简答题1.1 什么是数据结构?数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括数据的逻辑结构和物理结构。

1.2 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括线性表、栈、队列和串;非线性结构包括树和图。

1.3 数据结构的逻辑结构有哪些?数据结构的逻辑结构包括线性结构、树形结构和图形结构。

1.4 数据结构的物理结构有哪些?数据结构的物理结构包括顺序存储结构和链式存储结构。

1.5 什么是算法?算法是指求解问题的具体步骤和方法。

1.6 算法的特性有哪些?算法应具有有穷性、确定性、可行性和输入输出性。

2. 选择题2.1 在栈的顺序存储结构中,栈的存储位置是:A. 自顶向下递增B. 自底向上递增C. 自底向上递减D. 自顶向下递减答案:D2.2 下列哪个数据结构不适合表示有父子关系的数据?A. 二叉树B. 图C. 链表D. 堆答案:D2.3 对于一棵完全二叉树,叶子节点的个数为n,则树中节点的总数为:A. 2nB. 2n + 1C. nD. n + 1答案:A2.4 假设有一个长度为10的栈,初始时栈为空,若对该栈连续执行5次入栈操作,然后执行4次出栈操作,最后执行1次入栈操作,则栈中剩余的元素个数为:A. 0B. 1C. 4D. 6答案:D3. 编程题3.1 实现一个栈数据结构的基本操作,包括入栈、出栈、获取栈顶元素和判断栈是否为空。

```Pythonclass Stack:def __init__(self):self.items = []def is_empty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):if self.is_empty():return Nonereturn self.items.pop()def peek(self):if self.is_empty():return Nonereturn self.items[-1]```3.2 实现一个队列数据结构的基本操作,包括入队、出队、获取队首元素和判断队列是否为空。

数据结构习题(包含全部答案解析)

数据结构习题(包含全部答案解析)

数据结构习题集(自编)第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。

A.结构B.关系 C.运算 D.算法2.在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.逻辑结构和存储结构3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。

A.正确B.不正确 C.无法确定 D.以上答案都不对4.算法分析的目的是()。

A.找出算法的合理性 B.研究算法的输人与输出关系C.分析算法的有效性以求改进 D.分析算法的易懂性5. 算法的时间复杂度取决于()A.问题的规模B待处理数据的初态 C. A和B6.一个算法应该是()。

A.程序B.问题求解步骤的描述C.要满足五个基本特性 D.A和C.7. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法与为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的8.以下与数据的存储结构无关的术语是()。

A.循环队列 B. 链表 C. 哈希表 D. 栈9.在下面的程序段中,对x的赋值语句的频度为()for(i=0;i<n;i++)for(j=0;j<n;j++)x=x+1;nA. 2n B.n C.n2 D.log210.以下数据结构中,()是非线性数据结构A.树 B.字符串 C.队列 D.栈11. 下列数据中,()是线性数据结构。

A.哈夫曼树 B.有向无环图 C. 二叉排序树 D. 栈12.以下属于逻辑结构的是()。

A.顺序表 B. 哈希表 C.有序表 D. 单链表二、填空题1、_______是信息的载体,是对客观事物的符号表示,它能够被计算机识别、存储、加工和处理,________是对能够有效的输人到计算机中并且能够被计算机处理的符号的总称。

(数据、数据)2、数据元素是数据的______,有些情况下也称为元素、结点、顶点、记录等。

(完整版)数据结构练习题及参考答案

(完整版)数据结构练习题及参考答案

数据结构练习题第一部分绪论一、单选题1. 一个数组元素a[i]与________的表示等价。

A、 *(a+i)B、 a+iC、 *a+iD、 &a+i2. 对于两个函数,若函数名相同,但只是____________不同则不是重载函数。

A、参数类型B、参数个数C、函数类型3. 若需要利用形参直接访问实参,则应把形参变量说明为________参数A、指针B、引用C、值4. 下面程序段的时间复杂度为____________。

for(int i=0; i<m; i++)for(int j=0; j<n; j++)a[i][j]=i*j;A、 O(m2)B、 O(n2)C、 O(m*n)D、 O(m+n)5. 执行下面程序段时,执行S语句的次数为____________。

for(int i=1; i<=n; i++)for(int j=1; j<=i; j++)S;A、 n2B、 n2/2C、 n(n+1)D、 n(n+1)/26. 下面算法的时间复杂度为____________。

int f( unsigned int n ) {if ( n==0 || n==1 ) return 1; else return n*f(n-1);}A、 O(1)B、 O(n)C、 O(n2)D、 O(n!)二、填空题1. 数据的逻辑结构被分为__________、_________、__________和__________四种。

2. 数据的存储结构被分为__________、_________、__________和__________四种。

3. 在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着________、________和________的联系。

4. 一种抽象数据类型包括__________和__________两个部分。

5. 当一个形参类型的长度较大时,应最好说明为_________,以节省参数值的传输时间和存储参数的空间。

数据结构与算法_北京大学2008_张铭_数据结构和算法简介_1

数据结构与算法_北京大学2008_张铭_数据结构和算法简介_1

在 程 序 设家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
树型结构

树型结构简称树结构,或称为层次结构。其关 系 r 称为层次关系,或称“父子关系”、“上 下级关系”等 每一个结点可以有多于一个的“直接下级”, 但是它只能有唯一的“直接上级”。
K 是由有限个结点组成的集合,每一个结点都代表一个
数据或一组有明确结构的数据 关系集 R是定义在集合K上的一组关系,其中每个关系 (relation) r(r ∈ R)都是 K×K上的二元关系,用它描 述结点数据之间的逻辑关系
– 例如, r = {<ki-1, ki> | ki ∈K, 1 < i < n }
简言之,一类按照一定逻辑关系组织起来的数据的表示 及其相关操作。 常见的基本数据结构:线性表,字符串,堆栈与队列, 树与二叉树,字典,图
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
数据的逻辑结构

二元组 B = (K, R)
– K : 结点( 初等或组合类型)的有限集合 – R : K上的有穷关系的集合(一组二元关系)
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
结点类型 :复合数据类型

复合类型是由基本数据类型组合而成的数据结构类 型
例如:在程序语言中常用的数组类型,结构(记录)类型等皆属复 合数据类型

复合数据类型本身,又可以参与定义结构更为复杂 的结点类型 结点的类型不限于基本数据类型,可以根据应用的 需要来灵活定义
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6

数据结构(第二版)习题库章节练习题1-9章全

数据结构(第二版)习题库章节练习题1-9章全

数据结构(第二版)习题库章节练习题1-9章全数据结构(第二版)习题库章节练习题1-9章全第一章:引论引论部分为数据结构的开篇,主要介绍了数据结构的基本概念和分类。

在这一章中,我们学习了数据结构的定义、作用以及与算法的关系。

接下来,将为你详细介绍第一章的习题内容。

1. 习题1-1题目:请简述数据结构的定义和作用。

要求:通过一段简洁清晰的语言来回答问题,并给出你的理解。

答案:数据结构是计算机中存储、组织和管理数据的方式。

它旨在将数据以特定的方式进行排列,以便高效地进行存储和检索。

数据结构作为计算机科学的基础,为我们解决实际问题提供了有效的工具和方法。

2. 习题1-2题目:你认为数据结构与算法之间的关系是什么?要求:结合实际案例,详细解释数据结构与算法之间的相互依赖关系。

答案:数据结构和算法是密不可分的,它们之间存在着相互依赖的关系。

数据结构提供了算法操作的基础,而算法则对数据结构进行操作和处理。

例如,在搜索算法中,我们需要合适的数据结构来存储和组织数据,以便能够高效地进行搜索操作。

而无论是数组、链表还是树,都需要通过算法来进行增删改查等操作。

第二章:算法分析算法分析是数据结构中的重要概念,它涉及到算法的运行时间和空间效率。

在这一章中,我们将学习算法分析的基本方法和常用技巧,并通过习题来巩固所学知识。

3. 习题2-1题目:请解释渐进记号中的"O"表示什么意思。

要求:简明扼要地回答问题,并辅以例子说明。

答案:在算法分析中,"O"表示渐进上界。

它描述了算法在最坏情况下的运行时间复杂度。

例如,如果一个算法的时间复杂度为O(n),那么说明该算法的运行时间与输入规模n成正比。

即使输入规模变大,算法的运行时间也不会超过n的某个常数倍。

4. 习题2-2题目:请说明算法的平均情况分析与最坏情况分析有何区别?要求:用简洁的语言说明两种分析方法的不同之处,并给出具体的示例。

答案:算法的平均情况分析和最坏情况分析的区别在于对输入数据的预先假设。

11_数据结构与算法_北京大学2008_张铭_索引技术

11_数据结构与算法_北京大学2008_张铭_索引技术
大多数检索都是利用辅码索引来完成的
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。
索引

索引( indexing )是把一个关键码与它对应的数 据记录的位置相关联的过程
(关键码,指针)对,即(key, pointer) 指针指向主要数据库文件(也称为“主文件”) 中的完整记录
假设数据文件包含10000条记录
稠密一级线性索引中包含10000条记录 • 10000/128 = 78.1 • 那么一级线性索引占用79个磁盘块 相应地,二级线性索引文件中有79项索引对 这个二级线性索引文件可以在一个磁盘块
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。
11.3.2 对正文文件的倒排
Indexing)处理的就是“ 建立一个数据结构以提供对文本内容的 快速检索”。 方法
正文索引(Text
词索引(word index) 全文索引(full-text index)
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。
63
ISAM

ISAM是解决需要频繁更新的大型数据库的一 个早期尝试 在采用基于B+树的VSAM技术之前,IBM公司 曾经广泛地采用ISAM技术 多分树的应用 为磁盘存取而设计 结构采用多级索引
可以对数据进行高效检索
二分检索
顺序处理
比较操作 批处理的操作
节省空间
(相对其它索引结构)
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。

数据结构与算法-北大 HW11 B_B+树

数据结构与算法-北大 HW11 B_B+树

北京大学信息学院2007年秋季学期《数据结构与算法A(实验班)》课程作业张铭编写并发布 mzhang@ 第11次作业,12月17日(周一)课前提交,电子稿提交时间12月17日开课之前提交。

11.1 偶数阶的B 树插入上溢出时,中位数有两个,需要注意采用统一的策略。

例如,取第二个中位数,即分裂后左(1)/2m −⎡⎤⎢⎥个关键码,右(1)/2m −⎢⎥⎣⎦;或者取第一个中位数,分裂后左(1)/2m −⎢⎥⎣⎦右(1)/2m −⎡⎤⎢⎥。

请画出对右图的4阶B 树进行下来操作后的B 树。

(1) 分裂时采用第2个中位数为分界码,请画出插入关键码113后的B 树;分析插入操作的访外次数。

(2) 分裂时采用第1个中位数为分界码,请画出插入关键码113后的B 树;分析插入操作的访外次数。

(3) 在原树中删除关键码50;分析删除操作的访外次数(与1、2题无关,从根重新开始操作)。

11.2 已知一组关键码为(20, 30, 50, 52, 60, 68, 70),试依次插入关键码。

(1) 生成一棵3阶的B +树,画出插入所有关键码后B 树的结构。

(2) 画出删除50后的B + 状态,分析删除操作的访外次数。

11.3 假设一个数据文件每个记录对象需要占用128 字节(其中关键码占用4字节),且所有记录均已按关键码有序地存储在主磁盘文件中。

设磁盘页块大小为2048(= 2K )字节,若主存中有12M 空间可以用来存储索引结构,索引项中每一个地址指针占8 字节。

请简要回答以下问题(请写明你的计算过程)。

(1) 使用B 树索引,B 树的阶m 1最多可以为多少?4层m 1阶B 树,最多可以索引多少字节的数据文件?(2) 使用B +树索引,B +树的阶m 2最多可以为多少?(3) 假设B +树的叶层各结点链接成双链结构,B +树的叶结点阶m 2’可以跟内部结点不一样,则阶m 2’为多少?(4) 在第(3)小题的基础上,计算4层B +树(内部结点为m 2阶,叶结点m 2’阶),最多可以索引多少字节的数据文件?(5) 假设尽量把B +树的头几层放入内存(本题规定不能超过12M ),那么给定关键码,通过B +树查找到(4)小题中主数据文件的一个记录,最少几次访外?最多几次访外?11.4 对于下面两种B +树,列表给出他们在1、2、3、4和5层(独根是一层树)的不同情况下,能够存储的最大记录数和最小记录数。

(完整版) 《数据结构》教材课后习题+答案

(完整版) 《数据结构》教材课后习题+答案

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C. 有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

数据结构3-2

数据结构3-2

数据结构与算法(三)张铭 主讲采用教材:张铭,王腾蛟,赵海燕 编写 高等教育出版社,2008. 6 (“十一五”国家级规划教材)•栈•栈的应用–递归到非递归的转换•队列•递归函数调用原理•机械的递归转换•优化后的非递归函数•阶乘ff nn=�nn×ff(nn−1)nn≥11nn=0•递归出口–递归终止的条件,即最小子问题的求解–可以允许多个出口•递归规则(递归体+界函数)–将原问题划分成子问题–保证递归的规模向出口条件靠拢ff nn =�nn ×ff (nn −1)nn ≥11nn =0•阶乘的非递归方式•以Hanoi 塔为例呢?- 建立迭代 - 递归转换为非递归/f/play/89425.html •hanoi(n,X,Y,Z)–移动n个槃环–X柱出发,将槃环移动到Z 柱–X、Y、Z都可以暂存•大盘不能压小盘•例如, hanoi(2, ‘B’, ‘C’ , ‘A’)–B柱上部的2个环槃移动到A 柱void hanoi(int n, char X, char Y, char Z) {if (n <= 1)move(X,Z);else { // X上最大的不动,其他 n-1个环槃移到Yhanoi(n-1,X,Z,Y);move(X,Z); // 移动最大环槃到Z,放好hanoi(n-1,Y,X,Z); // 把 Y上的n-1个环槃移到Z }}void move(char X, char Y) // 把柱X的顶部环槃移到柱Y {cout << "move" << X << "to" << Y << endl;}Hanoi 递归子程序的运行示意图执行hanoi 程序的指令流通过内部栈和子程序交换信息栈顶栈底2 H递归运行时,堆栈的进退以及通过堆栈传递参数 hanoi(3,A,B,C) 执行move(A,C) move(A,B) move(C,B) 执行move(A,C) move(B,A) move(B,C) hanoi(2,A,C,B) hanoi(1,A,B,C) hanoi(1,C,A,B) hanoi(2,B,A,C) hanoi(1,B,C,A) hanoi(1,A,B,C)=<+≥时2当1时2)4/(*)2/()(n n n n fu n fu n fuint f(int n) {if (n<2)return n+1;elsereturn f(n/2) * f(n/4); }=<+≥时2当1时2)4/(*)2/()(n n n n fu n fu n fuvoid exmp(int n, int & f) { int u1, u2;if (n<2) f = n+1; else {exmp((int )(n/2), u1);exmp((int )(n/4), u2); f = u1*u2; } }=<+≥时2当1时2)4/(*)2/()(n n n n fu n fu n fu•栈(stack )用于分配后进先出LIFO 的数据–如函数调用•堆(heap )用于不符合LIFO 的–如指针所指向空间的分配int A[1000000]; xint *B = new int[1000000]; √函数调用及返回的步骤≥时2)4/(*)2/(nnfunfuf=2f=2目录页栈与队列用栈模拟递归调用过程•后调用,先返回(LIFO),所以用栈& f) {if (n<2) f = n+1;else {exmp((int)(n/2), u1); exmp((int)(n/4), u2);f = u1*u2;}}目录页栈与队列•对以下函数,请画出n=4情况下的递归树,并用栈模拟递归的调用过程。

6_数据结构与算法_北京大学2008_张铭_树

6_数据结构与算法_北京大学2008_张铭_树
A B D I J E C F G K L H (a)凹入表表示法 (b)文氏图表示法 B D I E J K F G L A C H
(A(B(D(I,J),E),C(F,G(K,L),H))) (c)嵌套括号表示法
图6.2 树形结构 的各种表示法
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. “十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。
6.1.1 树和森林
树(tree)是包括n个结点的有限集合 T(n ≥ 1),使得:
有且仅有一个特定的称为根(root)的结点。 根 除根以外的其它结点被分成m个(m ≥ 0)不相 交的有限集合T1,T2,…,Tm,而每一个 集合又都是树。其中树T1,T2,…,Tm称 作这个根的子树 子树(subtree)。 子树
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. “十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。
树形结构的各种表示法
树形结构在客观世界中是大量存在的,有多种 逻辑表示方法:如树形表示法、凹入表示法、 文氏图表示法、嵌套括号表示法等。
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. “十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。
森林与树
森林(forest)是零棵或多棵不相交的树 森林 的集合(通常是有序集合)。 对于树中的每个结点,其子树组成的集 合就是森林;而加入一个结点作为根, 森林就可以转化成一棵树了。
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. “十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6。

2_数据结构与算法_北京大学2008_张铭_线性表

2_数据结构与算法_北京大学2008_张铭_线性表

“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
顺序表
逻辑地址 数据元素 (下标) 0 1 … i k0 k1 … ki kn-1 存储地址 数据元素 Loc(k0) Loc(k0)+c … Loc(k0)+i*c k0 k1 … ki kn-1

n-1

“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
线性表逻辑结构
主要属性包括:
线性表的长度 表头(head) 表尾 (tail) 当前位置(current position)
“十一五”国家级规划教材。张铭,王腾蛟,赵海燕,《数据结构与算法》,高教社,2008. 6
线性表 • 所有表目都是同一类型结点的线性表 • 不限制操作形式 • 根据存储的不同分为:顺序表,链表 栈(LIFO, Last In First Out) • 插入和删除操作都限制在表的同一端进行 队列(FIFO, First In First Out) • 插入操作在表的一端, 删除操作在另一端
插入算法
// 设元素的类型为T, aList是存储顺序表的数组, maxSize是其最大长度; // p为新元素value的插入位置,插入成功则返回true, 否则返回false template <class T> bool arrList<T> :: insert (const int p, const T value) { int i; if (curLen >= maxSize) { // 检查顺序表是否溢出 cout << "The list is overflow"<<endl; return false; } if (p < 0 || p > curLen) { // 检查插入位置是否合法 cout << "Insertion point is illegal"<<endl; return false; } for (i = curLen; i > p; i--) aList[i] = aList[i-1]; // 从表尾curLen -1起往右移动直到p aList[p] = value; // 位置p处插入新元素 curLen++; // 表的实际长度增1 return true; }

数据结构 张铭 习题

数据结构 张铭 习题

第一章概论练习答案上一章下一章本章练习题答案分页: [1] [2]1、解答:【题意解析】本题指定了字符的顺序,所以不能按照ASCII字符顺序来排序。

【典型错误】1.不按照题目给出的字符顺序进行排序,而按照ASCII字符顺序。

2.没有给出排序结果3.认为顺序存储法比较节约空间,事实上由于字符空隙,顺序法并不节约空间;4. 没有比较各种方法的优劣。

【数据结构】本题可以采用的存储结构有顺序(数组)和链表。

1. 用二维数组array[NUMOFSTRING][MAX_LENGTH],此题可定义const int优点:为紧凑存储结构,没有用于存储其他附加的信息,表示方法比较直观简单,代码实现十分容易。

缺点:为每个但此都开辟了同样长度的空间,造成空间的浪费。

2. 用链表的结构存储,结点为结构struct strings{char string[MAX_LENGTH];strings *pNext;}优点:如果有后续工作如反复增删结点,效率很高.并且可以使用不连续的空间。

缺点:操作过程相对复杂,容易出错.而且排序过程需要从表头开始沿链索一个结点一个结点的比较搜索,相当费时。

3. 索引存储是顺序存储的一种推广.使用一个字符串char data[500],其中将大小长度不等的数据结点(单词)顺序存储其中.令使用一个字符指针数组 char* index[n],存储一系列指针,每个指针指向存储区域的一个数据结点.排序时,直接对index中的地址值进行调换修改即可,而不用修改data中的任何内容。

索引存储的优点是:由于单词长度不同,在存储时充分考虑了这个因素,可以节省空间,此外由于交换的不是单词本身而是单词的地址,可以节省时间,从时空两方面得到了优化。

【排序结果】B899,B9,CRSI,CXY,PAB,PABC,5C,72、解答:【题意解析】本题没有指明这100个实数是否存在相等的情况,在这里,我们考虑存在多个最大值的情形(即100个实数可能有相等的),为了保存其位置,利用int pos[100](因为有可能这100个实数都是相同的)来保存最大值的所有位置。

数据结构与算法张铭课后答案

数据结构与算法张铭课后答案

数据结构与算法张铭课后答案【篇一:第3章栈和队列数据结构张铭复习题】一、填空题(每空1分,共15分)1. 向量、栈和队列都是栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。

2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为。

不允许插入和删除运算的一端称为栈底。

3.4. 在一个循环队列中,队首指针指向队首元素的位置。

5. 在具有n个单元的循环队列中,队满时共有个元素。

6. 向栈中压入元素的操作是先,后。

7. 从循环队列中删除一个元素时,其操作是先移动队首指针,后。

8. 带表头结点的空循环双向链表的长度等于。

解:head二、判断正误(判断下列概念的正确性,并作出简要的说明。

)(每小题1分,共10分)错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。

错,不一定吧?调用子程序或函数常用,cpu中也用队列。

(√)3. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

(√)4. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。

正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。

错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

(√)7. 栈和队列的存储方式既可是顺序方式,也可是链接方式。

(√)8. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。

错,有可能。

三、单项选择题(每小题1分,共20分)(b)1.栈中元素的进出原则是A.先进先出B.后进先出C.栈空则进D.栈满则出(c)2.若已知一个栈的入栈序列是1,2,3,?,n,其输出序列为p1,p2,p3,?,pn,若p1=n,则pi为A.i B.n=iC.n-i+1 D.不确定解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,?,n,则出栈的序列是n,?,3,2,1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章概论练习答案上一章下一章本章练习题答案分页: [1] [2]1、解答:【题意解析】本题指定了字符的顺序,所以不能按照ASCII字符顺序来排序。

【典型错误】1.不按照题目给出的字符顺序进行排序,而按照ASCII字符顺序。

2.没有给出排序结果3.认为顺序存储法比较节约空间,事实上由于字符空隙,顺序法并不节约空间;4. 没有比较各种方法的优劣。

【数据结构】本题可以采用的存储结构有顺序(数组)和链表。

1. 用二维数组array[NUMOFSTRING][MAX_LENGTH],此题可定义const int优点:为紧凑存储结构,没有用于存储其他附加的信息,表示方法比较直观简单,代码实现十分容易。

缺点:为每个但此都开辟了同样长度的空间,造成空间的浪费。

2. 用链表的结构存储,结点为结构struct strings{char string[MAX_LENGTH];strings *pNext;}优点:如果有后续工作如反复增删结点,效率很高.并且可以使用不连续的空间。

缺点:操作过程相对复杂,容易出错.而且排序过程需要从表头开始沿链索一个结点一个结点的比较搜索,相当费时。

3. 索引存储是顺序存储的一种推广.使用一个字符串char data[500],其中将大小长度不等的数据结点(单词)顺序存储其中.令使用一个字符指针数组 char* index[n],存储一系列指针,每个指针指向存储区域的一个数据结点.排序时,直接对index中的地址值进行调换修改即可,而不用修改data中的任何内容。

索引存储的优点是:由于单词长度不同,在存储时充分考虑了这个因素,可以节省空间,此外由于交换的不是单词本身而是单词的地址,可以节省时间,从时空两方面得到了优化。

【排序结果】B899,B9,CRSI,CXY,PAB,PABC,5C,72、解答:【题意解析】本题没有指明这100个实数是否存在相等的情况,在这里,我们考虑存在多个最大值的情形(即100个实数可能有相等的),为了保存其位置,利用int pos[100](因为有可能这100个实数都是相同的)来保存最大值的所有位置。

【典型错误】1. 用int类型的数组来保存这100个元素,没有注意题目中说的是“每个元素的值都是实数”。

2. 求最大值的时候代码如下:temp=0;for(int i=0;i<100;i++)if(Num[i]>temp)temp=Num[i];评注:这样是错误的,例如:当Num[i]都是负数的时候。

3. 未考虑可能存在多个最大值的情况,只保存了一个最大值的位置。

【数据结构】本题可以采用的存储结构有顺序(数组),链表和索引。

本题最好使用数组存储结构。

由于其他存储方法需要记录附加信息,使得空间有效利用不能够最大化。

因此在空间上顺序存储是最优的。

时间上,无论如何此题都要遍历所有的数,因此O(n)为可能的最优时间代价。

加之此题的规模较小,因此使用大家最熟悉的顺序存储是较为优先的选择。

【算法描述】1. 由于最大值可能不止一个,甚至可能都是最大值,所以创建一个长度为100的整型数组pos[100],用来记录最大值的位置。

2. 初始情况,取这个数组的第一个位置为最大值所在的位置,存入变量position中。

3. 假设有n(1≤n≤99)个最大值,那么pos[0, 1, 2, …, n-1]记录这些最大值的位置,且pos[n]=-1(-1是标记值,表明pos数组下标为n-1及以前的元素记录了最大值的位置);假设有n(n=100)个最大值,那么pos[0, 1, 2, …, n-1]记录这些最大值的位置,pos数组不再设-1的标记值。

具体源码如下:# include <iostream.h>void main(){//存放100个实数的数组double Num[100]={4543.9,4543.9,3,45,654.7,7,66,35,45,4,6,4543.9,5,46,54,6,43,5.980,34};//记录最大值所在位置的数组int pos[100];//初始设定数组的第1个元素为最大值int position=0;//j指示位置数组pos的下标int j=1;for(int i=1;i<100;++i)if(Num[i]>Num[position]) {position=i; //记下新的最大值的位置j=1; //位置数组pos的下标恢复为1,下标为0的位置为position预留}else if(Num[i]== Num[position])pos[j++]=i; //记下重复最大值的位置//位置数组pos的下标为0的位置为position预留pos[0]=position;//-1为标识值,表示位置数组pos下标为0, 1, 2…(j-1)的位置存//放的是最大值所在的位置if(j<100)pos[j]=-1;cout<<"最大值为:"<< Num[position]<<endl;cout<<"最大值所在的位置为:"<<endl;for(i=0; i<100; ++i){if(pos[i]==-1) //-1是标识值break;cout<<"第"<<(pos[i]+1)<<"个元素"<<endl;}}第一章概论练习答案上一章下一章本章练习题答案分页: [1] [2]3、解答:【逻辑结构】逻辑结构由结点集合K和关系集合R来表示,以学生每周的课程表为例:将每天的课程安排数据作为结点,一共引入7个结点,它们的名称依次为“星期一”,“星期二”,“星期三”,……,“星期日”。

全部结点组成结点集K。

这些结点是复合类型,是一个结构体,包括当日课程的名称,时间和地点等。

这些结点两两之间有一个时间关系r,r={(“星期一“,“星期二”),(“星期二”,“星期三”),(“星期三”,“星期四”),(“星期四”,“星期五”),(“星期五”,“星期六”),(“星期六”,“星期日”)。

此集合中的6个元素描述了“时间先后”关系r。

此外,还引入一个关系r*={“星期日”,“星期一”},r*只含有一个元素,以表示星期日和下一周工作日的时间顺序。

r和r*共同构成关系集R。

其中r属于线性结构。

R是一种环行的关系。

【存储结构】几种可行的存储方案比较1.顺序表:见图一优点:逻辑清晰,查阅修改方便;缺点:需要占用整块的存储空间,对空间要求较大图一顺序表存储课程表2.索引图二索引结构的课程表构造索引表,其中的指针分别指向每一天的课程优点:逻辑较清晰,不占用整块的存储空间,缺点:算法较复杂,附加的空间代价较高(有索引表)3.链表:链接的方法是可以采纳的一个方法,每个指针都指向逻辑关系中的紧邻后继,最后一个结点的指针指向首结点,构成一个循环链表.链表结构检索较繁琐. 【相关运算】常见的运算包括增、删、查、改运算,课程表的抽象数据类型可以定义如下:template<class ELEM>class table//当程序使用此table模板时,应该在前面附加#include<table>{public://创建一张空课程表table < ELEM > t;//创建一张天数为k的课程表,可默认k为7table < ELEM > t(int k);//设置某天的课程(时间地点等),该结点的地址可由索引表找出virtual void Setcourse( ELEM & pday ) = 0;//把一个新的结点插入课程表,使该结点在表中位置是nPos 如果nPos = -1 //则插入到表尾部(同时地址加入索引表)virtual void Addday( const ELEM * pday, int nPos = -1 ) = 0;//删除课程表中某天(结点),释放该结点的空间,该结点的地址可由索引表找出virtual void Removeday( ELEM & pday ) = 0;//清空整个课程表,成功返回truevirtual bool Clearall() = 0;//清空某天(结点)的所有内容,该结点的地址可由索引表找出,成功返回true virtual bool Clearday( ELEM & pday )= 0;//修改某天(结点)的课程(时间地点等),该结点的地址可由索引表找出virtual void Changecourse( ELEM & pday ) = 0;//输出某天(结点)的课程内容,该结点的地址可由索引表找出virtual void Printday( ELEM & pday) = 0;//输出所有课程内容(结点)virtual void PrintList() = 0;//根据系统时间查询当天课程virtual void Current() = 0;//统计课程总数virtual int Number() = 0;// 析构函数,清空课程表~table();private:ELEM * m_index; //索引表头指针}本章练习题答案分页: [1] [2]本章练习题答案分页: [1] [2]第二章线性表、栈和队列练习上一章下一章本章练习1、(教材习题2.1)给出一个算法,求单链表X中,内容为a的结点地址。

2、(教材习题2.5)给出一个算法,求出循环表中结点的个数。

3、(教材习题2.8)编号为1,2,3,4的四辆列车,顺序开进一个栈式结构的站台;问开出车站的顺序有多少种可能,请具体写出来。

4、(教材习题2.10)环状的队列,写出计算队列元素个数的程序。

5、(教材习题2.19)现有4个元素作为双端队列的输入,问可以得到多少种不同的排列?参考答案第二章线性表、栈和队列练习答案上一章下一章本章练习题答案分页: [1] [2]1、解答:【题意解析】本题没有指明是否存在多个内容为a的地址,在这里,我们考虑存在多个结点内容为a的情形。

【典型错误】没有考虑内容为a的地址可能有多个。

【数据结构】由于链表中内容为a的结点数目不确定,可以选择用一个新链表来存放找到的结点地址。

这样的存储结构优于定长数组。

本题中涉及到两个链表:原链表ListNode和用于存储结点地址的新链表ListAddress。

【算法描述】1.设pfirst和qfirst分别是这两个链表的头指针,p,q为指针变量。

2.p从链表X的表头开始向后移动,每当遇到原链表中内容为a的结点,就在新链表中增加一个结点记录下其地址(用指针指向该结点来进行记录),如此循环直到链表X 的表尾。

相关文档
最新文档