博客作业03--栈和队列
1.学习总结
(到现在为止,已经学习了数据结构绪论、线性表、栈和队列等知识点。尝试使用思维导图将这些碎片化的概念、知识点组织起来。使用Xmind画出知识点及知识点之间的联系。
步骤如下:
1.1 写出你认为本周学习中比较重要的知识点关键词,如逻辑结构、栈、队列、存储结构等。
1.2 使用思维导图将这些关键词组织起来。)
2.PTA实验作业
题目1:jmu-字符串是否对称
设计思路(伪代码或流程图)
依次进栈
while(遍历栈)
依次出栈与数组的元素从头开始比较
若遍历完则字符串对称
否则不对称
代码截图(请贴主要函数代码,一些操作函数代码不需要贴图。)
PTA提交列表说明(PTA提交列表中的每个错误详细说明为什么及如何解决。)
在出栈的函数中对e没有加&符号。
题目2: jmu-报数游戏
设计思路
while(队列不为空)
如果不为第m个数,先出队列再进队列
是第m个数,出队列,若队列不为空,输出e
最后一个元素出队列,输出e
代码截图(请贴主要函数代码,一些操作函数代码不需要贴图。)
PTA提交列表说明(PTA提交列表中的每个错误详细说明为什么及如何解决。)
最后一个元素后不能有空格的问题
判断出队列后队列是否为空。来输出空格
题目3:银行业务队列简单模拟
设计思路
对数组进行遍历
若元素为奇数进入队列A,偶数进入队列B
while(遍历队列A队列B)
队列A出队列2次,队列B出队列1次
队列A或队列B不空,则依次出队列
代码截图(请贴主要函数代码,一些操作函数代码不需要贴图。)
PTA提交列表说明(PTA提交列表中的每个错误详细说明为什么及如何解决。)
最后一个元素后不能有空格的问题
3.截图本周题目集的PTA最后排名
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:
227
4. 阅读代码
修理牧场(队列模拟哈夫曼树-最优二叉树)
#include <cstdio>
#include <queue>
using namespace std;
priority_queue<int, vector<int>, greater<int> > q;
int main() {
int n, m;
scanf( "%d", &n );
for( int i = 0; i < n; i++ ) {
scanf( "%d", &m );
q.push( m );
}
int sum = 0;
while( q.size() > 1 ) {
int first = q.top();
q.pop();
int second = q.top();
q.pop();
sum += first + second;
q.push( first + second );
}
printf( "%d\n", sum );
return 0;
}
题目介绍
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的能锯成N块的木头,即该木头的长度是Li的总和。
但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。
请编写程序帮助农夫计算将木头锯成N块的最少花费。
优点在于每次取当前队列中最小的两个值,一直累加,直到队列中只剩下一个值,就得到当前的最优解。