数据结构总结6——队列——杨辉三角的实现 by DexterYan

一、基础知识

二、代码实现

#include<stdio.h>
#include<stdlib.h>
#define maxsize 40 
struct dd
{
	int data[maxsize];
	int f,r;
	struct dd*next;
} ;
struct dd* init();
int full(struct dd*q);
int empty(struct dd*q);
int enter(struct dd*q,int x);
int delet(struct dd*q,int *x);
int get(struct dd*q,int *x);
void yh(int n);
//构造一个空的循环链表 
struct dd* init()
{
	struct dd*q,*head;
	q=(struct dd*)malloc(sizeof(struct dd));
	if(q!=NULL)
	{
		q->f=0;
		q->r=0;
	 } 
	 return q;
}
//判断队是否满
int full(struct dd*q)
{
	if((q->r+1)%maxsize==q->f)
		return 1;
	else 
	    return 0;
 } 
 //判断队是否空
int empty(struct dd*q)
{
	if(q->f==q->r)
	   return 1;
	else
	   return 0;
 } 
//入队
int enter(struct dd*q,int x)
{
	if(full(q))
	  return 0;
	q->data[q->r]=x;//插入x 
	q->r=(q->r+1)%maxsize;//队尾指针加1
	return 1; 
} 
//出队
int delet(struct dd*q,int *x)
{
	if(empty(q))
	 return 0;
	*x=q->data[q->f];//删除x 
	q->f=(q->f+1)%maxsize;//队头指针减1 
	return 1;
} 
//取队头数据元素
int get(struct dd*q,int *x)
{
	if(q->r==q->f)
	  return 0;
	else
	{
		*x=q->data[q->f];
		return 1;
	}
} 
//杨辉三角 
void YHSJ(int n)
{
	struct dd*q;
	int x1,x2;
	int i,j;
	q=init();
	printf("%5d\n",1);//第1行第1列 
	enter(q,1);
	enter(q,1);//第2行2个1 
	for(i=2;i<=n;i++)
	{
		enter(q,1);//i+1行第1列的1 
		for(j=0;j<=i-2;j++)//打印第i行生成i+1行 入队 
		{
			delet(q,&x1);//第i行第1个数出队
			get(q,&x2);
			printf("%5d",x1);
			enter(q,x1+x2); 
		}
		delet(q,&x2);
		printf("%5d\n",x2);
		enter(q,1);
	}
}
int main()
{
	int n;
	printf("请输入杨辉三角的行数:\n");
	scanf("%d",&n);
	YHSJ(n);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_41259302/article/details/90522970