Paano Magpatupad ng isang Priority Queue sa C ++



Magbibigay sa iyo ang artikulong ito ng isang detalyado at komprehensibong kaalaman sa kung paano ipatupad ang isang priyoridad na pila sa C ++ na may mga halimbawa.

Ang isang priyoridad na pila ay isang lalagyan sa STL. Ito ay katulad sa pila ngunit maliban sa ang katunayan na ang bawat elemento ng priyoridad na pila ay may tiyak na priyoridad at kapag nag-pop kami ng mga elemento mula sa pangunahing pila, ang mga elemento na may pinakamataas na priyoridad ay unang na-pop. Tulad ng priyoridad na pila, mayroong 10 magkakaibang uri ng mga lalagyan sa STL . Ang isang lalagyan ay isang bagay na nag-iimbak ng data. Ang mga lalagyan ng STL ay ipinatupad sa tulong ng mga klase ng template kaya't ang pagpapasadya nito upang hawakan ang iba't ibang mga uri ng data ay madali. Sa post na ito, tatalakayin namin ang pila ng Priority at mga konseptong nauugnay dito nang detalyado. Ang mga sumusunod na payo ay sasaklawin sa Priority Queue sa artikulong C ++,

Nagpapatuloy sa artikulong ito sa Priority Queue sa C ++





Mga bahagi ng STL

Ang STL ay binubuo ng mga klase ng template at pag-andar na maaaring magamit bilang isang pamantayang diskarte para sa pagtatago at pagproseso ng data. Talakayin natin ang mga bahagi ng STL

Mga lalagyan- Mayroong 10 uri ng mga lalagyan na tinukoy sa STL at ang mga ito ay naka-grupo sa 3 kategorya. Mula sa 3 mga ito, ang mga priyoridad na pila ay nabibilang sa kategorya ng nakuha na lalagyan. Ang bawat klase ng lalagyan ay may kanya-kanyang hanay ng mga pagpapaandar na maaaring magamit upang manipulahin ang data.



Algorithm - Ang isang algorithm ay isang pamamaraan na ginamit upang maproseso ang data na naroroon sa lalagyan na bagay. Nagbibigay ang STL ng maraming iba't ibang mga uri ng Mga Algorithm na maaaring magamit sa pagsisimula, paghanap, pag-uuri, pagsasama, kopya. Ang mga algorithm ay ipinatupad sa tulong ng mga pag-andar ng template.

Iterator- Ang isang iterator ay isang bagay na tumuturo patungo sa isang elemento sa lalagyan. Maaaring makatulong ang Iterator na magamit sa paglipat ng mga nilalaman ng isang lalagyan. Ang mga Iterator ay tulad ng mga payo na maaaring madagdagan at mabawasan. Gumagawa ito bilang isang link sa pagitan ng algorithm at ng lalagyan. Ginagamit ang mga Iterator para sa pagmamanipula ng data na nakaimbak sa isang lalagyan.

Nagpapatuloy sa artikulong ito sa Priority Queue sa C ++



Anila ng Heaps at Priority

Tulad ng nakita natin kanina na Ang Priority Queue ay kabilang sa kategorya ng mga nagmula na lalagyan. Ang iba pang mga miyembro ng kategoryang ito ay stack at pila. Ang mga nagmula sa lalagyan na ito ay kilala rin bilang mga adapter ng lalagyan.

Ang stack, pila at priyoridad na pila ay kilala bilang nagmula sa mga lalagyan dahil ginawa ang mga ito mula sa iba't ibang mga lalagyan ng pagkakasunud-sunod. Ang mga lalagyan na ito ay hindi sumusuporta sa anumang uri ng mga iterator na hindi sila ginagamit para sa pagmamanipula ng data.

Ano nga ba ang priyoridad ng pila?

Sa mga simpleng salita, ito ay isang lalagyan na ginamit namin upang mag-imbak ng data. Ang bawat elemento ng nakaimbak na data ay nakatalaga ng ilang priyoridad na makakatulong sa amin sa pag-iimbak ng data sa isang lohikal na pagkakasunud-sunod.
Syntax:priority_queue variable_name

