当前位置:文档之家› 数据结构实验指导书2014(含答案)

数据结构实验指导书2014(含答案)

数据结构实验指导书2014(含答案)
数据结构实验指导书2014(含答案)

《数据结构》实验指导书

专业:__电子商务___班级:___2013级电商2班_____组序:_____________ 学号:__12134675_____姓名:____王苏桐____

中国矿业大学管理学院

2014 年12 月

上篇程序设计基础

实验一 Java编程环境

【实验目的】

1.掌握下载Java sdk软件包、Eclipse软件的安装和使用方法

2.掌握设置Java程序运行环境的方法

3.掌握编写与运行Java程序的方法

4.了解Java语言的概貌

【实验内容】

一 JDK下载与安装

1. 下载JDK

为了建立基于SDK的Java运行环境,需要先下载免费SDK软件包。SDK包含了一整套开发工具,其中包含对编程最有用的是Java编译器、Applet查看器和Java解释器。下载链接

https://www.doczj.com/doc/9214189138.html,。

2.安装SDK

运行下载的JDK软件包,在安装过程中可以设置安装路径及选择组件,默认的组件选择是全部安装,安装成功后,其中bin文件夹中包含编译器(javac.exe)、解释器(java.exe)、Applet查看器(appletviewer.exe)等可执行文件,lib文件夹中包含了所有的类库以便开发Java程序使用,demo文件夹中包含开源代码程序实例。

安装成功后,文件和子目录结构如图1所示。其中bin文件夹中包含编译器(javac.exe)、解释器(java.exe)、Applet查看器(appletviewer.exe)等可执行文件,lib文件夹中包含了所有的类库以便开发Java程序使用,sample文件夹包含开源代码程序实例,src压缩文件中包含类库开源代码。

图1

二.设置环境变量

J DK中的工具都是命令行工具,需要从命令行即MS-DOS提示符下运行它们。很多人可能会不习惯,但这是Sun特意采取的策略,为的是把精力更多投入到Java语言本身而不是花在开发工具上。以Windows XP为例说明设置过程。

右击桌面“我的电脑”图标,选择“属性”菜单

图 2

在“高级”选项卡中单击“环境变量”按钮,将出现“环境变量”设置界面

图 3

在“系统变量”框中点击“新建”按钮,在出现的“编辑系统变量”对话框中,在“变量名”栏的文本框内输入“JavaHome”,在变量值栏的文本框内输入jdk安装的主目录。

图 4

在“系统变量”框中选择“path”,然后单击“编辑”按钮,在出现的“编辑系统变量”对话框中,在“变量值”栏的命令后添加“;%JavaHome%\bin”。

图 5

在“系统变量”框中,单击“新建”按钮,在出现的“新建系统变量”的对话框中,在“变量名”栏中输入“classpath”,在变量值栏输入“.;%JavaHome%\lib”。其中“.”表示当前目录。

图 6

设置完成后,单击“开始”->“所有程序”->“附件”->“命令提示符”打开DOS窗口,在命令行提示符输入“java”或“javac”回车后,如果出现其用法参数提示信息,则安装正确。

图 7

三.编译Java程序

Java源程序编写后,要使用Java编译器(javac.exe)进行编译,将Java源程序编译成可执行的程序代码。Java源程序都是扩展名为.java的文件。编译时,首先读入Java源程序,然后进行语法检查,如果出现问题就终止编译。语法检查通过后,生成可执行程序代码即字节码,字节码文件名和源文件名相同,扩展名为.class。

(1)打开命令提示符窗口,进入java源程序所在路径。

(2)键入编译器和要编译的源程序文件名:javac HelloWorld.java。按回车键开始编译。如源程序无错误,则屏幕上无输出。

四.运行Java程序

使用java编译器(java.exe)可将编译后的字节码文件Hello.class解释为本地计算机代码。在命令提示符窗口键入解释器和要解释的字节码文件名 java Hello。按回车键即开始执行程序并输出结果。注意:字节码文件区分大小写。

图 8

五.Eclipse的使用

Eclipse是由IBM公司于2001年首次推出的一个综合开发环境(Integrated Development Environment) IDE;是一个框架和一组被称为平台核心的服务程序,用于通过插件组件构建开发环境。核心的任务是让每样东西动起来,并加载所需的外挂程序。当启动Eclipse时,先执行的就是这个组件,再由这个组件加载其它外挂程序。Eclipse 附带了一个包括 Java 开发工具(Java Development Tools,JDT)的标准插件集,因此如果要使用Eclipse来开发Java程序,必须安装SDK作为它的插件才能使它正常运作。

双击安装好的 Eclipse 程序图标,得到如下的运行屏幕:

图 9

Eclipse的几个主要视图窗口:

图 10

1.使用Eclipse 开发应用程序

在Navigator 中创建一个项目:右键单击 Navigator 视图空白处,然后选择 New=>Project 。当 New Project 对话框出现时,选择左面的 Java 文件夹中的项目: Java Project ”,然后单击“Next ”按钮,在新出现的窗口的项目名称(Project name )处输入“Hello ”,在提示内容名称(Contents )处选择“Create project from existing source ”单选项,并在对应的文本框中输入“D:\Myjava ”,将项目创建在自己的用户文件夹中,然后按“Finish ”按钮。

在Java 的Navigator 视图中,右键单击“Hello ”项目,选择 New=>Class 。在随后出现的对话框中,键入“Hello ”作为类名称。在“Which method stubs would you like to create?

”下面,

N a v i g a t o r 视图允许您创建、选择和删除项目。

在此可编辑J a v a 程序源代码。

对于J a v a 源文件,这里将显示所有已声明的类、属性和方法。

这里收集关于您正在操作的项目的信息;这可以是 E c l i p s e 生成的运行结果,也可以是编译错误,也可以是您手动添加的任务。

选中“public static void main(String[] args)”复选框,然后按“Finish”按钮。

在编辑窗口输入源代码:

图 11

根据系统提示更改错误之后:按Run 按钮。一个新的选项卡式窗格将出现在下面的窗格(控制台)中,其中显示了程序的输出。

图 12

实验二 Java语言基础

【实验目的】

1. 掌握java基本数据类型、变量使用。

2. 理解运算符的优先级

3. 掌握运算符与表达式

4. 掌握顺序结构、选择结构和循环结构语法的程序设计方法

