Guest User

Untitled

a guest
Dec 18th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.15 KB | None | 0 0
  1. #include <iostream>
  2. // Definicija klase “LStek”
  3. //#ifndef LSTEK_H
  4. //#define LSTEK_H
  5. //#include "stek.h"
  6.  
  7. using namespace std;
  8.  
  9.  
  10. template <typename InfoTip>
  11. class Stek {
  12. private:
  13.   void operator =(const Stek&);        // Zaštita za dodjelu
  14.   Stek(const Stek&);                   // Zaštita za konstruktor kopije
  15. public:
  16.   Stek() {}                            // Podrazumijevani konstruktor
  17. virtual ~Stek() {}                   // Bazni destruktor
  18.   virtual void Brisi() = 0;            // Reinicijalizacija steka
  19.   virtual void StaviNaStek(const InfoTip&) = 0; // Stavljanje na stek
  20.   virtual InfoTip SkiniSaSteka() = 0;           // Skidanje sa steka
  21.   virtual const InfoTip& ElementNaVrhu() const = 0; // Vraæa vršni el.
  22.   virtual int Duzina() const = 0;               // Vraæa dužinu steka
  23. };
  24.  
  25. template <typename InfoTip>
  26. class LStek : public Stek<InfoTip> {
  27. private:
  28.     struct Cvor {
  29.         InfoTip Element;
  30.         Cvor* veza;
  31.     };
  32.     Cvor *vrh;
  33.     int velicina;
  34.     void Kopiraj(const LStek &s);
  35. public:
  36.     LStek() : vrh(0),velicina(0) {}
  37.     LStek(const LStek &s) { Kopiraj(s); }
  38.     ~LStek() { Brisi(); }
  39.     LStek &operator =(const LStek &s);
  40.     void StaviNaStek(const InfoTip &info) {
  41.         vrh->veza
  42.         vrh = new Cvor;
  43.         Cvor->Element = info;
  44.     }
  45.     InfoTip SkiniSaSteka();                       // Skidanje sa steka
  46.     const InfoTip& ElementNaVrhu() const;         // Element na vrhu
  47.     void Brisi();                                 // Uništavanje steka
  48.     bool JeLiPrazan() const { return vrh == 0; }  // Je li prazan
  49.     int Duzina() const { return velicina; }       // Dužina steka
  50.     void Prikazi() const;                         // Prikaz sadržaja
  51. };
  52.  
  53. // Definicija metoda klase “LStek”
  54. #ifndef LSTEKTMP_H
  55. #define LSTEKTMP_H
  56. //#include "lstek.h"
  57. template <typename InfoTip>                    // Kopiranje steka
  58. void LStek<InfoTip>::Kopiraj(const LStek &s) {
  59.   Cvor *q, *p(s.vrh);
  60. vrh = 0;
  61.   velicina = s.velicina;
  62.   while(p != 0) {
  63.     Cvor *n(new Cvor(p->info,0));
  64.     if (vrh == 0)
  65.       vrh = n;
  66.     else
  67.      q->sljedeci = n;
  68.       p = p->sljedeci;
  69.       q = n;
  70.   }
  71. }
  72. template <typename InfoTip>                    // Preklopljeni op. dodjele
  73. LStek<InfoTip> &LStek<InfoTip>::operator =(const LStek &s) {
  74.   if (&s == this)
  75.     return *this;
  76.   Brisi();
  77. Kopiraj(s);
  78. return *this;
  79. }
  80. template <typename InfoTip>                    // Skidanje sa steka
  81. InfoTip LStek<InfoTip>::SkiniSaSteka() {
  82.   if (vrh == 0)
  83.     throw "\nStek je prazan!\n";
  84.   InfoTip info(vrh->info);
  85.   Cvor *p = vrh->sljedeci;
  86.   delete vrh;
  87.   vrh = p;
  88.   velicina--;
  89.   return info;
  90. }
  91. template <typename InfoTip>                    // Uništavanje steka
  92. void LStek<InfoTip>::Brisi() {
  93.   while(!JeLiPrazan())
  94.     SkiniSaSteka();
  95. }
  96.  
  97.  
  98. template <typename InfoTip>                    // Vršni element steka
  99. const InfoTip& LStek<InfoTip>::ElementNaVrhu() const {
  100.   if (vrh == 0)
  101.     throw "Stek je prazan!\n";
  102.   return vrh->info;
  103. }
  104. template <typename InfoTip>                    // Prikaz sadržaja steka
  105. void LStek<InfoTip>::Prikazi() const {
  106.   Cvor *p(vrh);
  107. cout << "\nSadrzaj steka:\n";
  108.   while (p != 0) {
  109.     cout << p->info << endl;
  110.     p = p->sljedeci;
  111.   }
  112. }
  113.  
  114. /*template <typename InfoTip>                    // Vršni element steka
  115. const InfoTip& LStek<InfoTip>::ElementNaVrhu() const {
  116.   if (vrh == 0)
  117.     throw "Stek je prazan!\n";
  118.   return vrh->info;
  119. }*/
  120.  
  121. /*template <typename InfoTip>                    // Prikaz sadržaja steka
  122. void LStek<InfoTip>::Prikazi() const {
  123.   Cvor *p(vrh);
  124. cout << "\nSadrzaj steka:\n";
  125.   while (p != 0) {
  126.     cout << p->info << endl;
  127.     p = p->sljedeci;
  128.   }
  129. }*/
  130. #endif
  131. // Testni program za stek
  132. #include <iostream>
  133. using namespace std;
  134. //#include "nizstektmp.h"
  135. int Menu() {                                   // Ispis menu opcija
  136.   int izbor;
  137.   cout << endl<<"---Menu----------------------" << endl<<endl;
  138.   cout << "1. Stavi na INT stek" << endl;
  139. cout << "2. Skini sa INT steka" << endl;
  140. cout << "3. Element na vrhu INT steka" << endl;
  141. cout << "4. Prikazi sadrzaj INT steka" << endl;
  142. cout << "5. Stavi na CHAR stek" << endl;
  143. cout << "6. Skini sa CHAR steka" << endl;
  144. cout << "7. Element na vrhu CHAR steka" << endl;
  145. cout << "8. Prikazi sadrzaj CHAR steka" << endl;
  146. cout << "0. Izlaz" << endl;
  147. cout << endl<<"-------------Izaberite opciju>" ;
  148.   cin >> izbor;
  149. if (cin)
  150.     return izbor;
  151.   else {
  152.     cin.clear();
  153. cin.ignore(100,'\n');
  154.     return -1;
  155.   }
  156. }
  157.  
  158. bool provjeri_zagrade(string tekst) {
  159.     LStek<char> otZagrade;
  160.     for (int i = 0; i < tekst.length(); i++) {
  161.         if (tekst[i] == '(' || tekst[i] == '[' || tekst[i] == '{') otZagrade.StaviNaStek(tekst[i]);
  162.         if (tekst[i] == ')' || tekst[i] == ']' || tekst[i] == '}') {
  163.             if (otZagrade.JeLiPrazan()) return false;
  164.             if (otZagrade.ElementNaVrhu() == int(tekst[i])-1 || otZagrade.ElementNaVrhu() == int(tekst[i])-2) otZagrade.SkiniSaSteka();
  165.             else {return false;}
  166.         }
  167.     }
  168.     return true;
  169. }
  170.  
  171. int main() {
  172.   string lol;
  173.   lol = "(sd((2()(2([22""]))))))a{asd}";
  174.   if(provjeri_zagrade(lol)) cout<<"uredu"; else cout<<"nije uredu";
  175. }
Add Comment
Please, Sign In to add comment