首页 > 学院 > 开发设计 > 正文

队列实现打印杨辉三角

2019-11-17 05:47:33
字体:
来源:转载
供稿:网友
/*****************************队列实现打印杨辉三角******************************/
#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]);
 }
}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表