例一 循环队列应用举例 以下为计算杨辉三角的算法。 算法3.4 void yanghui ( int n ) { // 打印输出杨辉三角的前 n( n>0 )行 Queue Q; for( i=1; i<=n; i++) cout<< ' '; cout<< '1'<<endl; // 在中心位置输出杨辉三角最顶端的"1" InitQueue(Q,n+2); // 设置最大容量为 n+2 的空队列 EnQueue(Q,0 ); // 添加行界值 EnQueue( Q,1); EnQueue( Q,1 ); // 第一行的值入队列 k = 1; while ( k < n ) { // 通过循环队列输出前 n-1 行的值 for( i=1; i<=n-k; i++) cout<< ' '; // 输出n-k个空格以保持三角型 EnQueue ( Q,0 ); // 行界值"0"入队列 do { // 输出第 k 行,计算第 k+1 行 Dequeue( Q,s ); GetHead( Q,e ); if (e) cout<< e << ' '; // 若e为非行界值0,则打印输出 e 的值并加一空格 else cout << endl; // 否则回车换行,为下一行输出做准备 EnQueue(Q,s+e); } while (e!=0); k++; } // while DeQueue ( Q,e ); // 行界值"0"出队列 while (!QueueEmpty (Q) ) { // 单独处理第 n 行的值的输出 DeQueue ( Q,e ); cout<<e<< ' '; } // while } // yanghui |
||||
容易看出此算法的时间复杂度为O (n2)。 |
外循环的次数为
n-1,内循环的次数分别为3,4,…,n+1等。 |