#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
//回圈佇列的定義
typedef int queueelementype;
typedef struct
{
queueelementype element[MAXSIZE]; //佇列的元素空間
int front; //頭指標指示器
int rear; //尾指標指示器
}seqqueue;
//回圈佇列初始化
void initqueue(seqqueue *q)
{//將*q初始化為一個新的回圈串列
q->front=q->rear=0;
}
//判斷是否為空
int isempty(seqqueue *q)
{
if(q->front==q->rear)
return 0;
else
return 1;
}
//讀取佇列元素
int gethead(seqqueue *q,queueelementype *x)
{
if(q->front==q->rear)
return 0;
else
{
*x=q->element[q->front];
return 1;
}
}
//回圈佇列入隊
int enterqueue(seqqueue *q,queueelementype x)
{
//將元素x入隊
if((q->rear+1)%MAXSIZE==q->front) //尾指標加1追上頭指標,標志佇列已滿
return 0;
else
{
q->element[q->rear]=x;
q->rear=(q->rear+1)%MAXSIZE; //重置佇列設定隊尾指標
}
return 1;
}
//回圈佇列出隊
int deletequeue(seqqueue *q,queueelementype *x)
{
//洗掉佇列隊頭元素,用x回傳其值
if(q->front==q->rear) //佇列為空
return 0;
else
{
*x=q->element[q->front];
q->front=(q->front+1)%MAXSIZE; //重新設定隊頭指標
return 1; //操作成功
}
}
//列印楊輝三角
//列印楊輝三角形前n行元素的演算法
void yanghuitriangle()
{
seqqueue q;
int n,i,temp,x,N=0;
initqueue(&q);
enterqueue(&q,1);
scanf("%d",&N);//第一行元素入隊
for(n=2;n<=N;n++) // 產生第n行元素并人隊,同時列印第n-1行的元素
{
enterqueue (&q,1); /* 第n行的第一個元素人隊*/
for(i=1;i<=n-2;i++) //利用隊第n-1行元素產生第n行的中間n-2個元素并入隊
{
deletequeue (&q,&temp);
printf("%d\n",temp);/*列印第n-1行的元素*/
gethead(&q,&x);
temp= temp+x;//利用隊中第n-1行元素產生第n行元素*/
enterqueue (&q,temp);
printf("\n");
}
deletequeue (&q,&x);
printf("%d\n",x);/*列印第n-1行的最后一個元素*/
enterqueue (&q,1);/*第n行的最后一個元素人隊*/
}
printf("\n");
while(!isempty(&q))/*列印最后一行元素*/
{
deletequeue (&q,&x);
printf("%d\n",x);
printf("\n");
}
printf("\n");
}
void main()
{
yanghuitriangle();
}
哪兒錯著呀
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/193139.html
標籤:C++ 語言
上一篇:大佬們關于編輯字符時亂碼問題
下一篇:二進制加一