Mahalagang isama ang isang header file sa programa upang magamit ang isang priyoridad na pila.

priyoridad na pila sa c ++Halimbawa, kung magdagdag kami ng 2, 10, 30, 5, 6 sa aming priyoridad na pila gamit ang push function at pagkatapos ay i-pop ang mga elemento na gumagamit ng pop function ang output ay magiging 30, 10, 6, 5, 2.

Okay, kaya alam namin ngayon ang layunin o ang paggamit ng priyoridad na pila. Ngunit paano nalaman kung 30> 10? Gumagawa ba ito ng ilang uri ng pag-uuri? Sa puntong ito ang Heaps ay dumating sa larawan. Upang malaman ang tungkol sa mga tambak nang detalyado sumangguni sa artikulong ito.

Tambak- Ang tambak ay tulad ng mga istraktura na tulad ng puno. Batay sa kung paano nakaayos ang mga node ng elemento ng bata sa isang tambak na may paggalang sa mga node ng magulang, ang mga tambak ay nahahati sa 2 bahagi

isa Min Heap- Sa Min Heap, ang halaga ng parent node ay mas mababa sa o katumbas ng halaga ng mga node ng bata.

2. Max Heap- Sa Max Heap, ang halaga ng parent node ay mas malaki kaysa o katumbas ng halaga ng mga node ng bata.

Tandaan- Hindi pinagsunod-sunod ng priyoridad na pila ang mga elemento gamit ang ilang pag-uuri ng algorithm sa halip na iniimbak nito ang data sa anyo ng isang magbunton.

Nagpapatuloy sa artikulong ito sa Priority Queue sa C ++

Pag-print ng lahat ng mga elemento ng isang priyoridad na pila

Matapos maunawaan ang mga pangunahing kaalaman ng pila ng priyoridad, magpatupad tayo ng mga programa upang maunawaan ang pinakakaraniwang ginagamit na mga pamamaraan na may isang priyoridad na pila

#include #include using namespace std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) habang (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Output:

istraktura ng isang programang java

30 15 10 9 6 2

Sa program sa itaas, ginamit namin ang mga pagpapaandar ng pop (), tuktok () at itulak () na ginagamit sa karamihan ng mga oras habang nakikipag-usap sa isang priyoridad na pila. Tingnan natin ang ilan sa mga pamamaraan na maaari nating magamit sa isang priyoridad na pila

laki (): Ang pagpapaandar na ito Ibinabalik ang laki ng Priority Queue

walang laman (): Ginagamit ang pagpapaandar na ito upang suriin kung ang priyoridad na pila ay walang laman o hindi. Ito ay nagbabalik totoo ng priyoridad na pila ay walang laman.

itulak (): Nagpapasok ng isang elemento sa Priority Queue.

pop (): Tinatanggal ng pagpapaandar na ito ang nangungunang elemento ng linya ng priyoridad na kung saan ay ang elemento na may pinakamataas na priyoridad.

magpalit (): Ang pagpapaandar na ito ay nagpapalitan ng mga elemento ng linya ng priyoridad sa isa pang pila na priyoridad. Ang pagpapaandar ay tumatagal ng isang priyoridad ng priyoridad bilang isang parameter.

pumalit (): Ginamit ang pagpapaandar na ito upang magdagdag ng isang elemento sa tuktok ng pila ng priyoridad.

Tingnan natin ang isa pang programa.

#include #include using namespace std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) habang (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Output:

2 6 7 9 10 15 30

Sa pamamagitan nito, natapos na namin ang Priority Queue na ito sa artikulong C ++. Kung nais mong matuto nang higit pa, tingnan ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online. Ang kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo upang sanayin ka para sa parehong core at advanced na mga konsepto ng Java kasama ang iba't ibang mga balangkas ng Java tulad ng Hibernate & Spring.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng blog na ito at babalikan ka namin sa lalong madaling panahon.