数据结构 第三章.ppt
文本预览下载声明
Linked queue class member function definition (c++) Linked queue class member function definition (c++) Linked queue class member function definition (c++) Linked queue class member function definition (c++) Linked queue class member function definition (c++) (3) Application of queue Fibonacci sequence three-track problem 例1: k阶斐波那契序列(c language) 试利用循环队列编写求k阶斐波那契序列中前n+1项(f0, f1 , f2 ,… fn )的算法,要求满足fn ≤max而fn+1 max ,其中max为某个约定的常数。(注意本题所用循环队列的容量仅为k,则在算法执行结束时,留在循环队列中的元素应是k阶斐波那契序列中的最后k项fn-k+1 ,… fn ) . f0=0 , f1=0 , …, fk-2=0 , fk-1=1, fn = fn-1 + fn-2 +…+ fn-k (n=k,k+1,…) fi = fi-1 + fi-2 +…+ fi-k fi+1 = fi + fi-1 + fi-2 +…+ fi-k+1 两式相减得: fi+1 = 2*fi - fi-k Fibonacci sequence of k order The Fibonacci Number that are defined recursively as below: f0=0 , f1=0 , …, fk-2=0 , fk-1=1, fn = fn-1 + fn-2 +…+ fn-k (n=k,k+1,…) Please write a program that lists n+1 items of Fibonacci Number of k order(f0, f1 , f2 ,… fn ) using circular queue,satisfying that fn ≤max and fn+1 max ,where max is a given constant(Note the capacity of the circular queue is k, the numbers left in the circular queue after running the program is the last k numbers fn-k+1 ,… fn ) . fi = fi-1 + fi-2 +…+ fi-k fi+1 = fi + fi-1 + fi-2 +…+ fi-k+1 Do subtraction: fi+1 = 2*fi - fi-k 方法一 Method1 Void fb(int k;int max) capacity of queue is k { for(i=0;i=k-2;i++) {f[i]=0; cq.elem[i]=0;} cq.elem[k-1]=1; cq.rear=k-1; n=k; while(cq.elem[cq. rear]max) {f[n]=0; for(j=0;jk;j++) f[n]=f[n]+ cq.elem[j]; cq.rear=(cq.rear +1) % k; cq.elem[cq.rear]=f[n]; n++; } if(cq.elem[cq.rear]max) n=n-2; else n=n-1; if (max==1) {n=k;f[k]=1;} } method2 Void fb(int k;int;max) { for(i=0;i=k-2;i++) {f[i]=0; cq.elem[i]=0;} cq.elem[k-1]= cq.elem[k]= 1; cq.rear=k; n=k+1; f[k-1]=f[k]=1; while(cq.elem[cq. rear]max) {j= (cq. rear+1) % (k+1); f[n]= cq.elem[cq. rear]*2- cq.elem[j]; cq.elem[j
显示全部