例一 循环队列应用举例


  以下为计算杨辉三角的算法。

算法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等。