【实验内容】

1.编写程序完成,将168转换成861输出到屏幕上。

package experiment;

public class Exchange {

public static void main(String[] args) {

// TODO 自动生成的方法存根

int a=168;

int a1=a/100;

int a2=a/10%10;

int a3=a%10;

a=a3*100+a2*10+a1;

System.out.println(a);

}

}

2.编写Java应用程序,把100~1000的自然数中能够被3整除的数输出到屏幕上。

package experiment;

public class Test {

public static void main(String[] args) {

for (int i=100;i<=1000;i++){

if(i%3==0)

System.out.print(i+",");

}

}

}

3.求解0至100之间所有偶数的和。

package experiment;

public class Sum {

public static void main(String[] args) { // TODO 自动生成的方法存根

int sum=0;

for(int i=0;i<=100;i++){

if(i%2==0)

sum+=i;

}

System.out.println(sum);

}

}

4.打印小于1000的斐波纳契数。

package experiment;

public class Series {

public static void main(String[] args) { // TODO 自动生成的方法存根

int f0=0;

int f1=1;

int f2;

System.out.print(f0);

while(f1<1000){

f2=f0+f1;

f0=f1;

f1=f2;

System.out.print(","+f0);

}

}

}

5.编写程序,输出区间[200,300]上的所有素数。

package experiment;

package experiment;

public class Prime{

public static void main(String[] args) {

int i,j;

System.out.println("200-300之间的素数有:");

for(i=200;i<=300;i++){

for(j=2;j<=i-1;j++){

if(i%j==0)

break;

}

if(j>i-1){

System.out.print(" "+i);

}

}

}

}

实验三数组和字符串

【实验目的】

1. 掌握数组的定义和使用方法

2. 掌握字符串类型的定义和使用方法

【实验内容】

1.编写程序,求下列二维数组中各行元素之和并查找其值最大的那个行。

{23, 45, 65, 34, 21, 67, 78},

{46, 14, 18, 46, 98, 63, 88},

{98, 81, 64, 90, 21, 14, 23},

{54, 43, 55, 76, 22, 43, 33};

package experiment;

public class TableTester {

public static void main(String[] args) {

int myTable[][]={

{23,45,65,34,21,67,78},

{46,14,18,46,98,63,88},

{98,81,64,90,21,14,23},

{54,43,55,76,22,43,33}

};

int sum,max,maxRow=0;

max=0;

for(int row=0;row<4;row++){

sum=0;

for(int col=0;col<7;col++)

sum+=myTable[row][col];

if(sum>max){

max=sum;

maxRow=row;

}

}

System.out.println("Row "+maxRow+" has the highest sum of "+max);

}

}

2. 设给定一组整型数组,求它们的平均值及最大值。

package experiment;

