数据结构 实验教案 实验一 栈和队列
实验一 栈和队列 一、实验目的
1、通过几个小代码的编写,熟悉栈和队列 2、熟悉VC环境(VC 6或VC.net),会在其中编写调试运行c++代码,并理解多文件项目的组织,为以后的实验编程做准备
3、初步掌握在VC环境中进行代码的调试
二、实验内容
在实验题目文档中有4个题目,其中题目1、2、3是关于栈的,题目4是关于队列的 ,要求一次实验完成所有的题目
1.题目一
读懂实验题目文档中的Task1中的程序(使用栈进行序列的顺序反转),并编译运行,通过此了解如果要实现一个栈类,里面需要的基本的成员函数。这个程序在书上也有。
(1)由于程序是用了STL(标准模板库,可以简单的看成是一个函数库,在其中有各种有用的类、函数和算法),栈在其中有实现。栈在STL中的实现用到了类模板,也就是说其栈是独立于类型的,模板提供参数化类型,也就是能将类型名作为参数传递给接收方来建立类或函数。比如stack
(2)注意,实验题目文档中的这个程序有点语法错误,要使这个程序能运行,首先要改正语法错误。另外,如果要使用c++的输入输出需要加上几行语句如下,因为cout和cin是在命名空间std中的:
#include
2.题目二、题目三
这里把题目二和题目三合成了一个题目,在一个程序中完成就可以了。
实现一个自己的简单的栈,并用于替换题目一中对标准模板库中的栈的使用,同时对自己实现的栈的功能进行扩充,添加实现如下几个函数(a) clear (b) full (c) size。使用新添加的栈函数,显示在进行数字序列反转时输入的十进制数的个数。
注意:实验题目文档中已经把大部分的代码都给出来了。自己实现的栈不要求用类模板,如果能用,当然更好。
栈可以用链表或者数组实现,这里是用数组实现。
注意:实验题目中给出的仅仅是部分的代码,自己还需要在看懂的前提下,进行修改补
1
数据结构 实验教案 实验一 栈和队列
充,才可以达到具体的要求,不明白的地方也可以参考书上这一部分。
3.题目四
这个题目的主要目的是熟悉队列这个数据结构,而为了说明问题又用了一个模拟飞机场的程序,因此这个实验项目在程序的找错误调试编译,读源代码上对大家也是一个锻炼。
仔细阅读教科书中关于模拟飞机场这一部分,阅读源代码。实验题目中的源代码并不完整并且有些语法等等的错误,其缺少生成随机数这一个类,下面会把这个类给大家,有兴趣的话,可以看教科书中的附录,有些介绍。
另外大家把代码读懂后就可以复制粘贴到编译环境中了,主要是读懂代码。但是,一定要知道,这样直接粘贴的代码并不能直接运行,需要修改其中的一些bug。
这个题目的要求是能读懂代码,明白实现,而且要把代码放到VC中编译调试,使其能正常运行。并通过此,能对程序的编译调试查找错误较为熟悉。注意,一定要使警告也为0个。
下面是Random类,用于生成随机数,核心代码来自教科书的附录 //Random.h
#ifndef RANDOM_H_ #define RANDOM_H_
class Random { public: private: }; #endif
int reseed(); //re-randomize the seed int seed;
int multiplier,add_on;//constants for use in arithmetic operations Random(bool pseudo=true);
//declare random-number generation methods here double random_real(); int poisson(double mean);
//Random.cpp
#include \#include
int Random::reseed()
//Post:The seed is replaced by a psuedorandom successor {
seed=seed*multiplier+add_on; return seed;
2
数据结构 实验教案 实验一 栈和队列
}
Random::Random(bool pseudo) { }
double Random::random_real() { }
int Random::poisson(double mean) { }
/*Post:A random integer, reflecting a Poisson distribution with parameter mean, is return.*/ double limit=exp(-mean); double product=random_real(); int count=0;
while (product>limit) { }
return count;
count++;
product*=random_real();
/*Post:A random real number between 0 and 1 is returned*/ double max=INT_MAX+1.0; double temp=reseed(); if (temp<0) { }
return temp/max;
temp=temp+max;
/*Post:The values of seed ,add-on, and multiplier are initialized. The seed is initialized if (pseudo) { } else { }
seed=static_cast
randomly only if pseudo==false*/
3
数据结构 实验教案 实验一 栈和队列
三、实验附录
1. VC 6环境中编写c++控制台程序步骤
下面具体了解一下,如何在VC环境中用c++语言编程,开发控制台应用程序。 主要的步骤分为: 1.新建项目
2.添加文件到新建的项目中 3.编写代码
4.编译链接生成可执行文件
其中,代码的调试也是一个很重要的过程。
(1)新建工程
图1
注意,在上图中一定要选择Win32 Console Application,这样才能编写控制台应用程序。 在图1的中的Project name下面的文本框填写自己工程的名字,在Location中选择工程要存放在硬盘的什么地方。填好这些项后,OK按钮变为可用,这时,可以点击OK,进入下一步。
4
数据结构 实验教案 实验一 栈和队列
图2
在图2中,默认选择An empty project,保持默认选项,点击Finish。这样,就建立了一个空白的控制台工程项目。以后可以往这个空白的项目中添加现有文件(已经编写好的.cpp或者.h文件),或者是添加新的空白文件(已经编写好的.cpp或者.h文件),用于在其上编写自己的代码。
(2)往工程中添加文件
应该注意,刚才我们选择的是新建一个空白的工程,因此,新建的工程中是没有任何.cpp或者.h文件的,现在需要往工程中添加代码文件。
在工程已经建立的情况下,有两种方法往工程项目中添加代码,一种是添加空白的.cpp文件和.h文件,然后自己在这些空白的文件中编写代码,另一种是添加现有的.cpp文件和.h文件。
若要把添加到工程中的.cpp或者.h文件从工程中删除,只需要在workspace中选中相应的文件,按下键盘上的delete键,就可以了。不过,注意,此时文件仅仅是被从工程中移除了,还在硬盘中存在,如果要彻底将文件删除,需要在硬盘上文件保存的地方进行删除。
(a)添加空白的.c文件和.h文件
选择File菜单项中的New
5