diff --git a/LinearList/priorityQueue/CMakeLists.txt b/LinearList/priorityQueue/CMakeLists.txt new file mode 100644 index 0000000..e4cfe39 --- /dev/null +++ b/LinearList/priorityQueue/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.31) +project(priorityQueue) + +set(CMAKE_CXX_STANDARD 20) + +add_executable(priorityQueue main.cpp + maxPriorityQueue.h + maxPriorityQueueRealise.h) diff --git a/LinearList/priorityQueue/main.cpp b/LinearList/priorityQueue/main.cpp new file mode 100644 index 0000000..acde4c3 --- /dev/null +++ b/LinearList/priorityQueue/main.cpp @@ -0,0 +1,57 @@ +#include +#include "maxPriorityQueueRealise.h" +using namespace std; +int main() { + maxPriorityQueueRealise q; + vector> v; + v.push_back(make_pair("first", 9)); + v.push_back(make_pair("second", 8)); + v.push_back(make_pair("third", 7)); + v.push_back(make_pair("fourth", 6)); + v.push_back(make_pair("fifth", 5)); + v.push_back(make_pair("sixth", 4)); + v.push_back(make_pair("seventh", 1)); + v.push_back(make_pair("eighth", 2)); + v.push_back(make_pair("ninth", 3)); + q.push(v.at(4)); + q.push(v.at(3)); + q.push(v.at(2)); + q.push(v.at(1)); + q.push(v.at(0)); + q.push(v.at(5)); + q.push(v.at(6)); + q.push(v.at(7)); + q.push(v.at(8)); + cout << q.top() << endl; + q.pop(); + cout << q.top() << endl; + q.pop(); + cout << q.top() << endl; + q.pop(); + cout << q.top() << endl; + q.pop(); + cout << q.top() << endl; + q.pop(); + cout << q.top() << endl; + q.pop(); + cout << q.top() << endl; + q.pop(); + cout << q.top() << endl; + q.pop(); + cout << q.top() << endl; + return 0; +} +/* + *发现789的三个顺序倒过来了,类的设计正确 + *本类设计的是maxpriority,如果有重复的priority,优先处理先进入的,也就是FIFO + *如果有需求修改可以把比较的时候加入等号,变成FILO +first +second +third +fourth +fifth +sixth +ninth +eighth +seventh + */ \ No newline at end of file diff --git a/LinearList/priorityQueue/maxPriorityQueue.h b/LinearList/priorityQueue/maxPriorityQueue.h new file mode 100644 index 0000000..ab9d910 --- /dev/null +++ b/LinearList/priorityQueue/maxPriorityQueue.h @@ -0,0 +1,19 @@ +// +// Created by PC on 25-8-9. +// + +#ifndef MAXPRIORITYQUEUE_H +#define MAXPRIORITYQUEUE_H + +template +class maxPriorityQueue { +public: + virtual ~maxPriorityQueue() = default; + virtual bool empty() const = 0; + virtual int size() const = 0; + virtual T& top() = 0; + virtual void pop() = 0; + virtual void push(const std::pair& x) = 0; +}; + +#endif //MAXPRIORITYQUEUE_H diff --git a/LinearList/priorityQueue/maxPriorityQueueRealise.h b/LinearList/priorityQueue/maxPriorityQueueRealise.h new file mode 100644 index 0000000..b791645 --- /dev/null +++ b/LinearList/priorityQueue/maxPriorityQueueRealise.h @@ -0,0 +1,60 @@ +// +// Created by PC on 25-8-9. +// + +#ifndef MAXPRIORITYQUEUEREALISE_H +#define MAXPRIORITYQUEUEREALISE_H +#include "maxPriorityQueue.h" +#include + +template +class maxPriorityQueueRealise : public maxPriorityQueue { +private: + std::vector> queue; //T是元素,int是优先等级 + int qsize; +public: + maxPriorityQueueRealise() : qsize(0) {} + + bool empty() const {return qsize == 0;} + int size() const {return qsize;} + T& top(); + void pop(); + void push(const std::pair& x); + +}; + +template +T& maxPriorityQueueRealise::top() { + int max = -1; + int pos = 0; + int index = 0; + for ( std::pair x : queue ) { + if (x.second > max) { + max = x.second; + pos = index; + } + index++; + } + return queue[pos].first; +} + +template +void maxPriorityQueueRealise::pop() { + int max = -1; + int pos = 0; + int index = 0; + for ( std::pair x : queue ) { + if (x.second > max) { + max = x.second; + pos = index; + } + index++; + } + queue.erase(queue.begin() + pos); +} + +template +void maxPriorityQueueRealise::push(const std::pair& x) { + queue.push_back(x); +} +#endif //MAXPRIORITYQUEUEREALISE_H