3 Stackar & Köer

Stackar och köer påminner om vectorer och listor, men stackar och köer är mer en tillfällig lagrings plats. En stack är som en trave med tallrikar, du kan bara lägga till överst och ta överst. En kö är som kön till kassan, det läggs till längst bak och avbetas längst fram. Stackar och köer fungerar så bortsett från det att de inte lagrar tallrikar och personer utan variabler. Dvs att om n skrivare får massa packet med information som den ska skriva ut så är det ju rimligt att datan tillfälligt lagras i en kö.

Stackar

Funktioner:

#include <stack> - inkluderar stack biblioteket
stack<variabeltyp> namn - skapar en stack
namn.push(variabel) - lägger till variablen längs uppe på stacken
namn.pop() - tar bort den variabel som ligger överst
namn.top() - returnerar det värde som ligger längst upp (tar inte bort variablen)
namn.empty() - kollar om variablen är tom, true returneras om så är fallet
namn.size() - returnerar storleken av stacken

Det går bra att jämföra olika stackar med == och !=, även <, >, <=, >= går bra.

Ett tips är att istället för att använda for-loppar så skriver ni:
  1. while(namn.size()!=0)
  2. continue;

Därför att om man använder en for-loop så minskar storleken på stacken och for-loopen loopar bara drygt hälften av gångerna. Detta gäller också för köer.

Exempel:

  1. #include <iostream>
  2. #include <stack>
  3. #include <string>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. string ord, palindrom;
  9. stack<char> tecken;
  10. cout<<"Mata in ord: ";
  11. cin>>ord;
  12. for(int i=0; i<ord.size(); i++)
  13. tecken.push(ord.at(i));
  14. int antal=tecken.size();
  15. for(int i=0; i<antal; i++){
  16. palindrom+=tecken.top();
  17. tecken.pop();
  18. }
  19. cout<<ord<<' '<<palindrom<<endl;
  20. if(ord==palindrom)
  21. cout<<"Ordet var en palindrom";
  22. else
  23. cout<<"Ordet var inte en palindrom";
  24. cout<<endl;
  25. return 0;
  26. }


Köer

Funktioner:

#include <queue> - includerar kö biblioteket
queue<variabeltyp> namn - skapar en kö
namn.push(variabel) - Lägger till variablen längst bak i kön
namn.pop() - tar bort variablen längst fram i kön
namn.fron() - returnerar första värdet (dock tar den inte bort det)
namn.back() - returnerar variablen längst bak i kön (samma sak gäller här)
namn.empty() - om kön är tom returneras true.
namn.size() - returnerar köns storlek

Det går bra att jämföra olika köer med == och !=, även <, >, <=, >= går bra.

Exempel:

  1. #include <iostream>
  2. #include <stack>
  3. #include <queue>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. queue<string> schema;
  9. cout<<"Mata in fem saker du ska göra i prioriterad ordning";
  10. string temp;
  11. for(int i=0; i<5; i++){
  12. cout<<"Sak "<<i<<':';
  13. getline(cin, temp);
  14. schema.push(temp);
  15. }
  16.  
  17. system("cls");
  18.  
  19. while(schema.size!=0){
  20. cout<<schema.front()<<endl;
  21. schema.pop();
  22. }
  23. return 0;
  24. }

Källa: http://blinkenlights.se/