/*****************************队列实现打印杨辉三角******************************/ #include <stdio.h> #include <conio.h> #include <iostream.h> //#include <stdlib.h>
#define TRUE 1 #define FALSE 0 #define Maxsize 100
typedef unsigned long int UINT; typedef strUCt { UINT data[Maxsize]; int front,rear; }Sequeue;//顺序队列的类型 Sequeue *Sq,mysq; void SetNull(Sequeue *sq);//置队空 int Empty(Sequeue *sq);//判队空 int Enqueue(Sequeue *sq,UINT x);//入队 UINT Dequeue(Sequeue *sq);//出队
void main(void) { UINT n;//杨辉三角的行数(阶数) UINT i,j;//i控制行数循环,j为每行的输出个数控制变量 UINT temp1,temp2; Sq=&mysq; Redo: SetNull(Sq); cout<<" 请输入杨辉三角的阶数n:"; cin>>n; Enqueue(Sq,1); cout<<endl; for(i=1;i<=n;i++) { temp2=0;
for(j=1;j<i;j++)//第i行有i列,此循环打印i-1列,每一行的第一个和最后一个都是1 { temp1=Dequeue(Sq); printf("%-5lu",temp1); temp2+=temp1; Enqueue(Sq,temp2); temp2=temp1;
} Dequeue(Sq);//最后一个元素:1出队 printf("1 "); temp2++;//temp2+=1;1即是最后一个元素 Enqueue(Sq,temp2); Enqueue(Sq,1);//最后一个元素1入队 //_sleep(100); //i行有i个元素,j控制打印的个数j=1;j<i;j++,i行打印i个 //打印第i行,并将其全部入队 }
printf("Do you want to continue? Y or N? "); int response; response=getche(); if(response=='Y'response=='y') goto Redo; else cout<<" Press any key to exit..."<<endl; getch();
}
void SetNull(Sequeue *sq)
int Empty(Sequeue *sq) { if(sq->rear==sq->front) return TRUE; else return FALSE; } int Enqueue(Sequeue *sq,UINT x) { if(sq->front==(sq->rear+1)%Maxsize) { printf("队列已满! "); return FALSE; } else { sq->rear=(sq->rear+1)%Maxsize; sq->data[sq->rear]=x; return TRUE; } }
UINT Dequeue(Sequeue *sq) { if(Empty(sq)) { printf("队列是空的! "); return FALSE; }
else { sq->front=(sq->front+1)%Maxsize; return (sq->data[sq->front]); } }
|