Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- // Definicija klase “LStek”
- //#ifndef LSTEK_H
- //#define LSTEK_H
- //#include "stek.h"
- using namespace std;
- template <typename InfoTip>
- class Stek {
- private:
- void operator =(const Stek&); // Zaštita za dodjelu
- Stek(const Stek&); // Zaštita za konstruktor kopije
- public:
- Stek() {} // Podrazumijevani konstruktor
- virtual ~Stek() {} // Bazni destruktor
- virtual void Brisi() = 0; // Reinicijalizacija steka
- virtual void StaviNaStek(const InfoTip&) = 0; // Stavljanje na stek
- virtual InfoTip SkiniSaSteka() = 0; // Skidanje sa steka
- virtual const InfoTip& ElementNaVrhu() const = 0; // Vraæa vršni el.
- virtual int Duzina() const = 0; // Vraæa dužinu steka
- };
- template <typename InfoTip>
- class LStek : public Stek<InfoTip> {
- private:
- struct Cvor {
- InfoTip Element;
- Cvor* veza;
- };
- Cvor *vrh;
- int velicina;
- void Kopiraj(const LStek &s);
- public:
- LStek() : vrh(0),velicina(0) {}
- LStek(const LStek &s) { Kopiraj(s); }
- ~LStek() { Brisi(); }
- LStek &operator =(const LStek &s);
- void StaviNaStek(const InfoTip &info) {
- vrh->veza
- vrh = new Cvor;
- Cvor->Element = info;
- }
- InfoTip SkiniSaSteka(); // Skidanje sa steka
- const InfoTip& ElementNaVrhu() const; // Element na vrhu
- void Brisi(); // Uništavanje steka
- bool JeLiPrazan() const { return vrh == 0; } // Je li prazan
- int Duzina() const { return velicina; } // Dužina steka
- void Prikazi() const; // Prikaz sadržaja
- };
- // Definicija metoda klase “LStek”
- #ifndef LSTEKTMP_H
- #define LSTEKTMP_H
- //#include "lstek.h"
- template <typename InfoTip> // Kopiranje steka
- void LStek<InfoTip>::Kopiraj(const LStek &s) {
- Cvor *q, *p(s.vrh);
- vrh = 0;
- velicina = s.velicina;
- while(p != 0) {
- Cvor *n(new Cvor(p->info,0));
- if (vrh == 0)
- vrh = n;
- else
- q->sljedeci = n;
- p = p->sljedeci;
- q = n;
- }
- }
- template <typename InfoTip> // Preklopljeni op. dodjele
- LStek<InfoTip> &LStek<InfoTip>::operator =(const LStek &s) {
- if (&s == this)
- return *this;
- Brisi();
- Kopiraj(s);
- return *this;
- }
- template <typename InfoTip> // Skidanje sa steka
- InfoTip LStek<InfoTip>::SkiniSaSteka() {
- if (vrh == 0)
- throw "\nStek je prazan!\n";
- InfoTip info(vrh->info);
- Cvor *p = vrh->sljedeci;
- delete vrh;
- vrh = p;
- velicina--;
- return info;
- }
- template <typename InfoTip> // Uništavanje steka
- void LStek<InfoTip>::Brisi() {
- while(!JeLiPrazan())
- SkiniSaSteka();
- }
- template <typename InfoTip> // Vršni element steka
- const InfoTip& LStek<InfoTip>::ElementNaVrhu() const {
- if (vrh == 0)
- throw "Stek je prazan!\n";
- return vrh->info;
- }
- template <typename InfoTip> // Prikaz sadržaja steka
- void LStek<InfoTip>::Prikazi() const {
- Cvor *p(vrh);
- cout << "\nSadrzaj steka:\n";
- while (p != 0) {
- cout << p->info << endl;
- p = p->sljedeci;
- }
- }
- /*template <typename InfoTip> // Vršni element steka
- const InfoTip& LStek<InfoTip>::ElementNaVrhu() const {
- if (vrh == 0)
- throw "Stek je prazan!\n";
- return vrh->info;
- }*/
- /*template <typename InfoTip> // Prikaz sadržaja steka
- void LStek<InfoTip>::Prikazi() const {
- Cvor *p(vrh);
- cout << "\nSadrzaj steka:\n";
- while (p != 0) {
- cout << p->info << endl;
- p = p->sljedeci;
- }
- }*/
- #endif
- // Testni program za stek
- #include <iostream>
- using namespace std;
- //#include "nizstektmp.h"
- int Menu() { // Ispis menu opcija
- int izbor;
- cout << endl<<"---Menu----------------------" << endl<<endl;
- cout << "1. Stavi na INT stek" << endl;
- cout << "2. Skini sa INT steka" << endl;
- cout << "3. Element na vrhu INT steka" << endl;
- cout << "4. Prikazi sadrzaj INT steka" << endl;
- cout << "5. Stavi na CHAR stek" << endl;
- cout << "6. Skini sa CHAR steka" << endl;
- cout << "7. Element na vrhu CHAR steka" << endl;
- cout << "8. Prikazi sadrzaj CHAR steka" << endl;
- cout << "0. Izlaz" << endl;
- cout << endl<<"-------------Izaberite opciju>" ;
- cin >> izbor;
- if (cin)
- return izbor;
- else {
- cin.clear();
- cin.ignore(100,'\n');
- return -1;
- }
- }
- bool provjeri_zagrade(string tekst) {
- LStek<char> otZagrade;
- for (int i = 0; i < tekst.length(); i++) {
- if (tekst[i] == '(' || tekst[i] == '[' || tekst[i] == '{') otZagrade.StaviNaStek(tekst[i]);
- if (tekst[i] == ')' || tekst[i] == ']' || tekst[i] == '}') {
- if (otZagrade.JeLiPrazan()) return false;
- if (otZagrade.ElementNaVrhu() == int(tekst[i])-1 || otZagrade.ElementNaVrhu() == int(tekst[i])-2) otZagrade.SkiniSaSteka();
- else {return false;}
- }
- }
- return true;
- }
- int main() {
- string lol;
- lol = "(sd((2()(2([22""]))))))a{asd}";
- if(provjeri_zagrade(lol)) cout<<"uredu"; else cout<<"nije uredu";
- }
Add Comment
Please, Sign In to add comment