Advertisement
Guest User

Untitled

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