一、实验目的和要求
1.要求抽象出队列结构进行独立实现
2.其它要求同作业01要求。
二、实验环境
VisualStudio
三、实验内容
04. 设计算法,用队列计算并打印杨辉三角的前n行的内容。
- 实验过程
4.1 任务定义和问题分析
1.建造队列,具体实现其功能----入队、出队、判空、判满、返回栈顶元素。
2.了解杨辉三角
3.利用队列来处理杨辉三角并打印相同的形状

五、测试及结果分析
对各种数据运行程序和算法的结果记录和分析,并对错误所作的修改和结果。
5.1 实验数据
测试数据:9,6,13



六、实验收获
在实验过程中还是遇到了许多问题的,比如刚开始搞懂杨辉三角的操作机制就很难,而后,没有调整宽度,所以输出的数据全部粘在一起,之后又发现和理想的等腰三角形有很大差异,(因为我输出的是直角三角形),学会了固定宽度输出的方法,收获满满。
七、参考文献
八、附录(源代码)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
template <typename DataType>class Queue
{
public:
Queue(int Size)
{
maxSize = Size;
front = 0;
rear = 0;
count = 0;
elements = new DataType[Size];
}
~Queue()
{
delete[] elements;
}
bool InsertQueue(DataType data)
{
if (count == maxSize)
return false;
elements[rear] = data;
rear = (rear + 1) % maxSize;
count++;
return true;
}
bool IsEmpty()
{
if (count == 0)
{
return true;
}
return false;
}
bool IsFull()
{
if (count == maxSize)
return true;
return false;
}
DataType GetTop()
{
return elements[front];
}
DataType PopTop()
{
if (count == 0)
exit(1);
DataType temp = elements[front];
front = (front + 1) % maxSize;
count--;
return temp;
}
int GetNum()
{
return count;
}
private:
int count, maxSize, front, rear;
DataType* elements;
};
Queue<int> q(1010);
int n;
void init()
{
q.InsertQueue(0);
q.InsertQueue(1);
q.InsertQueue(0);
}
void work(int x)
{
int l = 0, r = 0;
q.InsertQueue(0);
r = q.PopTop();
for (int i = 1;i <= x;i++)
{
l = r;r = q.PopTop();
if (i == 1 && x == n)
printf("%3d", r);
else
printf("%6d", r);
q.InsertQueue(r + l);
}
cout << "\n";
l = r;r = q.PopTop();
q.InsertQueue(l + r);
q.InsertQueue(0);
}
void kprint(int num, int x)
{
if (num == x)return;
int len = (num - x - 1) * 3;
for (int i = 1;i <= len;i++)
{
cout << " ";
}
}
int main()
{
init();
cin >> n;
for (int i = 1;i <= n;i++)
{
kprint(n, i);
work(i);
}
system("pause");
}
1259

被折叠的 条评论
为什么被折叠?



