|
如果要求计算并输出杨辉三角前 n 行的值,则队列的最大空间应为 n+2。假设队列中已存有第
k 行的计算结果,并为了计算方便,在两行之间添加一个"0"作为行界值,则在计算第 k+1 行之前,头指针正指向第 k 行的"0",而尾元素为第
k+1 行的"0"。由此从左到右依次输出第 k 行的值,并将计算所得的第 k+1 行的值插入队列的基本操作为:
do {
DeQueue(Q, s); //
s 为二项式系数表第 k 行中"左上方"的值
GetHead(Q, e); //
e 为二项式系数表第 k 行中"右上方"的值
cout<<e; //
输出 e 的值
EnQueue(Q, s+e); //
计算所得第 k+1 行的值入队列
} while (e!=0); |
|
例如,假设n=6,当前队列中存放的是第4行的值,计算第5行的值同时输出第4行的值的过程如动画演示所示。
|
从动画演示你已经明白了算法的核心部分,那么要写出完整的算法的话,还需要补充哪些细节呢? |
|
|
1. 输出e是有条件的,对吗?即行末的 "0"
不需要输出;
2. 一行计算结束之后需要补一个"0",这个"0"值既是刚刚计算完的这行的"尾0",又是即将开始计算的下一行的"头0";
3. 其它初始化和结尾(输出最后一行)等。 |
|
|
|