Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.91 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. template <typename Tip>
  5. class Iterator;
  6. template <typename Tip>
  7. class Lista
  8. {
  9. struct Cvor
  10. {
  11. Tip element;
  12. Cvor *sljedeci;
  13.  
  14. };
  15. Cvor *prvi, *zadnji, *trenutni;
  16. public:
  17. Lista ()
  18. {
  19. prvi=0;
  20. zadnji=0;
  21. trenutni=0;
  22. }
  23. ~Lista()
  24. {
  25. Cvor *p = prvi;
  26. Cvor *s;
  27. while (p!=zadnji)
  28. {
  29. s=p;
  30. p=p->sljedeci;
  31. delete s;
  32. }
  33. prvi=0;
  34. zadnji=0;
  35. }
  36. Lista(const Lista &x)
  37. {
  38. prvi=new Cvor;
  39. prvi->element=x.prvi->element;
  40. Cvor *p=prvi;
  41. Cvor *p1=x.prvi;
  42. p1=p1->slijedeci;
  43. while (1)
  44. {
  45. p->slijedeci=new Cvor;
  46. p=p->slijedeci;
  47. p->element=p1->element;
  48. if (p1==x.trenutni) trenutni=p;
  49. if (p1->slijedeci==0)
  50. {
  51. p->slijedeci=0;
  52. break;
  53. }
  54. p1=p1->slijedeci;
  55. }
  56. zadnji=p;
  57. }
  58. Lista &operator =(const Lista &x)
  59. {
  60. Cvor *m = prvi;
  61. Cvor *s;
  62. while (m!=zadnji)
  63. {
  64. s=m;
  65. m=m->sljedeci;
  66. delete s;
  67. }
  68. prvi=new Cvor;
  69. prvi->element=x.prvi->element;
  70. Cvor *p=prvi;
  71. Cvor *p1=x.prvi;
  72. p1=p1->slijedeci;
  73. while (1)
  74. {
  75. p->slijedeci=new Cvor;
  76. p=p->slijedeci;
  77. p->element=p1->element;
  78. if (p1==x.trenutni) trenutni=p;
  79. if (p1->slijedeci==0)
  80. {
  81. p->slijedeci=0;
  82. break;
  83. }
  84. p1=p1->slijedeci;
  85. }
  86. zadnji=p;
  87. return *this;
  88. }
  89. void brisi()
  90. {
  91. Cvor *p = prvi;
  92. Cvor *s;
  93. while (p!=zadnji)
  94. {
  95. s=p;
  96. p=p->sljedeci;
  97. delete s;
  98. }
  99. prvi=0;
  100. zadnji=0;
  101. }
  102.  
  103. int brojElemenata()
  104. {
  105. int br=0;
  106. for (Cvor *p = prvi; p != 0; p = p->sljedeci)
  107. br++;
  108. return br;
  109. }
  110. Tip Trenutni()
  111. {
  112. if (brojElemenata()==0) throw "Lista je prazna";
  113. else return trenutni->element;
  114. }
  115. bool prethodni()
  116. {
  117. if (trenutni==prvi) return false;
  118. else
  119. {
  120. Cvor *p=prvi;
  121. while (p->sljedeci!=trenutni)
  122. {
  123. p=p->sljedeci;
  124. }
  125. trenutni=p;
  126. return true;
  127. }
  128. }
  129. bool sljedeci()
  130. {
  131. if (trenutni==zadnji) return false;
  132. else
  133. {
  134. trenutni=trenutni->sljedeci;
  135. return true;
  136. }
  137. }
  138. Tip operator [] (int i) const
  139. {
  140. if (i<0 || i>brojElemenata()) throw "neispravan indeks";
  141. else
  142. {
  143. Cvor *p=prvi;
  144. int br=0;
  145. while (br!=i)
  146. {
  147. p=p->sljedeci;
  148. br++;
  149. }
  150. return p->element;
  151. }
  152. }
  153. void dodajIspred (const Tip &x)
  154. {
  155. Cvor *novi=new Cvor;
  156. novi->element=x;
  157. novi->sljedeci=0;
  158. if (brojElemenata()==0)
  159. {
  160. prvi=novi;
  161. zadnji=novi;
  162. trenutni=novi;
  163. }
  164. else if (trenutni==prvi)
  165. {
  166. novi->sljedeci=prvi;
  167. prvi=novi;
  168. }
  169.  
  170. else
  171. {
  172. Cvor *prethodni=prvi;
  173. novi->sljedeci=trenutni;
  174. while (prethodni->sljedeci != trenutni)
  175. prethodni=prethodni->sljedeci;
  176. prethodni->sljedeci=novi;
  177. }
  178. }
  179. void dodajIza (const Tip &x)
  180. {
  181. Cvor *novi=new Cvor;
  182. novi->element=x;
  183. novi->sljedeci=0;
  184. if (brojElemenata()==0)
  185. {
  186. prvi=novi;
  187. zadnji=novi;
  188. trenutni=novi;
  189. }
  190. else if (trenutni==zadnji)
  191. {
  192. trenutni->sljedeci=novi;
  193. zadnji=novi;
  194. }
  195. else
  196. {
  197. novi->sljedeci=trenutni->sljedeci;
  198. trenutni->sljedeci=novi;
  199. }
  200. }
  201. void obrisi()
  202. {
  203. if (brojElemenata()==0) throw "Niz je prazan";
  204. else if (trenutni==prvi)
  205. {
  206. prvi=prvi->sljedeci;
  207. delete trenutni;
  208. trenutni=prvi;
  209. }
  210. else
  211. {
  212. Cvor *prethodni;
  213. prethodni=prvi;
  214. while (prethodni->sljedeci != trenutni)
  215. {
  216. prethodni=prethodni->sljedeci;
  217. }
  218. prethodni->sljedeci=trenutni->sljedeci;
  219. delete trenutni;
  220. trenutni=prethodni;
  221. }
  222. }
  223. void pocetak()
  224. {
  225. trenutni = prvi;
  226. }
  227. void kraj()
  228. {
  229.  
  230. trenutni = zadnji;
  231. }
  232.  
  233. friend class Iterator<Tip>;
  234. };
  235.  
  236.  
  237.  
  238.  
  239. template <typename Tip>
  240. class Stek
  241. {
  242. struct Cvor
  243. {
  244. Tip element;
  245. Cvor *sljedeci;
  246. ~Cvor()
  247. {
  248. element =0;
  249. sljedeci=0;
  250. }
  251. };
  252. Cvor *prvi,*zadnji;
  253. public:
  254. Stek ()
  255. {
  256. prvi=0;
  257. zadnji=0;
  258. }
  259. ~Stek()
  260. {
  261. Cvor *p = prvi;
  262. Cvor *s;
  263. while (p!=zadnji)
  264. {
  265. s=p;
  266. p=p->sljedeci;
  267. delete s;
  268. }
  269. }
  270. Stek(const Stek& s)
  271. {
  272. Cvor *p = s.prvi;
  273. prvi=0;
  274. zadnji=0;
  275. while (p != 0)
  276. {
  277. stavi(p->element);
  278. p = p->sljedeci;
  279. }
  280.  
  281. }
  282. Stek &operator=(const Stek& s)
  283. {
  284. brisi();
  285. Cvor *p = s.prvi;
  286. prvi=0;
  287. zadnji=0;
  288. while (p != 0)
  289. {
  290. stavi(p->element);
  291. p = p->sljedeci;
  292. }
  293.  
  294. }
  295.  
  296. int brojElemenata()
  297. {
  298. int br=0;
  299. for (Cvor *p = prvi; p != 0; p = p->sljedeci)
  300. br++;
  301. return br;
  302. }
  303. void stavi(const Tip& el)
  304. {
  305. Cvor *novi=new Cvor;
  306. novi->element=el;
  307. novi->sljedeci=0;
  308. if (prvi == 0)
  309. {
  310. prvi = zadnji = novi;
  311. zadnji->sljedeci=0;
  312. }
  313. else
  314. {
  315. zadnji->sljedeci = novi;
  316. zadnji = novi;
  317. }
  318.  
  319. }
  320. Tip vrh()
  321. {
  322. return (zadnji->element);
  323. }
  324. Tip skini()
  325. {
  326. Tip x;
  327. x=zadnji->element;
  328. if (prvi==zadnji)
  329. {
  330. zadnji=0;
  331. delete prvi;
  332. prvi=0;
  333. }
  334. else
  335. {
  336. Cvor *p=prvi;
  337. while (p->sljedeci!= zadnji)
  338. {
  339. p=p->sljedeci;
  340. }
  341. delete zadnji;
  342. p->sljedeci=0;
  343. zadnji=p;
  344. }
  345. return x;
  346. }
  347. void brisi()
  348. {
  349. Cvor *p = prvi;
  350. Cvor *s;
  351. while (p!=zadnji)
  352. {
  353. s=p;
  354. p=p->sljedeci;
  355. delete s;
  356. }
  357. prvi=0;
  358. zadnji=0;
  359. }
  360. };
  361.  
  362.  
  363. template <typename Tip>
  364. class Red
  365. {
  366. struct Cvor
  367. {
  368. Tip element;
  369. Cvor *sljedeci;
  370. ~Cvor()
  371. {
  372. element =0;
  373. sljedeci=0;
  374. }
  375. };
  376. Cvor *prvi,*zadnji;
  377. public:
  378. Red ()
  379. {
  380. prvi=0;
  381. zadnji=0;
  382. }
  383. ~Red()
  384. {
  385. Cvor *p = prvi;
  386. Cvor *s;
  387. while (p!=zadnji)
  388. {
  389. s=p;
  390. p=p->sljedeci;
  391. delete s;
  392. }
  393. }
  394. Red (const Red& s)
  395. {
  396. Cvor *p = s.prvi;
  397. prvi=0;
  398. zadnji=0;
  399. while (p != 0)
  400. {
  401. stavi(p->element);
  402. p = p->sljedeci;
  403. }
  404.  
  405. }
  406. Red &operator=(const Red& s)
  407. {
  408. brisi();
  409. Cvor *p = s.prvi;
  410. prvi=0;
  411. zadnji=0;
  412. while (p != 0)
  413. {
  414. stavi(p->element);
  415. p = p->sljedeci;
  416. }
  417.  
  418.  
  419. }
  420. int brojElemenata()
  421. {
  422. int br=0;
  423. for (Cvor *p = prvi; p != 0; p = p->sljedeci)
  424. br++;
  425. return br;
  426. }
  427. void stavi(const Tip& el)
  428. {
  429. Cvor *novi=new Cvor;
  430. novi->element=el;
  431. novi->sljedeci=0;
  432. if (prvi == 0)
  433. {
  434. prvi = zadnji = novi;
  435. zadnji->sljedeci=0;
  436. }
  437. else
  438. {
  439. zadnji->sljedeci = novi;
  440. zadnji = novi;
  441. }
  442.  
  443. }
  444. Tip celo()
  445. {
  446. return (prvi->element);
  447. }
  448. Tip skini()
  449. {
  450. Tip x;
  451. x=prvi->element;
  452. if (prvi==zadnji)
  453. {
  454. zadnji=0;
  455. delete prvi;
  456. prvi=0;
  457. }
  458. else
  459. {
  460. Cvor *p=prvi->sljedeci;
  461. delete prvi;
  462. prvi=p;
  463. }
  464. return x;
  465. }
  466. void brisi()
  467. {
  468. Cvor *p = prvi;
  469. Cvor *s;
  470. while (p!=zadnji)
  471. {
  472. s=p;
  473. p=p->sljedeci;
  474. delete s;
  475. }
  476. prvi=0;
  477. zadnji=0;
  478. }
  479. };
  480.  
  481.  
  482. template<typename Tip>
  483. class Iterator
  484. {
  485. const Lista<Tip> *lista;
  486. typename Lista<Tip>::Cvor *trenutniLista;
  487. public:
  488. Iterator (const Lista<Tip> &b) : lista(&b), trenutniLista(b.prvi) {}
  489. Tip trenutni()
  490. {
  491.  
  492. if (lista!=0)
  493. {
  494. if (lista->brojElemenata()==0) throw "Lista je prazna.";
  495. return trenutniLista->element;
  496. }
  497.  
  498. }
  499. bool prethodni()
  500. {
  501.  
  502. if (lista!=0)
  503. {
  504. if (trenutniLista==lista.prvi) return false;
  505. else
  506. {
  507. typename Lista<Tip>::Cvor *p=lista.prvi;
  508. while (p->sljedeci!=trenutniLista)
  509. {
  510. p=p->sljedeci;
  511. }
  512. trenutniLista=p;
  513. return true;
  514. }
  515. }
  516. }
  517. bool sljedeci ()
  518. {
  519. if (lista!=0)
  520. {
  521. if (trenutniLista==lista.zadnji) return false;
  522. else
  523. {
  524. trenutniLista=trenutniLista->sljedeci;
  525. return true;
  526. }
  527. }
  528. }
  529. void pocetak()
  530. {
  531. if (lista!=0)
  532. {
  533. trenutniLista=lista.prvi;
  534. }
  535. }
  536. void kraj()
  537. {
  538. if (lista!=0)
  539. {
  540. trenutniLista=lista.zadnji;
  541. }
  542. }
  543.  
  544. };
  545.  
  546. bool provjeri_zagrade(string tekst)
  547. {
  548. Stek<char>stek;
  549. stek.stavi(1);
  550. int i=0;
  551. while (tekst[i]!='\0')
  552. {
  553. if (tekst[i]=='(' || tekst[i]=='[' ||tekst[i]=='{')
  554. {
  555. stek.stavi(tekst[i]);
  556. }
  557. if (tekst[i]==')')
  558. {
  559. if (stek.vrh()=='(')
  560. stek.skini();
  561. else return false;
  562.  
  563. }
  564. if (tekst[i]==']')
  565. {
  566. if (stek.vrh()=='[')
  567. stek.skini();
  568. else return false;
  569.  
  570.  
  571. }
  572. if (tekst[i]=='}')
  573. {
  574. if (stek.vrh()=='{')
  575. stek.skini();
  576. else return false;
  577.  
  578. }
  579. i++;
  580. }
  581. return true;
  582. }
  583. template <typename Tip>
  584. int presjek(Stek<Tip> s1, Stek<Tip> s2)
  585. {
  586. int br=0;
  587. for (int j=0; j<s2.brojElemenata(); j++)
  588. if (s2.skini()==s1.vrh())
  589. {
  590. s1.skini();
  591. br++;
  592. }
  593. return br;
  594. }
  595. bool palindrom(const Lista<char>& rijec) {
  596. Iterator<char> i1(rijec);
  597. Iterator<char> i2(rijec);
  598. int l=rijec.brojElemenata();
  599. i1.pocetak();
  600. i2.kraj();
  601. int x=0;
  602. bool m=1;
  603. while (x!=l) {
  604. if (i1.sljedeci()!=i2.prethodni()) {
  605. m=0;
  606. }
  607. x++; }
  608. return m;
  609. }
  610.  
  611.  
  612.  
  613. int main()
  614. {
  615. Lista<char> l;
  616. l.dodajIza('R');
  617. l.dodajIza('A');
  618. l.sljedeci();
  619. l.dodajIza('T');
  620. l.sljedeci();
  621. l.dodajIza('A');
  622. l.sljedeci();
  623. l.dodajIza('R');
  624. if (palindrom(l)) cout<<"OK"; else cout<<"NOK";
  625.  
  626. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement