利用循环队列打印杨辉三角形

利用循环队列打印杨辉三角形
首先需要掌握的是循坏队列的基本函数
1:初始化
2:入队
3:出队
其次需要明确打印的循坏嵌套
最后将代码整合在一起

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

//循坏队列的存储结构定义 
typedef struct 
{
	int data[MAXSIZE];
	int front;//队首下标 
	int rear;//队尾下标 
} Queue;

//初始化操作
void InitQueue (Queue *q)
{
	q->front = q->rear = 0;//将队首队尾下标都赋值为0 
 } 
 
//入队
int pushQueue (Queue *q , int e)
{
	if((q->rear+1)%MAXSIZE == q->front) //损失一个元素的空间,尾指针所指向的空单元的后继单元是头所在的单元
	{                                  //队列为满的条件:(rear+1)%MAXSIZE == front  
		printf("队列已满不能入队!\n") ;
		return 0 ;
	}
	else 
	q->data[q->rear] = e; //元素从队尾进入队列 
	q->rear = (q->rear+1)%MAXSIZE ; //入队:尾追头 
	return 1 ;
 } 
 int popQueue(Queue *q,int &x)//这里需要将参数x值改变带回来,所以需要用引用或者指针 
 {
 	if(q->front==q->rear)
 		printf("队列为空!\n");
 		return 0;
 		x=q->data[q->front];//元素从队首位置出队列 
 		q->front=(q->front+1)%MAXSIZE;
		return 1;	 
 }

 

 void YangHuiTriangle(int N)
 {
 	Queue q;
 	//q=new Queue();
 	int i,j,k,s1,s2,s,x;
 	InitQueue(&q);
 	for(k=1;k<=N;k++)
 		printf(" ");//打印第一行的空格 
 	printf("%d",1);//打印第一行的元素 
 	printf("\n");
 	pushQueue(&q,1);//将元素1入队 
 	for(i=2;i<=N;i++)//此层循坏控制着杨辉三角形的行数 
 	{
 		for(k=N-i;k>=0;k--)
 			printf(" ");// 打印第i行的空格 
		s1=0;
		for(j=1;j<=i-1;j++)//控制第i行中的元素 
		{
			popQueue(&q,s2);//将队列队首的元素出队。赋值给s2 
			s=s1+s2;//控制前一行的元素相加 
			pushQueue(&q,s);//将得到的结果s入队 
			printf("%d",s);//打印s 
			printf(" ");//设置打印后的空格 
			s1=s2; 
		} 
		printf("%d",1);//打印第i行的最后一个元素 
		pushQueue(&q,1);//将1重新入队 
		printf("\n");
	 }
 }
 //主函数 
 int main()
 {
 	int N;
 	printf("请输入杨辉三角形的行数:");
	scanf("%d",&N);
	YangHuiTriangle(N);//调用打印杨辉三角形的函数 
	return 0;
 }
  • 12
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
循环队列是一种特殊的队列,它可以在队列的两端进行插入和删除操作。而杨辉三角形是一个数学上的三角形,它的每一行都是由二项式系数构成的。下面是使用循环队列打印杨辉三角形的方法: 1.首先,我们需要定义一个循环队列,并初始化队列的大小和队头指针和队尾指针。 2.然后,我们需要将第一行的数字插入到队列中,并打印出来。 3.接下来,我们需要使用循环队列来计算杨辉三角形的每一行。具体的方法是,将队头元素和队尾元素相加,并将结果插入到队列的尾部。然后,将队头指针向后移动一位,将队尾指针向前移动一位。 4.重复步骤3,直到计算出所有的行。 下面是使用循环队列打印杨辉三角形的代码实现: ``` #include <stdio.h> #define MAX_SIZE 100 int queue[MAX_SIZE]; int front = -1, rear = -1; void enqueue(int x) { if ((rear + 1) % MAX_SIZE == front) { printf("Queue is full\n"); return; } if (front == -1) { front = 0; rear = 0; } else { rear = (rear + 1) % MAX_SIZE; } queue[rear] = x; } int dequeue() { if (front == -1) { printf("Queue is empty\n"); return -1; } int x = queue[front]; if (front == rear) { front = -1; rear = -1; } else { front = (front + 1) % MAX_SIZE; } return x; } void print_yanghui_triangle(int n) { enqueue(1); for (int i = 0; i < n; i++) { int prev = 0; for (int j = 0; j <= i; j++) { int curr = dequeue(); printf("%d ", curr); enqueue(curr + prev); prev = curr; } printf("\n"); } } int main() { int n; printf("Enter the number of rows: "); scanf("%d", &n); print_yanghui_triangle(n); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值