习题4-打印扬辉三角系数.c

来自「数据结构各章实验源代码; 数据结构实验源代码」· C语言 代码 · 共 74 行

C
74
字号
#include  "datastru.h"
#include  <stdio.h>
#include  <malloc.h>

DATATYPE1 dellinkqueue(LINKQUEUE *q)
{/*删除队头元素并返回*/
	LINKQLIST *p;
	DATATYPE1 v;

	if(q->front == q->rear)
	   {	printf("队列空\n");
		v = 0;}
	else
	   {	p = (q->front)->next;
		(q->front)->next = p->next;
		if(p->next == NULL)
			q->rear = q->front;
		v = p->data;
		free(p);}
	return v;
}

DATATYPE1 getlinkqueue(LINKQUEUE *q)
{/*返回队头元素*/
	DATATYPE1 v;

	if(q->front == q->rear)
	   {printf("队列空\n");	v = 0;}
	else  v = (q->front)->next->data;
	return v;
}

void enlinkqueue(LINKQUEUE *q, DATATYPE1 x)
{/*元素x 入队列*/
	(q->rear)->next = (LINKQLIST *)malloc(sizeof(LINKQLIST));
	q->rear = (q->rear)->next;
	(q->rear)->data = x;
	(q->rear)->next = NULL;
}

void initlinkqueue(LINKQUEUE *q)
{/*链队列初始化*/
	q->front = (LINKQLIST *)malloc(sizeof(LINKQLIST));
	(q->front)->next = NULL;
	q->rear = q->front;
}

void main(){
	LINKQUEUE   lq, *q;
	int n, s, t, k, i, m, j;

	printf("打印扬辉三角形,输入行数 : ");
	scanf("%d",&n);
	q = &lq;
	initlinkqueue(q);           /*链队列初始化*/
	enlinkqueue(q, 1);          /*预先放入第一行的两个系数1*/
	enlinkqueue(q, 1);
	s = 0;                      /*计算下一行系数时用到的工作单元*/
	for(i = 1; i <= n; i++) {   /*逐行处理*/
		printf("\n");       /*换行*/
		for(m = i; m <= n; m++) printf("  ");
		enlinkqueue(q, 0);  /*各行之间插入一个0*/
		for(j = 1; j <= i + 2; j++) {    /*处理第i行的i+2个系数(包括一个0)*/
			t = getlinkqueue(q);     /*取队头元素*/
			k = dellinkqueue(q);     /*删除队头元素*/
			enlinkqueue(q, s+t);     /*计算下一行的系数,入队列*/
			s = t;
			if(j != (i+2)) printf("%d   ",s);  /*打印一个系数,第i+2个是0,不显示*/
			}
		printf("\n");
	}
	printf("\n\n");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?