当前位置:网站首页>Typical use cases for knapsacks, queues, and stacks
Typical use cases for knapsacks, queues, and stacks
2022-07-05 05:35:00 【Raise items】
List of articles
knapsack
The following example is to calculate all double
It's worth it The average and Sample standard deviation .
#include <iostream>
#include <cmath>
#include "bag.h"
int main()
{
Bag<double> bag;
double d;
while (std::cin >> d) {
bag.Add(d);
}
double sum = 0;
for (auto x : bag) {
sum += x;
}
double mean = sum / bag.Size();
sum = 0;
for (auto x : bag) {
sum += (x - mean) * (x - mean);
}
double std = sqrt(sum / (bag.Size() - 1));
std::cout << mean << std::endl;
std::cout << std << std::endl;
return 0;
}
In order to be able to use Range for Statement traversal bag
The elements in the object , You need to add begin()
and end()
Method (deque
The iterator supports ++
operation ).
template <typename Item>
class Bag {
public:
typename std::deque<Item>::iterator begin();
typename std::deque<Item>::iterator end();
// ...
};
template <typename Item>
typename std::deque<Item>::iterator Bag<Item>::begin()
{
return dq_.begin();
}
template <typename Item>
typename std::deque<Item>::iterator Bag<Item>::end()
{
return dq_.end();
}
Running results ( Command line ctrl + D
yes EOF
):
queue
The following example is to input the standard int
Value press The order Store in an array , We don't know in advance how much memory to allocate for the array .
#include <iostream>
#include <cmath>
#include "queue.h"
int main()
{
Queue<int> qi;
int ele;
while (std::cin >> ele) {
qi.EnQueue(ele);
}
int N = qi.Size();
int arr[N];
for (int i = 0; i < N; ++i) {
arr[i] = qi.Dequeue();
}
for (int i = 0; i < N; ++i) {
std::cout << arr[i] << std::endl;
}
return 0;
}
Running results (D
Is command line input EOF
The emergence of ):
Stack
In the following example , Press the integer in the standard input The reverse Print out .
#include <iostream>
#include "stack.h"
int main()
{
Stack<int> si;
int ele;
while (std::cin >> ele) {
si.Push(ele);
}
while (!si.IsEmpty()) {
std::cout << si.Pop() << std::endl;
}
return 0;
}
Running results :
Arithmetic expression evaluation
A classic use case of stack is computation Arithmetic expressions : Enter a string , Output a value .
For the sake of simplicity , expression Do not omit parentheses ( Use parentheses instead of priority rules to do four operations ), Brackets 、 Operands 、 Between operators Space separate .
Input :( 1 + ( 2 + 3 ) * ( 4 * 5 ) )
Output :101
E.W.Dijkstra
stay 20
century 60
In the s, a very simple algorithm was invented , The process is as follows :(1)
Prepare two stacks : The stack of operands and Operator stack .(2)
Traversal arithmetic expression .(3)
take The operand is pushed into the operand stack 、 Operator push into operator stack , Ignore left parenthesis .(4)
encounter Right bracket when , eject An operator , Again eject Required operands , perform operation , Result Push the The stack of operands .(5)
When the last closing bracket is processed , There is only one operand on the stack , That is the expression result .
Code implementation :
#include <iostream>
#include <string>
#include <stdlib.h>
#include <cmath>
#include "stack.h"
using std::string;
void Calculate(Stack<string> &ops, Stack<double> &vals)
{
string op = ops.Pop();
double a = vals.Pop();
if (op == string("+")) {
double b = vals.Pop();
vals.Push(a + b);
} else if (op == string("-")) {
double b = vals.Pop();
vals.Push(b - a);
} else if (op == string("*")) {
double b = vals.Pop();
vals.Push(a * b);
} else if (op == string("/")) {
double b = vals.Pop();
vals.Push(b / a);
} else if (op == string("sqrt")) {
vals.Push(sqrt(a));
} else {
std::cout << "unknown operator" << std::endl;
}
}
int main()
{
Stack<string> ops; // Operator stack
Stack<double> vals; // The stack of operands
string str;
while (std::cin >> str) {
if (str == string("(")) {
continue;
} else if ((str == string("+")) || (str == string("-")) ||
(str == string("*")) || (str == string("/")) ||
(str == string("sqrt"))) {
ops.Push(str);
continue;
} else if (str == string(")")) {
Calculate(ops, vals);
} else {
vals.Push(atof(str.c_str()));
}
}
std::cout << vals.Pop() << std::endl;
return 0;
}
Running results :
This implementation does not provide Parameter check Mechanism .
边栏推荐
- 剑指 Offer 05. 替换空格
- [to be continued] [depth first search] 547 Number of provinces
- EOJ 2021.10 E. XOR tree
- 挂起等待锁 vs 自旋锁(两者的使用场合)
- 动漫评分数据分析与可视化 与 IT行业招聘数据分析与可视化
- 【Jailhouse 文章】Performance measurements for hypervisors on embedded ARM processors
- Haut OJ 1221: a tired day
- Service fusing hystrix
- Graduation project of game mall
- Mysql database (I)
猜你喜欢
In this indifferent world, light crying
[depth first search] 695 Maximum area of the island
剑指 Offer 53 - II. 0~n-1中缺失的数字
YOLOv5-Shufflenetv2
浅谈JVM(面试常考)
【Jailhouse 文章】Look Mum, no VM Exits
Codeforces round 712 (Div. 2) d. 3-coloring (construction)
sync. Interpretation of mutex source code
R语言【数据集的导入导出】
SAP-修改系统表数据的方法
随机推荐
Cluster script of data warehouse project
Software test -- 0 sequence
Configuration and startup of kubedm series-02-kubelet
Developing desktop applications with electron
Gbase database helps the development of digital finance in the Bay Area
26、 File system API (device sharing between applications; directory and file API)
Solution to the palindrome string (Luogu p5041 haoi2009)
【Jailhouse 文章】Performance measurements for hypervisors on embedded ARM processors
浅谈JVM(面试常考)
[binary search] 69 Square root of X
ssh免密登录设置及使用脚本进行ssh登录并执行指令
SSH password free login settings and use scripts to SSH login and execute instructions
A preliminary study of sdei - see the essence through transactions
Chapter 6 data flow modeling - after class exercises
注解与反射
Using HashMap to realize simple cache
使用Electron开发桌面应用
[to be continued] I believe that everyone has the right to choose their own way of life - written in front of the art column
剑指 Offer 06.从头到尾打印链表
游戏商城毕业设计