当前位置:网站首页>Simple knapsack, queue and stack with deque
Simple knapsack, queue and stack with deque
2022-07-05 05:35:00 【Raise items】
List of articles
Algorithm
When solving a problem , it is to be noted that : understand and Definition problem , Control the problem Complexity , Put it decompose For sub problems that are easier to solve .
The steps to solve the problem Called algorithm .
In the field of Computer Science , We use it Algorithm This word describes a kind of Co., LTD. 、 determine 、 It works And suitable for A computer program To solve the problem .
Computing and storage resources of computers are limited , So it can only solve some mathematical theoretical problems .
To define an algorithm , We can use Natural language Describe the process of solving a problem , Or use a Program Design language to realize this process .
To calculate two nonnegative integers p
and q
Of greatest common divisor For example .
Natural language description
if q
yes 0
, Then the greatest common divisor is p
;
otherwise , take p
Divide q
Get the remainder r
,p
and q
The greatest common divisor of is q
and r
Maximum common divisor of .
C++ Realization
int gcd(int p, int q)
{
if (q == 0) {
return p;
}
return gcd(q, p % q);
}
Compared to natural language , The program is more about the algorithm accurate and Completely Description of .
meanwhile , data structure It is the by-product or result of the algorithm , Therefore, to understand the algorithm, we must learn the data structure .
data structure
Here are three data structures : knapsack 、 queue and Stack .
Generic and iteration (template<typename Item>
Iterable<Item>
) It can ensure that three data structures can be stored Any type The elements of , And the element is in a form that can be Traverse Preserved in the form of .
In this case , Use STL
Medium deque
Storage elements . knapsack 、 Both queues and stacks are right deque
Encapsulation .
knapsack
Knapsack is a data structure that collects elements , Deleting elements... Is not supported .bag.h
#include <deque>
template <typename Item>
class Bag {
public:
Bag(); // Create an empty backpack
void Add(const Item &item); // Additive elements
bool IsEmpty(); // Whether the backpack is empty
int Size(); // The number of elements in the backpack
private:
std::deque<Item> dq_;
};
template <typename Item>
Bag<Item>::Bag() {
}
template<typename Item>
void Bag<Item>::Add(const Item &item)
{
dq_.push_back(item);
}
template <typename Item>
bool Bag<Item>::IsEmpty()
{
return dq_.empty();
}
template <typename Item>
int Bag<Item>::Size()
{
return dq_.size();
}
queue
Queue is based on fifo The set type of the strategy .queue.h
#include <deque>
template <typename Item>
class Queue {
public:
Queue(); // Create an empty queue
void EnQueue(const Item &item); // Additive elements
Item Dequeue(); // Delete the first added element
bool IsEmpty(); // Whether the queue is empty
int Size(); // The number of elements in the queue
private:
std::deque<Item> dq_;
};
template <typename Item>
Queue<Item>::Queue() {
}
template <typename Item>
void Queue<Item>::EnQueue(const Item &item)
{
dq_.push_back(item);
}
template <typename Item>
Item Queue<Item>::Dequeue()
{
auto item = dq_.front();
dq_.pop_front();
return item;
}
template <typename Item>
bool Queue<Item>::IsEmpty()
{
return dq_.empty();
}
template <typename Item>
int Queue<Item>::Size()
{
return dq_.size();
}
Stack
The stack is based on Last in, first out The set type of the strategy .stack.h
#include <deque>
template <typename Item>
class Stack {
public:
Stack(); // Create an empty stack
void Push(const Item &item); // Additive elements
Item Pop(); // Delete recently added elements
bool IsEmpty(); // Is the stack empty
int Size(); // The number of elements in the stack
private:
std::deque<Item> dq_;
};
template <typename Item>
Stack<Item>::Stack() {
}
template <typename Item>
void Stack<Item>::Push(const Item &item)
{
dq_.push_back(item);
}
template <typename Item>
Item Stack<Item>::Pop()
{
auto item = dq_.back();
dq_.pop_back();
return item;
}
template <typename Item>
bool Stack<Item>::IsEmpty()
{
return dq_.empty();
}
template <typename Item>
int Stack<Item>::Size()
{
return dq_.size();
}
A classic application of stack is computation Arithmetic expressions Value . for example :(1 + ((2 + 3) * (4 * 5)))
边栏推荐
- CF1634 F. Fibonacci Additions
- Haut OJ 1347: addition of choice -- high progress addition
- Acwing 4300. Two operations
- Yolov5 adds attention mechanism
- 每日一题-搜索二维矩阵ps二维数组的查找
- A preliminary study of sdei - see the essence through transactions
- [to be continued] [UE4 notes] L2 interface introduction
- Introduction to tools in TF-A
- How can the Solon framework easily obtain the response time of each request?
- PC寄存器
猜你喜欢
【实战技能】如何做好技术培训?
Sword finger offer 58 - ii Rotate string left
剑指 Offer 05. 替换空格
YOLOv5添加注意力机制
【Jailhouse 文章】Jailhouse Hypervisor
Personal developed penetration testing tool Satania v1.2 update
【Jailhouse 文章】Performance measurements for hypervisors on embedded ARM processors
[speed pointer] 142 circular linked list II
CF1637E Best Pair
Sword finger offer 09 Implementing queues with two stacks
随机推荐
Introduction to memory layout of FVP and Juno platforms
kubeadm系列-00-overview
[jailhouse article] jailhouse hypervisor
object serialization
剑指 Offer 09. 用两个栈实现队列
Reader writer model
[merge array] 88 merge two ordered arrays
[es practice] use the native realm security mode on es
Add level control and logger level control of Solon logging plug-in
Haut OJ 1401: praise energy
剑指 Offer 06.从头到尾打印链表
Haut OJ 1357: lunch question (I) -- high precision multiplication
On-off and on-off of quality system construction
A problem and solution of recording QT memory leakage
The number of enclaves
MySQL数据库(一)
After setting up the database and website When you open the app for testing, it shows that the server is being maintained
Find a good teaching video for Solon framework test (Solon, lightweight application development framework)
剑指 Offer 53 - II. 0~n-1中缺失的数字
Maximum number of "balloons"