class Calculator {

public static double calculateAverage(int[]numbers){

int sum=0;

for(int i=0;i

sum+=numbers[i];

return sum/(double)numbers.length;

}

public static int findMaximum(int[]numbers){

int max=numbers[0];

for(int i=0;i

if(numbers[i]>max)

max=numbers[i];

return max;

}

}

package experiment;

public class CalculatorTester2 {

public static void main(String[] args) {

int numbers[]={12,32,43,65,87,95,24,52,63,75};

System.out.println("The average is "+Calculator.calculateAverage(numbers));

System.out.println("The maximum is "+Calculator.findMaximum(numbers));

}

}

3. 编写一个Java程序,完成以下功能:

(1)声明一个名为s的字符串,并使它的内容为“I love Java!”

(2)打印整个字符串

(3)使用length()方法打印字符串的长度

(4)使用charAt()方法打印字符串的第一个字符

(5)使用charAt()和length()方法打印字符串的最后一个字符

(6)使用indexOf()方法和substring()方法打印字符串中的第一个单词

package experiment;

public class LoveJava {

public static void main(String[] args) {

String s="I love Java!";

System.out.println(s);

System.out.println(s.length());

System.out.println(s.charAt(0));

System.out.println(s.charAt(s.length()-1));//从0开始,长度减一

System.out.println(s.substring(0, s.indexOf(" ")));//截取从0开始到第一个空格}

}

实验四面向对象程序设计

【实验目的】

1.掌握Java类的定义和使用方法。

2.掌握对象的声明和使用。

3.构造函数的概念和使用。

4.掌握类及其成员的访问控制符的使用。

5.掌握Java类的继承关系和派生方法。

6.理解多态的概念与使用。

【实验内容】

1.编写一个Java应用程序,该程序有两个类:Vehicle(用于描述机动车)和User(主类)。具体要求如下:

(1)Vehicle类有一个double类型的变量speed,用于描述机动车的速度,一个int类型的变量power用于描述机动车的功率。定义speedUp(int s)方法,体现机动车加速功能。定义speedDown( )方法,体现机动车减速功能。定义setPower(int p)方法,用于设置机动车的功率。定义getPower( )方法,用于获取机动车的功率。

(2)在主类User的main( )方法中用Vehicle类创建对象,并让该对象调用方法设置功率,演示加速和减速功能。

请将下列程序源代码补齐,并写出程序运行结果。

Vehicle.java

public class Vehicle

{

【代码1】 //声明double型变量speed

【代码2】 //声明int型变量power

void speedUp(int s)

{

【代码3】 //将参数s的值与成员变量speed的和赋值给成员变量speed }

void speedDown(int d)

{

【代码4】 //将成员变量speed与参数d的差赋值给成员变量speed }

void setPower(int p)

{

【代码5】 // 将参数p的值赋值给成员变量power

}

int getPower( )

{

【代码6】 // 返回成员变量power的值

}

double getSpeed( )

{

return speed;

}

}

User.java

public class User {

public static void main(String[] args) {

Vehicle car1,car2;

【代码7】 //使用new运算符和默认的构造方法创建对象car1

【代码8】 //使用new运算符和默认的构造方法创建对象car2

car1.setPower(128);

car2.setPower(76);

System.out.println("car1的功率是:"+car1.getPower( ) );

System.out.println("car2的功率是:"+car2.getPower( ) );

【代码9】//car1调用speedUp( )方法将自己的speed的值增加80

【代码10】//car2调用speedUp( )方法将自己的speed的值增加100 System.out.println("car1的速度是:"+car1.getSpeed( ) );

System.out.println("car2的速度是:"+car2.getSpeed( ) );

car1.speedDown(10);

car2.speedDown(20);

System.out.println("car1目前的速度是:"+car1.getSpeed( ) );

System.out.println("car2目前的速度是:"+car2.getSpeed( ) );

}

}

2.编写Java程序,定义一个表示学生的类Student。这个类的属性有“学号”、“班号”、“姓名”、“性别”、“年龄”,方法有“获得学号”、“获得班号”、“获得性别”、“获得姓名”、“获得年龄”、“获得年龄”。另外再为类Student增加一个方法public String toString( ),该方法把Student类的对象的所有属性信息组合成一个字符串以便输出显示。编写一个Java Application程序,创建Student类的对象,并验证功能。

请将下列程序源代码补齐,并写出程序运行结果。

class Student{

【代码段1】

p ublic Student(long studentID,int classID,String name,String sex,int age)

{

this.studentID=studentID;

this.classID=classID;

https://www.doczj.com/doc/9214189138.html,=name;

this.sex=sex;

this.age=age;

}

p ublic long getStudentID()

{

return studentID;

}

p ublic int getClassID()

{

return classID;

}

p ublic String getName()

{

return name;

}

p ublic String getSex()

{

return sex;

}

p ublic int getAge()

{

return age;

}

p ublic String toString()

{

【代码段2】

}

}

public class StudentDemo

{

p ublic static void main(String[] args)

{

Student s1=new Student(902,22,"Tomcat","male",30);

System.out.println(s1.toString());

}

}

3.阅读如下所示的3个Java类的定义,分析它们之间的关系,写出运行结果。class SuperClass

{

int x;

SuperClass()

{

x=3;

System.out.println("in SuperClass : x=" +x);

}

void doSomething()

{

System.out.println("in SuperClass.doSomething()");

}

}

class SubClass extends SuperClass

{

int x;

SubClass()

{

super(); //调用父类的构造方法

x=5; //super( ) 要放在方法中的第一句

System.out.println("in SubClass :x="+x);

}

void doSomething( )

{

super.doSomething( ); //调用父类的方法

System.out.println("in SubClass.doSomething()");

System.out.println("super.x="+super.x+" sub.x="+x);

}

}

public class Inheritance {

public static void main(String args[]) {

SubClass subC=new SubClass();

subC.doSomething();

}

}

4.假定根据学生的3门学位课程的分数决定其是否可以拿到学位,对于本科生,如果3门课程的平均分数超过60分即表示通过,而对于研究生,则需要平均超过80分才能够通过。根据上述要求,请完成以下Java类的设计:

(1)设计一个基类Student描述学生的共同特征。

(2)设计一个描述本科生的类Undergraduate,该类继承并扩展Student类。

(3)设计一个描述研究生的类Graduate,该类继承并扩展Student类。

(4)设计一个测试类StudentDemo,分别创建本科生和研究生这两个类的对象,并输出相关信息。

要求从键盘输入学生姓名、学历、课程成绩,然后在显示器上输出结果。

5.(选做)假定某个公司编写雇员工资支付程序,这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资:

(1)经理(Manager)——每月获得一份固定的工资

(2)销售人员(Salesman)——在基本工资的基础上每月还有销售提成。

(3)一般工人(Worker)——则按他每月工作的天数计算工资。

根据上述要求试用类的继承和相关机制描述这些功能,并编写一个Java Application程序,演示这些类的用法。(提示:应设计一个雇员类(Employee)描述所有雇员的共同特性,这个类应该提供一个计算工资的抽象方法ComputeSalary( ),使得可以通过这个类计算所有雇员的工资。经理、销售人员和一般工人对应的类都应该继承这个类,并重新定义计算工资的方法,进而给出它的具体实现。)

数据结构课程实验指导书

数据结构实验指导书 一、实验目的 《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。本课程较为系统地论述了软件设计中常用的数据结构以及相应的存储结构与实现算法,并做了相应的性能分析和比较,课程内容丰富,理论系统。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: 1)理论艰深,方法灵活,给学习带来困难; 2)内容丰富,涉及的知识较多,学习有一定的难度; 3)侧重于知识的实际应用,要求学生有较好的思维以及较强的分析和解决问题的能力,因而加大了学习的难度; 根据《数据结构》课程本身的特性,通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生分析问题,组织数据及设计大型软件的能力。 课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面: (1)加深对课堂讲授内容的理解 实验是对学生的一种全面综合训练。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实验题中的问题比平时的习题复杂得多,也更接近实际。实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变" 活" ,起到深化理解和灵活掌握教学内容的目的。 不少学生在解答习题尤其是算法设计时,觉得无从下手。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出

现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 (2) 培养学生软件设计的综合能力 平时的练习较偏重于如何编写功能单一的" 小" 算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。 通过实验使学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在需求分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。 (3) 熟悉程序开发环境,学习上机调试程序一个程序从编辑,编译,连接到运行,都要在一定的外部操作环境下才能进行。所谓" 环境" 就是所用的计算机系统硬件,软件条件,只有学会使用这些环境,才能进行 程序开发工作。通过上机实验,熟练地掌握程序的开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆语法错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,尽快掌握程序调试方法是非常重要的。分析问题,选择算法,编好程序,只能说完成一半工作,另一半工作就是调试程序,运行程序并得到正确结果。 二、实验要求 常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的实验题目的远不如从实际问题中的复杂程度度高,但为了培养一个软件工作者所应具备的科学工作的方法和作风,也应遵循以下五个步骤来完成实验题目: 1) 问题分析和任务定义 在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么。本步骤强调的是做什么?而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的

(完整版)数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1 .实验目的 (1 )掌握使用Visual C++ 6.0 上机调试程序的基本方法; (2 )掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2 .实验要求 (1 )认真阅读和掌握和本实验相关的教材内容。 (2 )认真阅读和掌握本章相关内容的程序。 (3 )上机运行程序。 (4 )保存和打印出程序的运行结果,并结合程序进行分析。 (5 )按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>// 头文件 #include// 库头文件------ 动态分配内存空间 typedef int elemtype;// 定义数据域的类型 typedef struct linknode// 定义结点类型 { elemtype data;// 定义数据域 struct linknode *next;// 定义结点指针 }nodetype; 2)创建单链表

nodetype *create()// 建立单链表,由用户输入各结点data 域之值, // 以0 表示输入结束 { elemtype d;// 定义数据元素d nodetype *h=NULL,*s,*t;// 定义结点指针 int i=1; cout<<" 建立一个单链表"<> d; if(d==0) break;// 以0 表示输入结束 if(i==1)// 建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));// 表示指针h h->data=d;h->next=NULL;t=h;//h 是头指针 } else// 建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t 始终指向生成的单链表的最后一个节点

大学物理学实验指导书_4

大学物理学实验指导书 大学物理实验 力学部分 实验一长度与体积的测量 实验类型:验证 实验类别:专业主干课 实验学时:2 所属课程:大学物理

所涉及的课程和知识点:误差原理有效数字 一、实验目的 通过本实验的学习,使学生掌握测长度的几种常用仪器的使用,并会正确读数。练习作好记录和误差计算。 二、实验要求 (1)分别用游标卡尺、螺旋测微计测金属圆筒、小钢球的内外径及高度,并求体积。(2)练习多次等精度测量误差的处理方法。 三、实验仪器设备及材料 游标卡尺,螺旋测微计,金属圆柱体,小钢球,铜丝 四、实验方案 1、用游标卡尺测量并计算所给样品的体积。 2、分别用千分尺和读数显微镜测量所给金属丝的直径。 数据处理 注意:有效数字的读取和运用,自拟表格,按有关规则进行数据处理。 描述实验过程(步骤)以及安全注意事项等,设计性实验由学生自行设计实验方案。 五、考核形式 实际操作过程实验报告 六、实验报告 实验原理,实验步骤,实验数据处理,误差分析和处理。 对实验中的特殊现象、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等。 七、思考题 1、游标卡尺测量长度时如何读数 游标本身有没有估读数 2、千分尺以毫米为单位可估读到哪一位初读数的正负如何判断 待测长度如何确定 实验二单摆 实验类型:设计 实验类别:专业主干课 实验学时:2 所属课程:大学物理 所涉及的课程和知识点:力学单摆周期公式 一、实验目的 通过本实验的学习,使学生掌握使用停表和米尺,测准单摆的周期和摆长。利用单摆周期公式求当地的重力加速度

二、实验要求 (1)测摆长为1m时的周期求g值。 (2)改变摆长,每次减少10cm,测相应周期T,作T—L图,验证单摆周期公式。 三、实验仪器设备及材料 单摆、米尺、游标卡尺、停表。 四、实验方案 利用试验台上所给的设备及材料,自己制作一个单摆,然后设计实验步骤测出单摆的周期,再根据单摆的周期公式计算当地的重力加速速。 改变摆长,讨论对实验结果的影响并分析误差产生的原因 五、考核形式 实际操作过程实验报告 六、实验报告 实验原理,实验步骤,实验数据处理,误差分析和处理。 对实验中的特殊现象、实验操作的成败、实验的关键点等内容进行整理、解释、分析总结,回答思考题,提出实验结论或提出自己的看法等。 七、思考题 1、为什么测量周期不宜直接测量摆球往返一次摆动的周期试从误差分析来说明。 2、在室内天棚上挂一单摆,摆长很长,你设法用简单的工具测出摆长不许直接测量摆长。 实验三牛顿第二定律的验证 实验类型:验证 实验类别:专业主干课 实验学时:2 所属课程:大学物理 所涉及的课程和知识点:力学牛顿第二定律摩擦 一、实验目的 通过本实验的学习,使学生掌握气垫导轨的使用,使学生通过在气垫导轨上验证牛顿第二定律,更深刻的理解牛顿第二定律的物理本质。 二、实验要求 验证当m一定时,a∝F,当F一定时,a∝1/m。 三、实验仪器设备及材料 气垫导轨,数字毫秒计,光电门,气源 四、实验方案 1、调整气垫导轨水平。 在导轨的端部小心安装好滑轮,使其转动自如,细心调整好导轨的水平。

数据结构实验指导书(2016.03.11)

《数据结构》实验指导书 郑州轻工业学院 2016.02.20

目录 前言 (3) 实验01 顺序表的基本操作 (7) 实验02 单链表的基本操作 (19) 实验03 栈的基本操作 (32) 实验04 队列的基本操作 (35) 实验05 二叉树的基本操作 (38) 实验06 哈夫曼编码 (40) 实验07 图的两种存储和遍历 (42) 实验08 最小生成树、拓扑排序和最短路径 (46) 实验09 二叉排序树的基本操作 (48) 实验10 哈希表的生成 (50) 实验11 常用的内部排序算法 (52) 附:实验报告模板 .......... 错误!未定义书签。

前言 《数据结构》是计算机相关专业的一门核心基础课程,是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础,也是很多高校考研专业课之一。它主要介绍线性结构、树型结构、图状结构三种逻辑结构的特点和在计算机内的存储方法,并在此基础上介绍一些典型算法及其时、空效率分析。这门课程的主要任务是研究数据的逻辑关系以及这种逻辑关系在计算机中的表示、存储和运算,培养学生能够设计有效表达和简化算法的数据结构,从而提高其程序设计能力。通过学习,要求学生能够掌握各种数据结构的特点、存储表示和典型算法的设计思想及程序实现,能够根据实际问题选取合适的数据表达和存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。另外本课程的学习过程也是进行复杂程序设计的训练过程,通过算法设计和上机实践的训练,能够培养学生的数据抽象能力和程序设计能力。学习这门课程,习题和实验是两个关键环节。学生理解算法,上机实验是最佳的途径之一。因此,实验环节的好坏是学生能否学好《数据结构》的关键。为了更好地配合学生实验,特编写实验指导书。 一、实验目的 本课程实验主要是为了原理和应用的结合,通过实验一方面使学生更好的理解数据结构的概念

数据结构实验报告代码

线性表 代码一 #include "stdio.h" #include "malloc.h" #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { int * elem; int length; int listsize; }SqList; int InitList_Sq(SqList *L) { L->elem = (int*)malloc(LIST_INIT_SIZE*sizeof(int)); if (!L->elem) return ERROR; L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; } int ListInsert_Sq(SqList *L, int i,int e) { int *p,*newbase,*q; if (i < 1 || i > L->length+1) return ERROR; if (L->length >= L->listsize) { newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof (int)); if (!newbase) return ERROR; L->elem = newbase; L->listsize += LISTINCREMENT; } q = &(L->elem[i-1]); //插入后元素后移for(p=&(L->elem[L->length-1]);p>=q;p--) *(p+1)=*p; *q=e; L->length++; return OK; } int ListDelete_Sq(SqList *L, int i, int *e) {

大学物理实验课后答案

实验一霍尔效应及其应用 【预习思考题】 1.列出计算霍尔系数、载流子浓度n、电导率σ及迁移率μ的计算公式,并注明单位。 霍尔系数,载流子浓度,电导率,迁移率。 2.如已知霍尔样品的工作电流及磁感应强度B的方向,如何判断样品的导电类型? 以根据右手螺旋定则,从工作电流旋到磁感应强度B确定的方向为正向,若测得的霍尔电压为正,则样品为P型,反之则为N型。 3.本实验为什么要用3个换向开关? 为了在测量时消除一些霍尔效应的副效应的影响,需要在测量时改变工作电 流及磁感应强度B的方向,因此就需要2个换向开关;除了测量霍尔电压,还要测量A、C间的电位差,这是两个不同的测量位置,又需要1个换向开关。总之,一共需要3个换向开关。 【分析讨论题】 1.若磁感应强度B和霍尔器件平面不完全正交,按式(5.2-5)测出的霍尔系数比实际值大还是小?要准确测定值应怎样进行? 若磁感应强度B和霍尔器件平面不完全正交,则测出的霍尔系数比实际值偏小。要想准确测定,就需要保证磁感应强度B和霍尔器件平面完全正交,或者设法测量出磁感应强度B和霍尔器件平面的夹角。 2.若已知霍尔器件的性能参数,采用霍尔效应法测量一个未知磁场时,测量误差有哪些来源? 误差来源有:测量工作电流的电流表的测量误差,测量霍尔器件厚度d的长度测量仪器的测量误差,测量霍尔电压的电压表的测量误差,磁场方向与霍尔器件平面的夹角影响等。 实验二声速的测量 【预习思考题】 1. 如何调节和判断测量系统是否处于共振状态?为什么要在系统处于共振的条件下进行声速测定? 答:缓慢调节声速测试仪信号源面板上的“信号频率”旋钮,使交流毫伏表指针指示达到最大(或晶体管电压表的示值达到最大),此时系统处于共振状态,显示共振发生的信号指示灯亮,信号源面板上频率显示窗口显示共振频率。在进行声速测定时需要测定驻波波节的位置,当发射换能器S1处于共振状态时,发射的超声波能量最大。若在这样一个最佳状态移动S1至每一个波节处,媒质压缩形变最大,则产生的声压最大,接收换能器S2接收到的声压为最大,转变成电信号,晶体管电压表会显示出最大值。由数显表头读出每一个电压最大值时的位置,即对应的波节位置。因此在系统处于共振的条件下进行声速测定,可以容易和准确地测定波节的位置,提高测量的准确度。 2. 压电陶瓷超声换能器是怎样实现机械信号和电信号之间的相互转换的? 答:压电陶瓷超声换能器的重要组成部分是压电陶瓷环。压电陶瓷环由多晶结构的压电材料制成。这种材料在受到机械应力,发生机械形变时,会发生极化,同时在极化方向产生电场,这种特性称为压电效应。反之,如果在压电材料上加交

数据结构实验指导书

《数据结构》实验指导书 实验一顺序表 实验目的: 熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。 实验要求: 了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。 实验内容: 1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求: (1)设数据元素为整数,实现线性表的顺序存储表示。 (2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。 (3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。 2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求: (1)数据元素为学生成绩(含姓名、成绩等字段)。 (2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。(这里用于比较的字段为分数) 实验二链表 实验目的: 熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。 实验要求: 了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容: 1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下: (1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。 (2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表 并带有头结点。(用于比较的字段为分数)。 (3)输入关键字值x,打印出表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (4)输入关键字值x,删除表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。(用于比较的字段为分数)。 实验三栈的应用 实验目的: 熟悉栈的逻辑特性、存储表示方法和栈的基本操作。 实验要求: 了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。 实验内容: (1)判断一个表达式中的括号(仅有一种括号,小、中或大括号) 是否配对。编写并实现它的算法。 (2)用不同的存储方法,求解上面的问题。 (3)* 若表达式中既有小括号,又有大括号(或中括号),且允许 互相嵌套,但不能交叉,写出判断这样的表达式是否合法的算 法。如 2+3*(4-{5+2}*3)为合法;2+3*(4-{5+2 * 3} 、 2+3*(4-[5+2 * 3)为不合法。

数据结构实验一的源代码

#include #include typedef struct Node { int key;//密码 int num;//编号 struct Node *next;//指向下一个节点 } Node, *Link; void InitList(Link &L) //创建一个空的链表{ L = (Node *)malloc(sizeof(Node)); if (!L) exit(1); L->key = 0; L->num = 0; L->next = L; } void Creatlinklist(int n, Link &L) //初始化链表{ Link p, q; q = L; for (int i = 1; i <= n; i++) { p = (Node *)malloc(sizeof(Node)); if (!p) exit(1); scanf("%d", &p->key); p->num = i; L->next = p; L = p; } L->next = q->next; free(q); } Link Locate_m(Link &p, int m)//找到第m个 { Link q; for (int j = 1; jnext; q = p->next; m = q->key;

return q; } void Delete_m(Link &L, Link p, Link q)//删除第m个{ p->next = q->next; free(q); } void main() { Link L, p, q; int n, m; L = NULL; InitList(L);//构造出一个只有头结点的空链表 printf("请输入初始密码人数每个人的密码:\n"); scanf("%d", &m);//初始密码为m scanf("%d", &n);// Creatlinklist(n, L);//构建 p = L; for (int i = 1; i <= n; i++) { q = Locate_m(p, m);//找到第m个 printf("%d", q->num); Delete_m(L, p, q);//删除第m个 } system("pause"); }

大学物理实验4-指导书

1.1 静电场 实验内容 图示静电场的基本性质: 同心球壳电场及电势分布图。 实验设置 有两个均匀带电的金属同心球壳配置如图。内球壳(厚度不计)半径为R 1=5.0 cm ,带电荷 q 1 = 0.6?10-8 C ;外球壳半径R 2 = 7.5 cm ,外半径R 3 = 9.0 cm ,所带总电荷q 2 = - 2.0?10-8 C 。 实验任务 画出该同心球壳的电场及电势分布。 实验步骤及方法 基本原理:根据高斯定理推导出电场及电势的 分布公式;利用数据分析软件,如Microsoft Excel 绘制电场及电势的分布图。 在如图所示的带电体中,因内球壳带电q 1,由于静电感应,外球壳的内表面上将均匀地分布电荷-q 1;根据电荷平衡原理,外球壳的外表面上所带电荷除了原来的q2外,还因为内表面感应了-q 1而生成+q 1,所以外球壳的外表面上将均匀分布电荷q 1+q 2。 在推导电场和电势分布公式时,须根据r 的变化范围分别讨论r < R 1、R 1 < r < R 2、R 2 < r < R 3、r > R 3几种情况。 场强分布: 当r < R 1时, 001=?=???E dS E S 当R 1 < r < R 2时, ?= ???0 1 εq dS E S 2 1 0241 r q E επ= 当R 2 < r < R 3时, 00 3=?=???E dS E S 当r > R 3时, 1

2 210 40 2 141r q q E q q dS E S += ? += ??? επε 电势分布: 根据电势的定义,可以求得电势的分布。 当r < R 1时, 3 2 10210110143211414141 3 3 2 21 1R q q R q R q U dr E dr E dr E dr E dr E U R R R R R R r r ++ -=?+?+?+?=?=?????∞ ∞ επεπεπ 当R 1 < r < R 2时, 3 2 102101014321414141 3 3 2 2R q q R q r q U dr E dr E dr E dr E U R R R R r r ++ -=?+?+?=?=????∞ ∞ επεπεπ 当R 2 < r < R 3时, 3 2 10143141 3 3 R q q U dr E dr E dr E U R R r r += ?+?=?=???∞ ∞ επ 当r > R 3时, r q q U dr E dr E U r r 2 1014141 += ?=?=??∞ ∞επ 至此,可以用MS Excel 来绘制电场及电势分布图。方法如下: 打开Excel 后会有一个默认的表格出现(如下图) 在A1、A2、A3单元格内分别输入“R1=”、“R2=”、“R3=”;在B1、B2、B3单元格内分别输入R1、R2、R3的数值。

2017数据结构实验指导书

《数据结构》实验指导书 贵州大学 电子信息学院 通信工程

目录 实验一顺序表的操作 (3) 实验二链表操作 (8) 实验三集合、稀疏矩阵和广义表 (19) 实验四栈和队列 (42) 实验五二叉树操作、图形或网状结构 (55) 实验六查找、排序 (88) 贵州大学实验报告 (109)

实验一顺序表的操作 实验学时:2学时 实验类型:验证 实验要求:必修 一、实验目的和要求 1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。 2、以线性表的各种操作(建立、插入、删除等)的实现为重点。 3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现。 二、实验内容及步骤要求 1、定义顺序表类型,输入一组整型数据,建立顺序表。 typedef int ElemType; //定义顺序表 struct List{ ElemType *list; int Size; int MaxSize; }; 2、实现该线性表的删除。 3、实现该线性表的插入。 4、实现线性表中数据的显示。 5、实现线性表数据的定位和查找。 6、编写一个主函数,调试上述算法。 7、完成实验报告。 三、实验原理、方法和手段 1、根据实验内容编程,上机调试、得出正确的运行程序。 2、编译运行程序,观察运行情况和输出结果。 四、实验条件 运行Visual c++的微机一台 五、实验结果与分析 对程序进行调试,并将运行结果进行截图、对所得到的的结果分析。 六、实验总结 记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等,并将其写入实验报告中。

【附录----源程序】 #include #include using namespace std; typedef int ElemType; struct List { ElemType *list; int Size; int MaxSize; }; //初始化线性表 bool InitList(List &L) { L.MaxSize=20; L.list=new ElemType[L.MaxSize]; for(int i=0;i<20&&L.list==NULL;i++) { L.list=new ElemType[L.MaxSize]; } if(L.list==NULL) { cout<<"无法分配内存空间,退出程序"<L.Size+1||pos<1) { cout<<"位置无效"<

数据结构实验程序

顺序表的基本操作 #include using namespace std; typedef int datatype; #define maxsize 1024 #define NULL -1 typedef struct { datatype *data; int last; }sequenlist; void SETNULL(sequenlist &L) { L.data=new datatype[maxsize]; for(int i=0;i>https://www.doczj.com/doc/9214189138.html,st; cout<<"请输入"<>L.data[i]; } int LENGTH(sequenlist &L) { int i=0; while(L.data[i]!=NULL) i++; return i; } datatype GET(sequenlist &L,int i) { if(i<1||i>https://www.doczj.com/doc/9214189138.html,st) { cout<<"error1"<

int j=0; while(L.data[j]!=x) j++; if(j==https://www.doczj.com/doc/9214189138.html,st) { cout<<"所查找值不存在!"<=maxsize-1) { cout<<"overflow"; return NULL; } else if(i<1||(i>https://www.doczj.com/doc/9214189138.html,st)) { cout<<"error2"<=i-1;j--) L.data[j+1]=L.data[j]; L.data[i-1]=x; https://www.doczj.com/doc/9214189138.html,st++; } return 1; } int DELETE(sequenlist &L,int i) { int j; if((i<1)||(i>https://www.doczj.com/doc/9214189138.html,st+1)) { cout<<"error3"<

磁性物理实验指导书

磁性物理实验 讲义 磁性物理课程组编写 电子科技大学微电子与固体电子学院 二O一二年九月

目录 一、起始磁导率温度特性测量和居里温度测试计算分析 (1) 二、电阻率测试及磁损耗响应特性分析 (3) 三、磁致伸缩系数测量与分析 (6) 四、磁化强度测量与分析 (9) 五、磁滞回线和饱和磁感应强度测量 (11) 六、磁畴结构分析表征 (12)

一、起始磁导率温度特性测量和居里温度测试计算分析 (一) 、实验目的: 了解磁性材料的起始磁导率的测量原理,学会测量材料的起始磁导率,并能够从自发磁化起源机制来分析温度和离子占位对材料起始磁导率和磁化强度的影响。 (二)、实验原理及方法: 一个被磁化的环型试样,当径向宽度比较大时,磁通将集中在内半径附近的区域分布较密,而在外半径附近处,磁通密度较小,因此,实际磁路的有效截面积要小于环型试样的实际截面。为了使环型试样的磁路计算更符合实际情况,引入有效尺寸参数。有效尺寸参数为:有效平均半径r e ,有效磁路长度l e ,有效横截面积A e ,有效体积V e 。矩形截面的环型试样及其有效尺寸参数计算公式如下。 ???? ??-=21 1 211ln r r r r r e (1) ???? ??-=21 12 11ln 2r r r r l e π (2) ???? ??-=2112 211ln r r r r h A e (3) e e e l A V = (4) 其中:r 1为环型磁芯的内半径,r 2为环型磁芯的外半径,h 为磁芯高度。 利用磁芯的有效尺寸可以提高测量的精确性,尤其是试样尺寸不能满足均匀磁化条件时,应用等效尺寸参数计算磁性参数更合乎实际结果。材料的起始磁导率(i μ)可通过对环型磁心施加线圈后测量其电感量(L )而计算得到。计算公式如式(5)所示。 2 0i e e A N L l μμ= (5)

《数据结构》实验指导书

《数据结构》实验指导书 实验类别:课内实验实验课程名称:数据结构 实验室名称:软件工程实验室实验课程编号:N02070601 总学时:64 学分: 4 适用专业:计算机科学与技术、网络工程、物联网工程、数字媒体专业 先修课程:计算机科学导论、离散数学 实验在教学培养计划中地位、作用: 数据结构是计算机软件相关专业的主干课程,也是计算机软硬件专业的重要基础课程。数据结构课程实验的目的是通过实验掌握数据结构的基本理论和算法,并运用它们来解决实际问题。数据结构课程实验是提高学生动手能力的重要的实践教学环节,对于培养学生的基本素质以及掌握程序设计的基本技能并养成良好的程序设计习惯方面发挥重要的作用。 实验一线性表的应用(2学时) 1、实验目的 通过本实验,掌握线性表链式存储结构的基本原理和基本运算以及在实际问题中的应用。 2、实验内容 建立某班学生的通讯录,要求用链表存储。 具体功能包括: (1)可以实现插入一个同学的通讯录记录; (2)能够删除某位同学的通讯录; (3)对通讯录打印输出。 3、实验要求 (1)定义通讯录内容的结构体; (2)建立存储通讯录的链表结构并初始化; (3)建立主函数: 1)建立录入函数(返回主界面) 2)建立插入函数(返回主界面) 3)建立删除函数(返回主界面) 4)建立输出和打印函数(返回主界面) I)通过循环对所有成员记录输出 II)输出指定姓名的某个同学的通讯录记录 5)退出 实验二树的应用(2学时) 1、实验目的 通过本实验掌握二叉排序树的建立和排序算法,了解二叉排序树在实际中的应用并熟练运用二叉排序树解决实际问题。 2、实验内容 建立一个由多种化妆品品牌价格组成的二叉排序树,并按照价格从低到高的顺序 打印输出。 3、实验要求 (1)创建化妆品信息的结构体; (2)定义二叉排序树链表的结点结构; (3)依次输入各类化妆品品牌的价格并按二叉排序树的要求创建一个二叉排序树链表;(4)对二叉排序树进行中序遍历输出,打印按价格从低到高顺序排列的化妆品品牌信息。 实验三图的应用(2学时)

数据结构实验报告

《用哈夫曼编码实现文件压缩》 实验报告 课程名称数据结构 实验学期2015至2016学年第一学期 学生所在系部计算机学院 年级2014专业班级物联B142班 学生姓名杨文铎学号201407054201 任课教师白磊 实验成绩

用哈夫曼编码实现文件压缩 1、了解文件的概念。 2、掌握线性表的插入、删除的算法。 3、掌握Huffman树的概念及构造方法。 4、掌握二叉树的存储结构及遍历算法。 5、利用Haffman树及Haffman编码,掌握实现文件压缩的一般原理。 微型计算机、Windows系列操作系统、Visual C++6.0软件 根据ascii码文件中各ascii字符出现的频率情况创建Haffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。 本次实验采用将字符用长度尽可能短的二进制数位表示的方法,即对于文件中出现的字符,无须全部都用S为的ascii码进行存储,根据他们在文件中出现的频率不同,我们利用Haffman算法使每个字符能以最短的二进制数字符进行存储,已达到节省存储空间,压缩文件的目的,解决了压缩需要采用的算法,程序的思路已然清晰: 1、统计需压缩文件中的每个字符出现的频率 2、将每个字符的出现频率作为叶子节点构建Haffman树,然后将树中结点引向 其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码 即为从根到每个叶子的路径上得到的0、1序列,这样便完成了Haffman 编码,将每个字符用最短的二进制字符表示。 3、打开需压缩文件,再将需压缩文件中的每个ascii码对应的haffman编码按bit 单位输出。 4、文件压缩结束。 (1)构造haffman树的方法一haffman算法 构造haffman树步骤: I.根据给定的n个权值{w1,w2,w3…….wn},构造n棵只有根结点的二叉 树,令起权值为wj。 II.在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和。 III.在森林中删除这两棵树,同时将得到的二叉树加入森林中。 IV.重复上述两步,知道只含一棵树为止,这棵树即哈夫曼树。 对于haffman的创建算法,有以下几点说明: a)这里的Haffman树采用的是基于数组的带左右儿子结点及父结点下标作为

大学物理 学习指南

学习指南 1、物理实验课的教学目的 大学物理实验教学目的与中学阶段的物理实验教学有着本质的不同。“大学物理实验”是一门独立的基础课程,它不是“大学物理学”的分支或组成部分。虽然物理实验必须以物理学的理论为基础,运用物理学的原理进行实验或研究,但是“大学物理实验”又独立于“大学物理学”,它不是以验证物理定律、加强理解物理规律为主要目的的,分散的力、热、电、磁、光实验的堆切,而是以物理实验的基本技术或基本物理量的测量方法为主线,再贯穿以现代误差理论,现代物理实验仪器设备、器件的原理、使用方法,构建成一个完整的,但又不断发展的课程体系框架。其教学目的如下: (1)掌握基本物理量的各种测量方法,学会分析测量的误差,学会基本的实验数据处理方法,能正确的表达测量结果,并对测量结果进行正确的评价(测量不确定度)。 (2)掌握物理实验的基本知识、基本技能,常用实验仪器设备、器件的原理及使用方法,并能正确运用物理学理论指导实验。 (3)培养、提高基本实验能力,并进一步培养创新能力。基本实验能力是指能顺利完成某种实验活动(科研实验或教学实验)的各种相关能力的总和,主要包括: 观察思维能力──在实验中通过观察分析实验现象,并得出正确规

律的能力。 使用仪器能力──能借助教材或仪器使用说明书掌握仪器的调整和使用方法的能力。 故障分析能力──对实验中出现的异常现象能正确找出原因并排除故障的能力。 数据处理能力──能正确记录、处理实验数据,正确分析实验误差的能力。 报告写作能力──能撰写规范、合格的实验报告的能力。 初步实验设计能力──能根据课题要求,确定实验方案和条件,合理选择实验仪器的能力。 (4)培养从事科学实验的素质。包括理论联系实际和实事求是的科学作风;严肃认真的工作态度;吃苦耐劳、勇于创新的精神;遵守操作规程,爱护公共财物的优良品德;以及团结协作、共同探索的精神。 2、大学物理实验课的基本程序 实验课与理论课不同,它的特点是同学们在教师的指导下自己动手,独立完成实验任务,通常每个实验的学习都要经历三个阶段。 (1)实验的准备 实验前必须认真阅读讲义,做好必要的预习,才能按质按量按时完成实验。同时,预习也是培养阅读能力的学习环节。预习时要写预习报告,预习报告包括以下内容:

数据结构实验指导书(C版)

数据结构实验指导书(C语言版) 2017年9月

目录 1、顺序表的实现 (1) 2、链栈的实现 (3) 3、前序遍历二叉树 (5) 4、图的深度优先遍历算法 (7) 5、散列查找 (9)

