实验报告 五 递归 及 队列 班级:
姓名:
学号:
专业 :
一、实验目的:
(1 1)掌握 递归的基本思想。
(2 2)掌握链式队列及循环队列的基本操作算法。
(3 3)应 用队列先进先出的特点,解决一些实际问题。
二、实验内容:
1 1、p(a--b b,b b)+1 当 当 a>=b p(a,b)= 其中 b a,b 为正整数。
0 当 a
int p(int a,int b){ { } } void main(){} 粘贴测试数据及运行结果:
2 2、n Ackerman 函数如下:
n+1 当 当 m=0 akm(m,n)= akm(m-1,1)当 当 m≠0,n=0 akm(m-1,akm(m,n-1))其它情形 利用递归设计此函数。求 试求 akm(1,2),akm(2,1)? ? int akm(int n,int m){ } void main(){} 粘贴测试数据及运行结果:
3 3、循环队列的实现(请采用模板类及模板函数实现)[ [ 实现提示] ]后 函数、类名称等可自定义,部分变量请加上学号后 3 3 位。
也可自行对类中所定义的操作进行扩展。
所加载的 库函数 或 常量定义 及类的定义 :
(1 1)构造一个空的循环队列 输入:队列元素存储区域的大小 size;动作:初始化队列,队头及队尾指示器,申请存储队列的数组,设置队列存储区域的大小maxsize(2 2)入 队 操作 算法实现:
输入:要入队的元素 x;前置条件:队列未满 动作 :把 x x 插入队尾 输出:无 后置条件:队列中增加了一个元素(3 3)求队列的 元素个数 算法 输入:无 前置条件:无; 动作:求队列的元素个数,含表空返回个数为零的情况。
输出:返回队列的元素个数。
(4 4)出队操作算法 输入:无 前置条件:队列非空 动作:删除队头元素 输出:返回队头元素的值 后置条件:队列中删除了一个元素(5 5)遍历队列算法 输入:无 前置条件:队列非空 动作:输出队列中的各元素 输出:无 后置条件:无(6 6)清空队列算法 输入:无 前置条件:队列存在 动作:释放队列的存储空间 输出:无 后置条件:队列不存在(7 7)判队列为空算法 输入:无
前置条件:队列存在 动作:判是否为空 输出:空返回 1 1,否则返回 0 0 后置条件:无(8 8)获得队列头结点 输入:无 前置条件:队列存在 动作:获得队头的元素 输出:返回队头的元素值 后置条件:无 粘贴测试数据及运行结果:
4 4、链式 队列 的基本操作算法实现(请采用模板类及模板函数实现)[ [ 实现提示] ] 同时可参见教材 p p 98--9 p99 页的 的 T ADT 描述及 算法 实现及 ppt)函数、类名称等可自定义,部分变量请加上学号后 3 3 位。
也可自行对类中所定义的操作进行扩展。
所加载 的 库函数 或 常量定义 及类的定义:
:
(自选择带头结点或不带头结点)(1 1)初始化链式空队列 关键 动作:初始化队列,设置队头及队尾指示器。
(2 2)带参数的构造函数,实现创建链式队列 输入:存储放初始数据元素的数组 a[],元素个数 n n 前置条件:队列不存在 动作:把 a a 中的数据元素依次插入队尾 输出:无 后置条件:队列中有 n n 个元素入队(3 3)入队操作算法 输入:要入队的元素 x;前置条件:队列未满 动作:把 x x 插入队尾 输出:无 后置条件:队列中增加了一个元素(4 4)出队操作算法 输入:无 前置条件:队列非空 动 作:删除队头元素 输出:返回队头元素的值 后置条件:队列中删除了一个元素(5 5)清空队列算法 输入:无
前置条件:队列存在 动作:释放队列的存储空间 输出:无 后置条件:队列不存在(6 6)判队列为空算法 输入:无 前置条件:队列存在 动作:判是否为空 输出:空返回 1 1,否则返回 0 0 后置条件:无(7 7)获得队列头结点 输入:无 前置条件:队列存在 动作:获得队头的元素 输出:返回队头的元素值 后置条件:无(8 8)遍历队列中的元素 输入:无 前置条件:队列非空 动作:输出队列中的各元素 输出:无 后置条件 :无(9 9)求队列 数据元素个数 输入:无 前置条件:无; 动作:求队列的元素个数,含表空返回个数为零的情况。
输出:返回队列的元素个数。
void main(){} 粘贴测试数据及运行结果:
三、心得体会:(含上机中所遇问题的解决办法,所使用到的编程技巧、创新点及编程的心得)