数据结构实验报告04

一、实验目的和要求

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");



}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值