1 / 10
文档名称:

实验5递归及队列.doc

格式:doc   大小:93KB   页数:10页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

实验5递归及队列.doc

上传人:63229029 2017/5/10 文件大小:93 KB

下载得到文件列表

实验5递归及队列.doc

文档介绍

文档介绍:实验报告五递归及队列一、实验目的: (1) 掌握递归的基本思想。(2) 掌握链式队列及循环队列的基本操作算法。(3) 应用队列先进先出的特点,解决一些实际问题。二、实验内容: 1、 p(a-b , b)+1 当 a>=b p(a,b)= 其中 a,b 为正整数。 0当 a<b 利用递归设计此函数。#include<> int p(int a,int b) { if(a<b) return 0; else return p(a-b,b)+1; } void main() {int x; x=p(6,2); cout<<" 结果为: "<<x<<endl; int y; y=p(3,4); cout<<" 结果为: "<<y<<endl; } 粘贴测试数据及运行结果: 2、 Ackerman 函数如下: n+1 当 m=0 a km (m,n )=a km (m-1,1) 当m≠0, n=0 akm (m-1, akm (m,n-1)) 其它情形利用递归设计此函数。试求 akm(1 , 2),akm(2 , 1)? 粘贴#include<> int akm(int m,int n) { if(m==0) return n+1; if(m && !n) return akm(m-1,1); else { return akm(m-1,akm(m,n-1)); }} void main() {int s,t,l; s=akm(0,8); cout<<" 结果为: "<<s<<endl; t=akm(1,2); cout<<" 结果为: "<<t<<endl; l=akm(2,1); cout<<" 结果为: "<<l<<endl; } 测试数据及运行结果: 3 、循环队列的实现(请采用模板类及模板函数实现) [ 实现提示] 函数、类名称等可自定义,部分变量请加上学号后 3 位。也可自行对类中所定义的操作进行扩展。所加载的库函数或常量定义及类的定义: #include<iostream> using namespace std; int maxsize=100; template <class T> // 定义模板类 DCirQueue class DCirQueue {public: DCirQueue( int size=10); // 构造函数,置空队~ DCirQueue( ){delete []queue;}; // 析构函数 void EnQueue(T x); // 将元素 x 入队 T DeQueue( ); // 将队头元素出队 T GetQueue( ); // 取队头元素(并不删除) int IsEmpty( ); // 判断队列是否为空 int length(); // 求队列元素个数 void display(); // 遍历队列 int destroy(); // 清空队列 private: T *queue; // 存放队列元素的数组 int front, rear; // 队头和队尾指针,分别指向队头元素的前一个位置和队尾元素的位置 int maxsize; // 队列最大可容纳元素个数为 maxsize-1 }; (1 )构造一个空的循环队列输入:队列元素存储区域的大小 size; 动作