博客作业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块的最少花费。

优点在于每次取当前队列中最小的两个值,一直累加,直到队列中只剩下一个值,就得到当前的最优解。

5. 代码Git提交记录截图

posted @ 2018-04-14 21:00  yawlc  阅读(214)  评论(2编辑  收藏  举报