Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.52 KB | None | 0 0
  1. #include <iostream>
  2. #include<string>
  3.  
  4. using namespace std;
  5.  
  6. template<typename Tip>
  7. class Lista;
  8. template <typename Tip>
  9. class Iterator;
  10.  
  11.  
  12.  
  13.  
  14. template<typename Tip>
  15. class Stek
  16. {
  17. Tip *Elementi;
  18. int kapacitet;
  19. int _vrh;
  20. int brEl; //uvela sam dodatnu varijablu, koja ce mi sluziti kao brojac elemenata
  21.  
  22. public:
  23. Stek():kapacitet(10), _vrh(-1), brEl(0)
  24. {
  25. Elementi=new Tip[kapacitet];
  26. }
  27.  
  28. ~Stek()
  29. {
  30. delete[] Elementi;
  31. brEl=0;
  32. }
  33.  
  34. Stek(const Stek&s)
  35. {
  36. kapacitet=s.kapacitet;
  37. _vrh=s._vrh;
  38. brEl=s.brEl;
  39. Elementi=new Tip[kapacitet];
  40. for (int i=0; i<_vrh; i++)
  41. Elementi[i]=s.Elementi[i];
  42. }
  43.  
  44. void operator=(const Stek &s)
  45. {
  46.  
  47. delete[] Elementi;
  48. kapacitet=s.kapacitet;
  49. _vrh=s._vrh;
  50. brEl=s.brEl;
  51.  
  52. for (int i=0; i<_vrh; i++)
  53. Elementi[i]=s.Elementi[i];
  54. }
  55.  
  56.  
  57.  
  58. void brisi()
  59. {
  60. _vrh=-1;
  61. brEl=0;
  62. }
  63.  
  64. void stavi(const Tip& el)
  65. {
  66. if (_vrh==kapacitet-1) throw "Stek je pun.";
  67. Elementi[++_vrh]=el;
  68. brEl++;
  69. }
  70.  
  71. Tip skini()
  72. {
  73. if (_vrh==-1) throw "Stek je prazan.";
  74. brEl--;
  75. return Elementi[_vrh--];
  76.  
  77. }
  78.  
  79. Tip &vrh()
  80. {
  81. if (_vrh==-1) throw "Stek je prazan.";
  82. return Elementi[_vrh];
  83. }
  84.  
  85. int brojElemenata()
  86. {
  87. if (_vrh==-1)
  88. {
  89. int i=0;
  90. return i;
  91. }
  92. else if (_vrh==kapacitet-1) return _vrh;
  93. else return _vrh+1;
  94. }
  95.  
  96.  
  97. int brojEl()
  98. {
  99. return brEl;
  100.  
  101. }
  102.  
  103. void obrni()
  104. {
  105. Stek<Tip>s;
  106. Stek<Tip>s1;
  107. s1=*this;
  108.  
  109. for(int i=s.brojEl(); i>=0; i--)
  110. {
  111. s.stavi(s1.skini());
  112. }
  113.  
  114. *this=s;
  115.  
  116. }
  117.  
  118. };
  119.  
  120. template<typename Tip>
  121. class Red
  122. {
  123. int kapacitet;
  124. int pocetak;
  125. int kraj;
  126. int brEl;//uvela sam dodatnu varijablu, koja ce mi sluziti kao brojac elemenata
  127.  
  128. Tip *Elementi;
  129.  
  130. public:
  131.  
  132. Red(): kapacitet(10), pocetak(-1), kraj(-1), brEl(0)
  133. {
  134. Elementi= new Tip[kapacitet];
  135. }
  136.  
  137. ~Red()
  138. {
  139. delete[] Elementi;
  140. brEl=0;
  141. }
  142.  
  143. Red (const Red &r)
  144. { brEl=r.brEl;
  145. kapacitet=r.kapacitet;
  146. pocetak=r.pocetak;
  147. kraj=r.kraj;
  148. Elementi=new Tip[kapacitet];
  149. for (int i=pocetak; i<kraj; i++)
  150. Elementi[i]=r.Elementi[i];
  151. }
  152.  
  153. void operator=(const Red &r)
  154. {
  155. delete[] Elementi;
  156. brEl=r.brEl;
  157. kapacitet=r.kapacitet;
  158. pocetak=r.pocetak;
  159. kraj=r.kraj;
  160. Elementi=new Tip[kapacitet];
  161. for (int i=pocetak; i<kraj; i++)
  162. Elementi[i]=r.Elementi[i];
  163. }
  164.  
  165. void brisi()
  166. {
  167. pocetak=-1;
  168. kraj=-1;
  169. brEl=0;
  170. }
  171.  
  172. void stavi(const Tip &el)
  173. {
  174. if (pocetak==(kraj+1)%kapacitet) throw "Red je pun.";
  175.  
  176. kraj=(kraj+1)%kapacitet;
  177. Elementi[kraj]=el;
  178. if (pocetak==-1) pocetak=0;
  179. brEl++;
  180. }
  181.  
  182. Tip skini()
  183. {
  184.  
  185. if (pocetak==-1 && kraj==-1) throw "Red je prazan.";
  186. Tip x(Elementi[pocetak]);
  187. if(pocetak==kraj) pocetak=kraj=-1;
  188. else pocetak=(pocetak+1)%kapacitet;
  189. brEl--;
  190. return x;
  191. }
  192.  
  193. Tip &celo()
  194. {
  195. if (pocetak==-1 && kraj==-1) throw "Red je prazan.";
  196. return Elementi[pocetak];
  197. }
  198.  
  199.  
  200. int brojElemenata()
  201. {
  202.  
  203. if (pocetak==-1 && kraj==-1)
  204. {
  205. int i(0);
  206. return i;
  207. }
  208. else if (pocetak==(kraj+1)%kapacitet)
  209. {
  210. return kapacitet;
  211. }
  212. else
  213. {
  214. return ((kraj+1+kapacitet)-pocetak)%kapacitet;
  215. }
  216. }
  217.  
  218. int brojEl()
  219. {
  220. return brEl;
  221.  
  222. }
  223.  
  224. void sortiraj()
  225. {
  226.  
  227. for(int i=pocetak; i<=kraj; i++)
  228. {
  229.  
  230. for(int j=i; j<=kraj; j++)
  231. {
  232. if(Elementi[i]<Elementi[j])
  233. {
  234. Tip pom=Elementi[i];
  235. Elementi[i]=Elementi[j];
  236. Elementi[j]=pom;
  237. }
  238. }
  239. }
  240. }
  241. };
  242.  
  243.  
  244. //Zadatak 1
  245.  
  246. bool provjeri_zagrade(string tekst)
  247. {
  248.  
  249. Stek<char> s1;
  250. for (int i=0; i<int(tekst.size()); i++)
  251. {
  252. if (tekst[i]=='(' || tekst[i]=='[' || tekst[i]=='{') s1.stavi(tekst[i]);
  253.  
  254.  
  255. if (tekst[i]==')' )
  256. {
  257. if (s1.vrh()=='(' )
  258. {
  259. s1.skini();
  260.  
  261. }
  262. else
  263. {
  264. return false;
  265. }
  266. }
  267.  
  268. if (tekst[i]==']' )
  269. {
  270. if (s1.vrh()=='[' )
  271. {
  272. s1.skini();
  273.  
  274. }
  275. else
  276. {
  277. return false;
  278. }
  279. }
  280.  
  281. if (tekst[i]=='}')
  282. {
  283. if (s1.vrh()=='{' )
  284. {
  285. s1.skini();
  286.  
  287. }
  288. else return false;
  289.  
  290. }
  291. }
  292. if(s1.brojElemenata()!=0) return false;
  293.  
  294.  
  295. return true;
  296. }
  297.  
  298.  
  299. //Zadatak2
  300. class StampacServer
  301. {
  302.  
  303. Red<string> s,r,_p;
  304.  
  305. public:
  306.  
  307. enum Prioritet {Sef, Radnik, Pripravnik};
  308.  
  309. void posaljiDokument(Prioritet p, string sadrzaj)
  310. {
  311.  
  312. if(p<0 || p>2) throw "Ne postoji prioritet koji ste naveli.";
  313. if(p==0) s.stavi(sadrzaj);
  314. if(p==1) r.stavi(sadrzaj);
  315. if(p==2) _p.stavi(sadrzaj);
  316.  
  317. }
  318. string dajDokument()
  319. {
  320.  
  321. if(s.brojElemenata()!=0) return s.skini();
  322. else if(r.brojElemenata()!=0) return r.skini();
  323. else if(_p.brojElemenata()!=0) return _p.skini();
  324. else return "";
  325.  
  326.  
  327. }
  328. };
  329.  
  330.  
  331. //Zadatak3
  332. template<typename Tip>
  333. int presjek(Stek<Tip> s1, Stek<Tip> s2)
  334. {
  335. int brojac(0);
  336. while(s1.brojElemenata()!=0 && s2.brojElemenata()!=0) {
  337.  
  338. if(s1.vrh()==s2.vrh())
  339. {
  340. brojac++;
  341. s1.skini();
  342. s2.skini();
  343. }
  344.  
  345. else if(s1.vrh()<s2.vrh())
  346. {
  347.  
  348. while(s1.vrh()<s2.vrh())
  349. {
  350. s1.skini();
  351. }
  352. }
  353.  
  354. else
  355. {
  356. while(s2.vrh()<s1.vrh())
  357. {
  358. s2.skini();
  359. }
  360. }
  361. }
  362.  
  363. return brojac;
  364. }
  365.  
  366.  
  367. template <typename Tip>
  368. class Iterator
  369. {
  370.  
  371. const Lista<Tip> *lista;
  372.  
  373. typename Lista<Tip>::Cvor *trenutniLista;
  374. typename Lista<Tip>::Cvor *trenutniListaSKraja; //uvodim ovaj atribut zbog fje palindrom
  375.  
  376. public:
  377.  
  378.  
  379. Iterator(const Lista<Tip> &l) : lista(&l), trenutniLista(l.p), trenutniListaSKraja(l.poslj) {}
  380.  
  381. Tip trenutni()
  382. {
  383.  
  384. if (lista==0) throw "Lista je prazna.";
  385.  
  386. else return trenutniLista->element;
  387. }
  388.  
  389.  
  390. Tip prethodni()
  391. {
  392.  
  393. if (lista==0) throw "Lista je prazna.";
  394. typename Lista<Tip>::Cvor *novi(trenutniLista);
  395. while(novi->_sljedeci!=trenutniLista)
  396. {
  397. novi=novi->_sljedeci;
  398. }
  399.  
  400. //trenutniLista=novi;
  401.  
  402. return trenutniLista->element;
  403.  
  404.  
  405. }
  406.  
  407. Tip sljedeci()
  408. {
  409.  
  410. if (lista==0 ) throw "Lista je prazna.";
  411.  
  412. else
  413. {
  414. trenutniLista=trenutniLista->_sljedeci;
  415. return trenutniLista->element;
  416. }
  417. }
  418.  
  419. Tip pocetak()
  420. {
  421.  
  422. if (lista==0) throw "Lista je prazna.";
  423.  
  424. trenutniLista=trenutniLista.p;
  425. return trenutniLista->element;
  426.  
  427. }
  428.  
  429. Tip kraj()
  430. {
  431.  
  432. if (lista==0) throw "Lista je prazna.";
  433.  
  434. else
  435. {
  436. trenutniLista=trenutniLista.poslj;
  437. return trenutniLista->element;
  438. }
  439. }
  440.  
  441.  
  442. //uvodim ove metode zbog fje palindrom
  443. const Tip& trenutnisKraja()
  444. {
  445. if(lista->brojElemenata()==0) throw "Lista je prazna.";
  446. else return trenutniListaSKraja->element;
  447.  
  448. }
  449.  
  450.  
  451. bool prethodniSKraja() {
  452.  
  453. typename Lista<Tip>::Cvor *pr(lista->p);
  454. while(pr->_sljedeci!= trenutniListaSKraja) pr=pr->_sljedeci;
  455. trenutniListaSKraja=pr;
  456. return true;
  457. }
  458.  
  459. };
  460.  
  461. template<typename Tip>
  462. class Lista
  463. {
  464.  
  465. struct Cvor //izmjena naziva struktura iz Clan u Cvor i Clan* veza u Cvor* _sljedeci, zbog prilagodjavanja imena i funkcije koju obavlja Cvor sljedeci, cisto radi lakse orjentacije
  466. {
  467. Tip element;
  468. Cvor *_sljedeci;
  469. Cvor(const Tip &element, Cvor *_sljedeci):element(element),_sljedeci(_sljedeci){}
  470. };
  471. Cvor* p; //pocetni
  472. Cvor* tr; //trenutni
  473. Cvor *poslj;// posljednji
  474. int br; // ukupan broj cvorova
  475.  
  476.  
  477. public:
  478. Lista() :p(0), tr(0), poslj(0), br(0) {} //atributi su bili implementirani unutar zagrada, pa sam ih prebacila u konstruktorsku inicijalizacijsku listu
  479.  
  480. virtual ~Lista()
  481. {tr=p;
  482.  
  483. if (br==1)obrisi();//dodat uvjet
  484. else
  485. {
  486. while (br!=0)
  487. {
  488. obrisi();
  489. }
  490. }
  491. p=poslj=tr=0;
  492.  
  493. }
  494.  
  495.  
  496. Lista(const Lista &a)
  497. {
  498.  
  499. p= new Cvor;
  500. p->element=a.p->element;
  501.  
  502. Cvor *temp=p;
  503. Cvor *temp1=a.p;
  504. int i(1);
  505. for(;;)
  506. {
  507. p->sljedeci=new Cvor;
  508. p=p->sljedeci;
  509. p->element=a[i];
  510. i++;
  511. if(a.tr==temp1) tr=p;
  512. if(temp1->sljedeci==0){
  513. p->sljedeci=0;
  514. poslj=p;
  515. break;
  516.  
  517. }
  518. }
  519. }
  520.  
  521.  
  522. Lista &operator=(Lista &a)
  523. {
  524. Cvor *tem=p;
  525. while (tem->_sljedeci!=0)
  526. {
  527. tem=tem->_sljedeci;
  528. delete p;
  529. p=tem;
  530. }
  531. delete tem;
  532. p=tr=poslj=0;
  533.  
  534. p= new Cvor;
  535. p->element=a.p->element;
  536.  
  537. Cvor *temp=p;
  538. Cvor *temp1=a.p;
  539. int i(1);
  540. for(;;)
  541. {
  542. p->sljedeci=new Cvor;
  543. p=p->sljedeci;
  544. p->element=a[i];
  545. i++;
  546. if(a.tr==temp1) tr=p;
  547. if(temp1->sljedeci==0){
  548. p->sljedeci=0;
  549. poslj=p;
  550. break;
  551.  
  552. }
  553. }
  554.  
  555. return *this;
  556. }
  557.  
  558. int brojElemenata()
  559. {
  560. return br;
  561. }
  562.  
  563. Tip trenutni() const
  564. {
  565. if (br==0) throw "Lista je prazna.";
  566. return tr->element;
  567. }
  568.  
  569. bool prethodni()
  570. {
  571. if (br==0) return false;
  572. Cvor *novi=p;
  573. while (novi->_sljedeci!=tr)
  574. {
  575. novi=novi->_sljedeci;
  576. }
  577. tr=novi;
  578. return true;
  579. }
  580.  
  581.  
  582. bool sljedeci()
  583. {
  584. if (tr==poslj) return false;
  585. tr=tr->_sljedeci;
  586. return true;
  587. }
  588.  
  589. void pocetak()
  590. {
  591. tr=p;
  592. }
  593.  
  594. void kraj()
  595. {
  596.  
  597. tr=poslj; //Obzirom da sam naknadno dodala varijablu posljednji, promjenila sam i ovu metodu u odnosu kakvu sam je poslala kao pripremu za tutorijal 2.
  598. }
  599.  
  600. void obrisi()
  601. {
  602. if (br==0)throw "Nema elemenata za brisanje!";
  603. else
  604. {
  605. if (tr==p)
  606. {
  607. if (br==1)
  608. {
  609. //izmjenjeno jer nije radilo brisanje liste s jednim elementom
  610. delete tr;
  611. tr=0;
  612. p=0;
  613. poslj=0;
  614. br--;
  615. }
  616. else
  617. {
  618. p=p->_sljedeci;
  619. delete tr;
  620. tr=p;
  621. br--;
  622. }
  623.  
  624. }
  625. else
  626. {
  627. if (tr==poslj)
  628. {
  629. if (br==1)
  630. {
  631. delete tr;
  632. tr=0;
  633. p=0;
  634. poslj=0;
  635. br--;
  636. }
  637. else
  638. {
  639. Cvor *k(tr);
  640. prethodni();
  641. poslj=tr;
  642. delete k;
  643. br--;
  644. }
  645. }
  646. else
  647. {
  648. Cvor *pom(tr->_sljedeci);
  649. Cvor *k(tr);
  650. prethodni();
  651. delete k;
  652. tr->_sljedeci=pom;
  653. sljedeci();
  654. br--;
  655.  
  656. }
  657. }
  658. }
  659. }
  660.  
  661.  
  662. void dodajIza(const Tip &el)
  663. {
  664. Cvor* novi=new Cvor(0,0);
  665. novi->element=el;
  666. novi->_sljedeci=0;
  667. if (br==0)
  668. {
  669. poslj=tr=novi;
  670. }
  671. else
  672. {
  673. novi->_sljedeci=tr->_sljedeci;
  674. tr->_sljedeci=novi;
  675. }
  676. br++;
  677. }
  678.  
  679. void dodajIspred(const Tip &el)
  680. {
  681. if (br==0)
  682. {
  683. p=new Cvor(0,0);
  684. p->element=el;
  685. p->_sljedeci=0;
  686. tr=p;
  687. br++;
  688. return;
  689. }
  690.  
  691. if (tr==p)
  692. {
  693. Cvor* novi=new Cvor(0,0);
  694. novi->_sljedeci=p;
  695. novi->element=el;
  696. p=novi;
  697. br++;
  698. return;
  699. }
  700. prethodni();
  701. dodajIza(el);
  702. sljedeci();
  703. sljedeci();
  704. }
  705.  
  706. Tip &operator [](int n)
  707. {
  708. if (n<0 || n>br) throw "Ne postoji taj clan niza.";
  709. Cvor* temp(p);
  710. for (int i=0; i<n; i++)
  711. {
  712. temp=temp->_sljedeci;
  713. }
  714. return temp->element;
  715. }
  716.  
  717. void Ispisi()const
  718. {
  719. Cvor *pom(p);
  720. int i(0);
  721. cout<<"Sadrzaj liste:\n";
  722. while (pom!=0)
  723. {
  724. cout<<i<<":"<<p->element;
  725. if (pom==p)cout<<"<-pocetak";
  726. if (pom==tr)cout<<"<-teku,"<<i+1<<".";
  727. if (pom==poslj)cout<<"<-kraj";
  728. cout<<endl;
  729. i++;
  730. pom=pom->_sljedeci;
  731. }
  732. }
  733. };
  734.  
  735. //Zadatak4
  736. /*bool palindrom(const Lista<char>& rijec){
  737.  
  738.  
  739. int brojac(0);
  740. Stek <char> pola_rijeci;
  741. Iterator<char> cijela_rijec(rijec);
  742. int pola =rijec.brojElemenata();
  743. for(int i=brojac; i<pola/2; i++)
  744. {
  745. pola_rijeci.stavi(cijela_rijec.trenutni());
  746. brojac++;
  747. cijela_rijec.sljedeci();
  748. }
  749.  
  750. if(pola%2==0)
  751. {
  752. for(int i=brojac; i<rijec.brojElemenata(); i++)
  753. {
  754. if(pola_rijeci.skini()!=cijela_rijec.trenutni()) return false;
  755.  
  756. cijela_rijec.sljedeci();
  757. }
  758.  
  759. }
  760.  
  761. else {
  762. brojac++;
  763. cijela_rijec.sljedeci();
  764. for(int i=brojac; i<rijec.brojElemenata(); i++)
  765. {
  766. if(pola_rijeci.skini()!=cijela_rijec.trenutni()) return false;
  767.  
  768. cijela_rijec.sljedeci();
  769. }
  770.  
  771. }*/
  772.  
  773.  
  774. bool palindrom( Lista<char>& rijec){
  775.  
  776. Iterator<char> i(rijec);
  777. i.pocetak();
  778. int pola =(rijec.brojElemenata())/2;
  779.  
  780. while(pola!=0)
  781. {
  782.  
  783. char c1=i.trenutni();
  784. char c2=i.trenutnisKraja();
  785. if(c1!=c2) return false;
  786. i.sljedeci();
  787. i.prethodniSKraja();
  788. pola--;
  789.  
  790. }
  791.  
  792.  
  793. return true;
  794.  
  795. }
  796.  
  797.  
  798. int main()
  799. {
  800.  
  801.  
  802.  
  803. try
  804. {
  805.  
  806. Stek<int>s;
  807.  
  808.  
  809.  
  810. /* int b;
  811. b=provjeri_zagrade("{()}");
  812. cout<<b;*/
  813.  
  814.  
  815. /* for (int i(1); i<=5; i++)
  816. s.stavi(i);
  817.  
  818. s.obrni();
  819.  
  820. for (int j(1); j<=5; j++)
  821. cout<<s.skini();
  822. /*int a;
  823. a=presjek(s1,s2);
  824. cout<<presjek(s1,s2)<<endl;*/
  825.  
  826.  
  827. }
  828.  
  829. catch (const char greska[])
  830. {
  831. cout << greska;
  832. }
  833. catch (...)
  834. {
  835. cout << "\nGreska u programu";
  836. }
  837.  
  838. return 0;
  839. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement