数据结构习题与实验C++.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构习题与实验C++.docx》由会员分享,可在线阅读,更多相关《数据结构习题与实验C++.docx(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构习题与实验-C+浙江万里学院内容简介数据结构是计算机专业的核心课,是重要的专业基础课。实践是学习本课程的 一个重要的环节。目前各种“数据结构”教材较为注重理论的叙述与介绍,算法描 述不拘泥某种语言的语法细节,默认读者已具备扎实的程序设计基础,可以在课下 独立完成数据结构实验。实际上在读者群中程序设计的基础并不一致,相当一部分 人基础较为薄弱。多数学生反映数据结构的上机实验存在一定的困难,希望有合适 的实验参考书指导学习。数据结构的理论学习也有一定的深度,存在一定的难度。 学生必须完成一定数量的思考题、练习题、书面作业题,一方面巩固基本知识、一 方面提高联系实际分析解决问题的能力。正是基
2、于以上的原因编写了这本“数据结 构实验与习题”。本资料的前期版本(用C语言描述算法,用C/C+描述算法)已经使用数届, 现在是第三次修订,主要是使用C+面向对象技术描述算法和实现程序。本参考书包括C+语言基础、书面作业练习题和上机实验习题三部分。在C+语言基础知识部分,这里针对数据结构上机实验所必须的C+基本知识 (结构体、类等等)做补充介绍。这部分内容非常重要,掌握的是否熟练会直接影 响数据结构”的学习。在习题部分,既有选择题、判断题,也有用图表解答的练习题、算法设计题或 综合解答分析题。并且配有部分练习题的答案供学生自学、练习、参考。在实验部分,包括有完整的C+语言源程序例题,介绍了一些设
3、计数据结构题 目所需的C+语言常用的知识和技巧。在实验题中,既有简单容易的验证题,即验 证已经给出的源程序,或者扩充已经给出的源程序,也有需独立思考设计的综合实 验题。第1部分、第2部分的习题1、习题2、习题5、习题6和第3部分的上机实验 要求及规范、实验1、实验2、实验5、实验6由杨秀金改写。第2部分的习题3、 习题9和第3部分的实验3、实验9由汪沁改写。第2部分的习题4、习题7、习题 8和第3部分的实验4、实验7、实验8由邓芳改写。由于时间仓足、水平有限,书 中难免存在错误和不妥之处,敬请读者指正。计算机与信息学院杨秀金汪沁邓芳2005年2月修订 于浙江万里学院钱湖校区第1部分C+语言基本
4、知识一、C+源程序结构1二、结构体及运用1三、类的基本概念及运用3四、结构体在类中的使用4第2部分书面作业练习题习题1绪论6习题2线性表8习题3栈和队列11习题4串13习题5数组15习题6树与二叉树17习题7图24习题8查找31习题9排序34第3部分上机实验习题上机实验要求及规范37实验1复数ADT及其实现 39实验2线性表40实验3栈和队列-47实验4串53实验5数组57实验6树与二叉树60实验7图64实验8查找68实验9排序71第1部分C+基本知识各种数据结构以及相应算法的描述总是要选用一种语言工具。在计算机科学发 展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采
5、用C 语言为描述工具的教材版本、至今又出现了采用C+语言为描述工具的多种教材版 本。本教实验指导书是为已经学习过C+语言的学生而编写。编写实验指导书目的 为了配合理论教学。程序要求在C+ Builder开发环境之下调试运行,采用面向对 象方法进行设计。典型的数据结构被设计成为类(class),典型算法设计成为类的 函数成员,然后在主函数中声明创建类对象,根据实际需要调用重要的算法。由于C+的使用具有一定的难度,为了同学更好的学习数据结构自身的知识内 容,减轻描述工具所带来的困难,这里针对数据结构上机实验所必须的C+基本知 识(结构体、类等等)做补充介绍。一、源程序组成#include . 编译
6、预处理class A );/类成员函数定义;int main()编译预处理等类的相关程序编码主函数程序代码这部分内容详细参见本指导书的第3部分的程序实例。二、结构体及运用数据结构课程所研究的问题均运用到“结构体”和“类”。在C+语言中结构体 和函数又是理解和掌握“类”的语法基础。定义结构体的一般格式:struct 结构体类型名类型名1 变量名1; 数据子域类型名2变量名2;类型名n变量名n;其中struct是保留字。结构体类型名由用户自己命名。在使用时必须声明一个 具体的结构体类型的变量,声明创建一个结构体变量的方法是:结构体类型名结构体变量名;一个结构体中可以包含多个数据子域。数据子域的类型
7、名一般指基本数据类型 (int char等),也可是已经定义的另一结构体名。数据子域变量名可以是简单变 量,也可以是数组。它们也可以称为结构体的数据成员,它们的访问控制具有公 有属性。1.通过“结构体变量名.数据子域”可以访问数据子域。/设计Student结构体,在主程序中运用。#include #include #include struct Student定义结构体 Studentlongnum;/学号intx;/成绩charname10;/姓名)int main()声明创建一个结构体变量si或者使用键盘输入cin si.num;cin sl.x;cin si.name; Student
8、si;为si的数据子域提供数据sl.num=1001 ;si. x=83;strcpy( si.name, * 李 明”);输出结构体变量si的内容cout 姓名:”vv si.name endl;cout44 学号:M sl.numendl: cout ” 成绩:M sl.x ednl;_getch(); return 0;)2.设计-维数组,每个数组元素是Student结构体类型,通过以下语句段可以 说明结构体数组的一般用法:通过“结构体数组名下标.数据子域”访问数据域。Student a5;声明创建一个结构体数组输出数组元素ai的学号域 输出数组元素ai的姓名域 输出数组元素ai的成绩域
9、for(int i=0, i ai.name;cout 成绩:;cinai.x;以上是关于结构体的基本概念和简单运用。三、类的基本概念及运用类的是面向对象程序的基本单位。类是山数据成员和相关的函数成员组成。从 面向对象的角度考虑“学生”这个类,它不仅包括“学生”的一般属性:学号、姓 名、成绩等等,还应包括对于这些属性的操作:输入/输出、听课、实验、等等。类定义的一般格式:class类名若干数据成员;若干函数成员;类的数据成员和函数成员均存在访问控制权限问题。访问控制分为三种:公有(public ) 私有(private)和受护(protected)。数据成员的定义和结构体中的数据域定义是相似的
10、。不同的是它们必须明确访 问控制。而公有数据成员,可以认为与结构体的数据域的访问权限相同。成员函数的定义又和一般函数的定义基本相同。不同的是类中成员函数也必须 明确访问控制权限。如果在类之中定义成员函数带函数体,并未有什么特殊之处。 如果在类之中仅有成员函数的原型声明,当在类定义之外定义函数体时,需要加上类的定义:定义类结构体Students私有成员/学号/ 成绩/姓名公有成员类限定标识“类名::下面是“学生 class Students private:long num;int x;char name 10;public:Students();Students。 ;void SetDat(
11、long n, int xO, char *na0 ) num=n; x=x0; strcpy( name,na0););void Students: :PrintOut() cout 姓名:void PrintOut();输出函数的原型声明/输出函数前加Students:“ name endl;cout学号:vv numendl: cout44 成绩:* x ednl; 在主程序中运用类Students, int main() Students s;声明创建一个类对象s,调用构造函数s.PrintOut();输出s的内容long m; int y; char xname10; coutvv”
12、输入学号,成绩,姓名:”; cinmyxname; s. SetDat( m, y, xname );修改对象 s 数据5. PrintOut();输出改变后s的内容_getch(); return 0; ) 运行结果: 姓名:O 学号:0 成绩:0 输入学号,成绩,姓名:1001 90 WangMing 姓名:WangMing 学号:1001 成绩:90这个例题中数据成员全部定义为私有(private),以便保证数据安全性。而函数成员全部定义为公有(public)成员函数,可以作为类对外部的的接口。 通过s. SetDat( m, y, xname );直接访公有函数成员SetDat(),将
13、实参(主函数的 局部变量m, y, xname)的数据赋给私有数据成员num, x, name。 通过 s.PrintOut();直接访公有函数成员PrintOut(),间接访问输出私有成员num, x, name。四、结构体在类中的使用/数组的容量/数据元素的类型1 .结构体数组做类的数据成员const int MAXSIZE=100; struct ElemType int numb;char name20;long tel;);class Sqlist private:ElemType elemMAXSIZE; 结构体 ElemType 类型的数组 elem做数据成员int length
14、;public:Sqlist( void);Sqlist() );其他函数;2.结构体指针变量做类的数据成员 struct NodeType int data;NodeType *next;/结点的结构定义数据域指针域);class Link private:NodeType *Head;类声明指向结构构体N odeT ype的指针变61Head做数据成员public:Link () Head=new NodeType; 间Head-next=Head; 空环);-Link() ;void creat();void outs(););/为头结点申请空/头结点Head形成Head第2部分书面练习
15、题习题1 绪论1.1单项选择题1 .数据结构是一门研究非数值计算的程序设计问题中,数据元素的、数据信 息在计算机中的以及一组相关的运算等的课程。A.操作对象B .计算方法C.逻辑结构D.数据映象A.存储结构B.关系C.运算D.算法2 .数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是的 有限集合,R是D上的有限集合。A.算法B.数据元素C.数据操作D .数据对象A.操作B.映象C.存储D.关系3 .在数据结构中,从逻辑上可以把数据结构分成 oA.动态结构和静态结构B .紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4 .算法分析的目的是,算
16、法分析的两个主要方面是。A.找出数据结构的合理性C.分析算法的效率以求改进A.空间爱杂性和时间爱杂性C.可读性和文档性B.研究算法中的输入和输出的关系D.分析算法的易懂性和文档性B,正确性和简明性D.数据复杂性和程序复杂性5.计算机算法指的是.A.计算方法,它必具备输入、输出和等五个特性。B.排序方法D.调度方法B,可行性、确定性和有穷性 D.易读性、稳定性和安全性C.解决问题的有限运算序列A.可行性、可移植性和可扩充性C.确定性、有穷性和稳定性1.2填空题(将正确的答案填在相应的空中)1 .数据逻辑结构包括、和 三种类型,树形结构和图形结构合称为。2 .在线性结构中,第一个结点 前驱结点,其
17、余每个结点有且只有个前驱结点;最后个结点 后续结点,其余每个结点有且只有 个后续结点。3 .在树形结构中,树根结点没有 结点,其余每个结点有且只有 个直接前驱结点,叶子结点没有 结点,其余每个结点的直接后续结点可以。4 .在图形结构中,每个结点的前驱结点数和后续结点数可以。5 .线性结构中元素之间存在 关系,树形结构中元素之间存在关系,图形结构中元素之间存在关系。6 .算法的五个重要特性是。7 .分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是for (i=0;in;i+)for (j=O;jn; j+)Aij=0;8 .分析下面算法(程序段),给出最大语句频度一,该算法的时间复
18、杂度是for (i=0;in;i+)for (j=0; ji; j+)AiJUJ=O;9 .分析下面算法(程序段),给出最大语句频度一,该算法的时间复杂度是s=0;for (i=0;in;i+)for (j=O;jn;j+)for (k=0;kn;k+) s=s+Bmjk;sum=s;10 .分析下面算法(程序段)给出最大语句频度,该算法的时间复杂度是i=s=0;while (sn) i+;s+=i;/s=s+i11 .分析下面算法(程序段)给出最大语句频度,该算法的时间复杂度是i=l;while (i=n)i=i*2;1.3算法设计题1 .试写一算法,自大到小依次输出顺序读入的三个数x, 丫
19、和z的值.2 .试写一算法,求出n个数据中的最大值。写出最大语句频度,该算法的时间 复杂度。习题答案1.1 1.C.A2. B.D 3.C4. C,A 5. C,B1.2 1.线性结构、树形结构、图形结构,非线性结构2 .没有、1、没有、13 .前驱、1、后续、任意多个4 .任意多个5 , 一对一、一对多、多对多6 .有穷性、确定性、可行性、输入、输出7 .最大语句频度:I?,时间复杂度:.0(1?)8 .最大语句频度:n(n+l)/2 ,时间复杂度:.0(/)9 .最大语句频度:n3 ,时间复杂度:.0(/) 10 .最大语句频度:n?,时间复杂度:.0(1?)11 .最大语句频度:log2
20、n,时间复杂度:.O (log2n )习题2线性表2.1单项选择题1 .一个向量(即一批地址连续的存储单元)第一个元素的存储地址是100,每 个元素的长度为2,则第5个元素的地址是next= =NULLC. head-next= =headD. head!=NULL8 .带头结点的单链表head为空的判定条件是一oA. head= =NULLB. head-next= =NULLC. head-next= =headD. head!=NULL9 .非空的循环单链表head的尾结点(由p所指向)满足一。A. p-next= =NULLB. p= =NULLC. p-next= =headD. p
21、= =head10 .在双向循环链表的p所指结点之后插入s所指结点的操作是oA. p-right=s; s-left=p; p-right-left=s; s-right=p-right;B. p-right=s; p-right-left=s; s-left=p; s-right=p-right;C. s-left=p; s-right=p-right; p-right=s; p-right-left=s;D. s-left=p; s-right=p-right; p-right-left=s; p-right=s;11 .在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p 之
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题 实验 C+
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内