利用队列打印杨辉三角

总的思路 . 通过 n-1行 来得到 下一行(n行)的数据并将 入队,与此同时将 n-1 数据出队;
第一步:构造第 —行的数据;
第一步:如何得到下一行的数据?
结合杨辉三角的自身特性:1, 第一行
1 1 第二行
1 2 1 第三行
1 3 3 1 第四行
1 4 6 4 1 第五行
················
观察可得:如第 4 行 第 2 个数由第 三 行的 第2个与第1个得到,第 3 个数可由第三行的 第3个与第2个数得到, 依此类推
第四行第 n 个 可由第三行的第 n-1个与 第n个得到。因此, 在n-1 行 出队时,需要 记录 前一个数;可能会问第一怎么得到, 因为第 1 个数前一个没有数, 只需将 用来记录前一个数的变量置零就好。通过这样就可以得到第n行的前n-1个数,还差最后一个数,因为每一行最后一个数固定为1,所以将1入队;

用队列打印杨辉三角c

#include

#define MAX 100

struct queue{
	int a[MAX];
	int front;
	int rear;
}; 

int main(void)
{
	struct queue xh;
	int n, i, j, a, b;
	
	xh.rear = xh.front = 0;  /* 对队列进行初始化,这里不一定赋值0,只要在数组内,但要保证头尾指向一致*/ 
	scanf("%d", &n);
    xh.a[xh.rear] = 1;
    xh.rear = (xh.rear + 1) % MAX; /*构造第一行数据*/ 
    for(i=1; i<=n; i++)
    {
    	a = 0;    /* 记录其前一个数 */ 
    	for(j=0; j<i; j++)
    	{
    		if ((xh.rear + 1)%MAX != xh.front)
    		{
    		    b = xh.a[xh.front];
    	    	xh.front = (xh.front + 1) % MAX;
		    	printf("%d ", b);       /* 打印第 i 行的数据*/
		    	xh.a[xh.rear] = b+a;
		    	xh.rear = (xh.rear + 1) % MAX;      /*创建 i+1 行的数据,并入队 */ 
		        a = b;
			}
		}
		xh.a[xh.rear] = 1;
		xh.rear = (xh.rear + 1) % MAX;
		printf("\n");
	}
	return 0;
}

你可能感兴趣的:(利用队列打印杨辉三角)