实验5递归及队列.docVIP

  • 13
  • 0
  • 约6.92千字
  • 约 10页
  • 2017-04-26 发布于重庆
  • 举报
实验5递归及队列

实验报告五 递归及队列 实验目的: 掌握递归的基本思想。 掌握链式队列及循环队列的基本操作算法。 应用队列先进先出的特点,解决一些实际问题。 实验内容: 1、 p(a-b,b)+1 当a=b p(a,b)= 其中a,b为正整数。 0 当ab 利用递归设计此函数。 #includeiostream.h int p(int a,int b) { if(ab) return 0; else return p(a-b,b)+1; } void main() {int x; x=p(6,2); cout结果为: xendl; int y; y=p(3,4); cout结果为: yendl; } 粘贴测试数据及运行结果: 2、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)? 粘贴#includeiostream.h 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结果为: sendl; t=akm(1,2); cout结果为: tendl; l=akm(2,1); cout结果为: lendl; }测试数据及运行结果: 3、循环队列的实现(请采用模板类及模板函数实现) [实现提示]函数、类名称等可自定义,部分变量请加上学号后3位。也可自行对类中所定义的操作进行扩展。 所加载的库函数或常量定义及类的定义: #includeiostream 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; 动作:初始化队列,队头及队尾指示器,申请存储队列的数组,设置队列存储区域的大小 template class T DCirQueueT::DCirQueue( int size) :front(0),rear(0),maxsize(size) { queue=new T[maxsize]; if(queue==NULL) cout动态分配失败!; } (2)入队操作算法实现: 输入:要入队的元素x; 前置条件:队列未满 动作:把x插入队尾 输出:无 后置条件:队列中增加了一个元素 template class T void DCirQueueT::EnQueue(T x) { if ((rear+1) % maxsize ==front) cout“队满; rear=(rear+1) % maxsize; //队尾指针在循环意义下加1

文档评论(0)

1亿VIP精品文档

相关文档