1、顺序表的实现 1. 实验目的 ⑴掌握线性表的顺序存储结构; ⑵验证顺序表及其基本操作的实现; ⑶理解算法与程序的关系,能够将顺序表算法转换为对应的程序。 2. 实验内容 ⑴建立含有若干个元素的顺序表; ⑵对已建立的顺序表实现插入、删除、查找等基本操作。 3. 实现提示 定义顺序表的数据类型——顺序表结构体SeqList,在SeqList基础上实现题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。简单起见,本实验假定线性表的数据元素为int型,要求学生: (1)将实验程序调试通过后,用模板类改写; (2)加入求线性表的长度等基本操作; (3)重新给定测试数据,验证抛出异常机制。 4. 实验程序 在编程环境下新建一个工程“顺序表验证实验”,并新建相应文件,文件包括顺序表结构体SeqList的定义,范例程序如下: #define MaxSize 100 /*假设顺序表最多存放100个元素*/ typedef int DataType; /*定义线性表的数据类型,假设为int型*/ typedef struct { DataType data[MaxSize]; /*存放数据元素的数组*/ int length; /*线性表的长度*/ } SeqList; 文件包括建立顺序表、遍历顺序表、按值查找、插入操作、删除操作成员函数的定义,范例程序如下: int CreatList(SeqList *L, DataType a[ ], int n) { if (n > MaxSize) {printf("顺序表的空间不够,无法建立顺序表\n"); return 0;} for (int i = 0; i < n; i++) L->data[i] = a[i]; L->length = n; return 1; }

