队列打印杨辉三角,不懂啊,急

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了队列打印杨辉三角,不懂啊,急相关的知识,希望对你有一定的参考价值。

如何把这个程序不用模板写出来?以及ostream& operator<<(ostream& os,SepQueue<T>& Q)这个函数的意义是什么?想要去掉模板,不是简单的把T改成int,或float等,我改过,好像不对呀!谢谢高手了!
#include<iostream.h>
#include<stdio.h>
#include<assert.h>
const int maxSize=100;
//enum boolfalse,true;
template<class T>
class Queue

public:
Queue();
~Queue();
virtual bool EnQueue(const T& x)=0;
virtual bool DeQueue(T& x)=0;
virtual bool getFront(T& x)=0;
virtual bool IsEmpty()const=0;
virtual bool IsFull()const=0;
virtual int getSize()const=0;
;

template<class T>
class SepQueue: public Queue<T>

public:
SepQueue(int sz=10);
~SepQueue()delete[] elements;
bool EnQueue(const T& x);
bool DeQueue(T& x);
bool getFront(T& x);
void makeEmpty()front=rear=0
bool IsEmpty()constreturn (front==rear)?true:false;
bool IsFull()constreturn((rear+1)%maxSize==front)?true:false;
int getSize()constreturn(rear-front+maxSize)%maxSize;
friend ostream& operator<<(ostream& os,SepQueue<T>& Q)
protected:
int rear,front;
T *elements;
int maxSize;
;

template<class T>
SepQueue<T>::SepQueue(int sz):front(0),rear(0),maxSize(sz)

elements=new T[maxSize];
assert(elements!=NULL);
;

template<class T>
bool SepQueue<T>::EnQueue(const T& x)

if(IsFull()==true) return false;
elements[rear]=x;
rear=(rear+1)%maxSize;
return true;
;

template<class T>
bool SepQueue<T>::DeQueue(T& x)

if(IsEmpty()==true) return false;
x=elements[front];
front=(front+1)%maxSize;
return true;
;

template<class T>
bool SepQueue<T>::getFront(T& x)

if(IsEmpty()==true) return false;
x=elements[front];
return true;
;

template<class T>
ostream& operator<<(ostream& os,SepQueue<T>& Q)

os<<"front="<<Q.front<<",rear="<<Q.rear<<endl;
for(int i=front;i!=rear;i=(i+1)%maxSize;)

os<<i<<":"<<Q.elements[i]<<endl;

return os;
;

void YangVI(int n)
SepQueue<int> q(n+2);
int i=1,j,s=0,k=0,t,u;
q.EnQueue(i); q.EnQueue(i);
for(i=1;i<=n;i++)
cout<<endl;
q.EnQueue(k);
for(int f=i;f<n;f++)
cout<<' ';
for(j=1;j<=i+2;j++)
q.DeQueue(t);
u=s+t; q.EnQueue(u);
s=t;
if(j!=i+2) cout<<s<<' ';


cout<<endl;
;

void main()

int n;
cout<<"输入行数"<<endl;
cin>>n;
YangVI(n);


杨辉三角那个函数的意思我也不懂呀!帮忙写写每句的意思吧,非常非常感谢

用C语言写的杨辉三角形程序网上多的是,你何必非要找这个模板的呢

void YangVI(int n)
SepQueue<int> q(n+2); //第n行只有n+1个元素,所以设队列容量为n+2没问题
int i=1,j,s=0,k=0,t,u;
q.EnQueue(i); q.EnQueue(i);//先将第一行两个1入队列
for(i=1;i<=n;i++)
cout<<endl;
q.EnQueue(k); //k始终是0,这步相当于在上一行的最右边加了个0,保证当前行的最右边的1,可以用上一行的1+0得到
for(int f=i;f<n;f++)
cout<<' '; //每行前面都要输出一定的空格,以保证三角形输出时左右对称
for(j=1;j<=i+2;j++)
q.DeQueue(t);//取出上一行的元素(第一个肯定是1,最后一个是0)
u=s+t; //s初始化为0,而且下面的s=t这句在循环最后一步时,因为t是0,所以s又还原为0,以保证每一行第一个1,由上一行的1和添加的0相加得到.
q.EnQueue(u); //和入队列
s=t; //s存放刚才相加的两个数中右边那个,在下一个加法操作时正好用作左边的加数
if(j!=i+2) cout<<s<<' '; //输出上一行的元素,其中最后一个0不能输出


cout<<endl;
;
参考技术A 用数组解决啊
public class YangHui

public static void main(String args[])

int i,j,space,n;
n=10;//为了省事,没有从命令行参数取值。
int a[][]=new int[n][];
a[0]=new int[1];
for(i=1;i<n;i++) a[i]=new int[i+1];
a[0][0]=1;
for(i=1;i<n;i++)

a[i][0]=1;//行首1
a[i][a[i].length-1]=1;//行尾1
for(j=1;j<a[i].length-1;j++) //肩上两数之和
a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i<n;i++)

for(space=n-i;space>0;space=space-1)

System.out.print("\t");

for(j=0;j<a[i].length;j++)

System.out.print(a[i][j]+"\t\t");

System.out.println();


参考技术B 不懂

杨辉三角队列的实现 利用循环顺序队列打印杨辉三角。杨辉三角的特点是两个腰上的数字都为1,其它位置上的

利用循环顺序队列打印杨辉三角。杨辉三角的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和。所以在打印过程中,第i行上的元素要由第i-1行中的元素来生成。在循环队列中依次存放第i-1行上的元素,然后逐个出队并打印,同时生成第i行元素并入队列。打印的杨辉三角形如下所示:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1 7 21 35 35 21 7 1

参考技术A #include <stdio.h>
#define N 11
void main()
int i,j,a[N][N];
for(i=1;i<N;i++)
a[i][i]=1;
a[i][1]=1;

for(i=3;i<N;i++)
for(j=2;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i<N;i++)
for(j=1;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");

参考技术B #include <stdio.h>
#define K 10
void main()
int i,j,a[K][K];
for(i=1;i<K;i++)
a[i][i]=1;
a[i][1]=1;

for(i=3;i<K;i++)
for(j=2;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i<K;i++)
for(j=1;j<=i;j++)
printf("%5d",a[i][j]);

参考资料:C++6编程书原题

参考技术C 根本不必

以上是关于队列打印杨辉三角,不懂啊,急的主要内容,如果未能解决你的问题,请参考以下文章

用队列计算并打印杨辉三角的前8行 请高手来调试啊啊啊啊啊啊

打印杨辉三角

打印杨辉三角形(Pascal's triangle)——利用队列

用队列打印出n行的杨辉三角,用c语言写的,

利用队列打印出n行杨辉三角形.用C语言

用队列知识怎么实现输出杨辉三角?