数据结构严蔚敏C语言版第三章
- 格式:ppt
- 大小:750.50 KB
- 文档页数:77


可复制、编制,期待你的好评与关注!
数据结构(C语言版)(第2版)
课后习题答案
李冬梅
2015.3
可复制、编制,期待你的好评与关注! 目 录
第1章 绪论 .................................................................................................................. 1
第2章 线性表 .............................................................................................................. 5
第3章 栈和队列......................................................................................................... 13
第4章 串、数组和广义表 ......................................................................................... 26
第5章 树和二叉树 ..................................................................................................... 33
第6章 图 ...................................................................................................................... 43
第7章 查找 ................................................................................................................ 54
严蔚敏数据结构课后习题及答案解析
数据结构课程是计算机科学与技术专业中非常重要的一门基础课程,对于学习者来说,课后习题的巩固和答案解析是学习的重要辅助材料。本文将针对严蔚敏老师所著的《数据结构(C语言版)》中的课后习题及答案解析进行介绍和总结。
1. 第一章:绪论
(略)
2. 第二章:线性表
(略)
3. 第三章:栈和队列
3.1 课后习题
3.1.1 课后习题一:
给定一个整数序列,请设计一个算法,其中删除整数序列中重复出现的元素,使得每个元素只出现一次。要求空间复杂度为O(1)。
3.1.2 课后习题二:
使用栈操作实现一个队列(其中队列操作包括入队列和出队列)。
3.2 答案解析
3.2.1 答案解析一: 我们可以使用双指针法来实现这一算法。设定两个指针,一个指向当前元素,另一个指向当前元素的下一个元素。比较两个元素是否相等,如果相等,则删除下一个元素,并移动指针。如果不相等,则继续移动指针。这样,当指针指向序列的最后一个元素时,算法结束。空间复杂度为O(1),时间复杂度为O(n)。
3.2.2 答案解析二:
使用两个栈来实现一个队列。一个栈用于入队列操作,另一个栈用于出队列操作。当需要入队列时,将元素直接入栈1。当需要出队列时,判断栈2是否为空,如果为空,则将栈1中的元素逐个弹出并压入栈2中,然后从栈2中弹出栈顶元素。如果栈2非空,则直接从栈2中弹出栈顶元素。这样,就可以实现使用栈操作来实现队列操作。
4. 第四章:串
(略)
5. 第五章:数组和广义表
(略)
6. 第六章:树和二叉树
(略)
7. 第七章:图
(略) 通过对严蔚敏老师所著《数据结构(C语言版)》中的课后习题及答案解析的介绍,可以帮助学习者更好地理解和掌握数据结构这门课程的知识内容。课后习题不仅可以帮助巩固所学知识,更加于提升学习者的能力和应用水平。希望本文对于学习者们有所帮助。
(文章结束)
严蔚敏 数据结构C语言版答案详解
第1章 绪论
1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。
解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据对象是性质相同的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
存储结构是数据结构在计算机中的表示。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。
1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。
解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。
1.3 设有数据结构(D,R),其中
4,3,2,1ddddD,rR,4,3,3,2,2,1ddddddr
试按图论中图的画法惯例画出其逻辑结构图。
解:
1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。
解:
ADT Complex{
数据对象:D={r,i|r,i为实数}
数据关系:R={}
基本操作:
InitComplex(&C,re,im)
第六章 树和二叉树
6.33
int Is_Descendant_C(int u,int v)//在孩子存储结构上判断u是否v的子孙,是则返回1,否则返回0
{
if(u==v) return 1;
else
{
if(L[v])
if (Is_Descendant(u,L[v])) return 1;
if(R[v])
if (Is_Descendant(u,R[v])) return 1; //这是个递归算法
}
return 0;
}//Is_Descendant_C
6.34
int Is_Descendant_P(int u,int v)//在双亲存储结构上判断u是否v的子孙,是则返回1,否则返回0
{
for(p=u;p!=v&&p;p=T[p]);
if(p==v) return 1;
else return 0;
}//Is_Descendant_P
6.35
这一题根本不需要写什么算法,见书后注释:两个整数的值是相等的.
6.36
int Bitree_Sim(Bitree B1,Bitree B2)//判断两棵树是否相似的递归算法
{
if(!B1&&!B2) return 1;
else
if(B1&&B2&&Bitree_Sim(B1->lchild,B2->lchild)&&Bitree_Sim(B1->rchild,B2->rchild))
return 1;
else return 0;
}//Bitree_Sim
6.37
void PreOrder_Nonrecursive(Bitree T)//先序遍历二叉树的非递归算法
{
InitStack(S); Push(S,T); //根指针进栈
while(!StackEmpty(S))
{