第1个回答 2006-03-09
这是用c++的
#include <stdio.h>
#include <assert.h>
#include <iostream.h>
class Queue;
class QueueNode
{
friend class Queue;
private:
int data;
QueueNode *link;
QueueNode (int d = 0, QueueNode *l = NULL):data(d), link(l){}
};
class Queue
{
public:
Queue():rear(NULL), front(NULL){}
~Queue();
void Enqueue(const int &item);
int DeQueue();
int GetFront();
void MakeEmpty();
int IsEmpty()const {return front == NULL;}
private:
QueueNode *front, *rear;
};
Queue::~Queue()
{
MakeEmpty();
}
void Queue::MakeEmpty()
{
QueueNode *p;
while(front)
{
p = front;
front = front->link;
delete p;
}
}
void Queue::Enqueue(const int &item)
{
if(!front)
front = rear = new QueueNode (item, NULL);
else
rear = rear->link = new QueueNode (item, NULL);
}
int Queue::DeQueue()
{
assert(!IsEmpty());
QueueNode *p = front;
int retvalue = p->data;
front = front->link;
delete p;
return retvalue;
}
int Queue::GetFront()
{
assert(!IsEmpty());
return front->data;
}
void YANGHUI(int n)
{
Queue q;
q.MakeEmpty();
q.Enqueue(1);
q.Enqueue(1);
int s = 0;
for(int i = 1; i <= n; i++)
{
q.Enqueue(0);
for(int j = 1; j <= i+2; j++)
{
int t = q.DeQueue();
q.Enqueue(s+t);
s = t;
if(j != i+2)
cout<<s<<" ";
}
cout<<endl;
}
}
int main(int argc, char* argv[])
{
YANGHUI(4);
return 0;
}