数据结构上机实验线性表单链表源代码

#include template class LinearList { public: virtual bool IsEmpty()const=0; virtual int Length()const=0; virtual bool Find(int i,T& x)const=0; virtual int Search(T x)const=0; virtual bool Insert(int i,T x)=0; virtual bool Update(int i,T x)=0; virtual bool Delete(int i)=0; virtual void Output(ostream& out)const=0; protected: int n; }; #include "linearlist" template class SeqList:public LinearLisr { public: SeqList(int mSize); ~SeqList(){delete [] elements;} bool IsEmpty()const; bool Find(int i,T& x)const; int Length()const; int Search(T x)const; bool Insert(int i,T x); bool Update(int i,T x); bool Delete(int i); void Output(ostream& out)const; private: int maxLength; T *elements; }; template SeqList::SeqList(int mSize) { maxLength=mSize;

数据结构实验报告

数据结构实验报告 第 6 次实验 学号:20141060106 :叶佳伟 一、实验目的 1、复习图的逻辑结构、存储结构及基本操作; 2、掌握邻接矩阵、邻接表及图的创建、遍历; 3、了解图的应用。 二、实验容 1、(必做题)假设图中数据元素类型是字符型,请采用邻接矩阵或邻接表实现图的以下基本操作: ( 1)构造图(包括有向图、有向网、无向图、无向网); ( 2)根据深度优先遍历图; ( 3)根据广度优先遍历图。 三、算法描述 (采用自然语言描述) 四、详细设计 (画出程序流程图) 五、程序代码 (给出必要注释) #include #include #include #include #include #define INFINITY 255678 /*赋初值用*/ #define MAX_VERTEX_NUM 20 /* 最大顶点个数*/ enum {DG, DN, UDG, UDN}; . .

typedef struct ArcCell { int adj;/*顶点关系类型,对无权图,用1(是)或0(否)表示相邻否;对带权图,则为权值*/ char *info;/*弧相关信息指针*/ }AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { char vexs[MAX_VERTEX_NUM][5];/*顶点向量*/ AdjMatrix arcs; /*邻接矩阵*/ int vexnum, arcnum;/*图的当前顶点数和弧数*/ int kind; }MGraph; void CreateDG(MGraph *G); void CreateDN(MGraph *G); void CreateUDG(MGraph *G); void CreateUDN(MGraph *G); int LocateVex(MGraph *G, char v[]); void print(MGraph *G); int main(void) { MGraph *G; G = (MGraph *)malloc(sizeof(MGraph)); printf("请选者0-有向图,1-有向网,2-无向图,3-无向网: "); scanf("%d", &G->kind); switch(G->kind) { case DG : CreateDG(G); print(G); break; case DN : CreateDN(G); print(G); break; case UDG : CreateUDG(G); . .

相关主题
文本预览
相关文档 最新文档