数据结构与算法实验指导书(计算机系列教材十二五普通高等教育本科国家级规划教材)

数据结构与算法实验指导书(计算机系列教材十二五普通高等教育本科国家级规划教材)
作者: 编者:汪沁//邓芳//奚李峰
出版社: 清华大学
原售价: 19.00
折扣价: 15.20
折扣购买: 数据结构与算法实验指导书(计算机系列教材十二五普通高等教育本科国家级规划教材)
ISBN: 9787302499442

作者简介

内容简介

第3部分面向对象语言实现数据结构 本部分实验指导是为已经学习过C++语言的学生而编写。编写实验指导的目的是为了配合理论教学。程序要求在Visual C++或者C++ Builder开发环境之下调试运行,采用面向对象方法进行设计。典型的数据结构被设计成为类(class),典型算法设计成为类的函数成员,然后在主函数中声明创建类对象,根据实际需要调用重要的算法。 由于C++的使用具有一定的难度,为了更好地学习数据结构自身的知识内容,克服描述工具所带来的困难,这里针对数据结构上机实验所必需的C++基本知识(结构体、类等等)做补充介绍。 1. 源程序组成 这部分内容参见本指导书的程序实例。 2. 结构体及运用 数据结构课程所研究的问题均运用到“结构体”和“类”。在C++语言中,结构体和函数又是理解和掌握“类”的语法基础。定义结构体的一般格式: struct 结构体类型名 {类型名1 变量名1;//数据子域 类型名2 变量名2;  类型名n 变量名n; }其中,struct是保留字。结构体类型名由用户自己命名。在使用时必须声明一个具体的结构体类型的变量,声明创建一个结构体变量的方法是: 结构体类型名结构体变量名;一个结构体中可以包含多个数据子域。数据子域的类型名一般指基本数据类型(int char 等),也可以是已经定义的另一结构体名。数据子域变量名可以是简单变量,也可以是数组。它们也可以称为结构体的数据成员,其访问控制具有“公有”属性。 (1) 通过“结构体变量名.数据子域” 可以访问数据子域。// 设计Student结构体,在主程序中运用。 #include #include #include struct Student//定义结构体Student {longnum; //学号 int x;//成绩 charname\\[10\\]; //姓名 } int main( ) { Student s1;//声明创建一个结构体变量s1 //为s1的数据子域提供数据 s1.num=1001 ; s1. x=83; strcpy( s1.name, \" 李明\"); //输出结构体变量s1 的内容 cout<< \"姓名: \"<< s1.name <>a\\[i\\].num;//输入数组元素a\\[i\\]的学号域 cout<<\"姓名:\"; cin>> a\\[i\\].name;//输入数组元素a\\[i\\]的姓名域 cout<<\"成绩:\"; cin>>a\\[i\\].x;//输入数组元素a\\[i\\]的成绩域 }以上是关于结构体的基本概念和简单运用。 数组a有5个数组元素,每个数组元素都是Student结构体类型。数组a的存储结构如下: 3. 类的基本概念及运用 类是面向对象程序的基本单位。类由数据成员和相关的函数成员组成。从面向对象的角度考虑“学生”这个类,它不仅包括“学生”的一般属性(学号、姓名、成绩等),还应包括对于这些属性的操作(输入输出、听课、实验等)。 类定义的一般格式: class类名 {若干数据成员; 若干函数成员; };类的数据成员和函数成员均存在访问控制权限问题。访问控制分为3种: 公有(public)、私有(private)和受保护(protected)。 数据成员的定义和结构体中的数据域定义是相似的。不同的是,它们必须明确访问控制。而公有数据成员,可以认为与结构体的数据域的访问权限相同。 成员函数的定义与一般函数的定义基本相同。不同的是,类中成员函数也必须明确访问控制权限。如果在类之中定义成员函数带函数体,并没有什么特殊之处。如果在类之中仅有成员函数的原型声明,那么当在类定义之外定义函数体时,需要加上类限定标识“类名: : ”。下面是“学生”类的定义: class Students//定义类结构体Students {private: //私有数据成员 longnum;//学号 int x; //成绩 charname\\[10\\];//姓名 public: //公有成员函数 Students( ); Students ( long n, int x0, char na0 ) { num=n;x=x0;strcpy( name,na0);} ~Students( ) { }; void SetDat( long n, int x0, char na0 ) { num=n;x=x0;strcpy( name,na0); } void PrintOut( );//输出函数的原型声明 //其他函数…; }; voidStudents::PrintOut( )//输出函数前加Students:: {cout<< \" 姓名: \"<< name <>m>>y>>xname; s. SetDat( m, y, xname ) ;//修改对象s的数据 s. PrintOut( );//输出改变后s的内容 Studentsw(1002, 85, \"LiHua\") s; //声明创建一个类对象w,调用有参构造函数 w. PrintOut( ); //输出对象w的内容 _getch( ); return 0; }运行结果: 姓名:O 学号:0 成绩:0 输入学号,成绩,姓名: 1001 90 WangMing 姓名:WangMing 学号:1001 成绩:90 姓名:LiHua 学号:1002 成绩:85通过上面两个类对象的图示,可以了解它们的内部数据情况。 对象s的数据是通过键盘输入,再经由s. SetDat( m, y, xname ) 这个公有函数的运行,提供给对象s的私有数据成员。 而对象w的数据是通过Studentsw(1002, 85, \"LiHua\") s;声明创建对象w时自动调用构造(有形参的)函数,将实参数据提供给对象w的私有数据成员。 这个例题中的数据成员全部定义为私有(private),以便保证数据安全性。 而函数成员全部定义为公有(public)成员函数,可以作为类对外部的接口。通过s. SetDat( m, y, xname ) 直接访问公有函数成员SetDat( ), 将实参(主函数的局部变量m、y、xname)的数据赋值给类的私有数据成员num、x、name。通过 s.PrintOut( )直接访问公有函数成员PrintOut( ),由它间接访问和输出私有数据成员num、x、name。 在面向对象的程序设计中,正确理解构造函数的作用是非常重要的。 在主函数中,语句“Students s;”的作用是自动调用无参构造函数,声明创建一个类对象s。主函数中倒数第3行语句“Students w (1002, 85, \"LiHua\")s;”的作用是自动调用带有形参的构造函数,声明创建一个类对象w。而语句“w. PrintOut();”的作用是输出对象w的数据内容。 \"本书是数据结构课程的辅助教材,采用C和C++两种语言来描述数据结构,让学生在实验与习题中体会与掌握数据结构,同时培养编程能力和分析能力。主要内容包括实验与习题两大部分,用于巩固数据结构的理论知识,提高实践应用能力。 本书内容立足于高校教学的要求,适用于本科院校的课程和学生群体,可作为数据结构与算法课程的辅助教材,也可作为初学数据结构读者的自学读物。 \"