Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.44 KB | None | 0 0
  1.  
  2.  
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class Strony{
  8. public:
  9. int strona;
  10. Strony* pierwsza;
  11. Strony* nastepna;
  12. Strony();
  13. void dodajStrony(int);
  14. void wyswietlStrony();
  15. bool isEmpty();
  16. void usunStrony(int);
  17. bool wyszukajStrone(int);
  18. };
  19.  
  20. Strony::Strony(){
  21. pierwsza=NULL;
  22. nastepna = NULL;
  23. }
  24.  
  25. void Strony::wyswietlStrony(){
  26. Strony *tmp = pierwsza;
  27. while(tmp!=NULL){
  28. cout<<tmp->strona<<" ";
  29. tmp=tmp->nastepna;
  30. }
  31. cout << endl;
  32. }
  33.  
  34. bool Strony::isEmpty(){
  35. Strony *temp = pierwsza;
  36. if(temp==NULL)
  37. return true;
  38. else
  39. return false;
  40. }
  41.  
  42. bool Strony::wyszukajStrone(int strona){
  43. Strony *aktWartosc = NULL;
  44. aktWartosc = pierwsza;
  45. bool czyZnaleziono = false;
  46.  
  47. while(aktWartosc != NULL){
  48. if(aktWartosc->strona == strona){
  49. czyZnaleziono = true;
  50. }
  51. if(czyZnaleziono==true){
  52. break;
  53. }
  54. aktWartosc = aktWartosc->nastepna;
  55. }
  56. if(czyZnaleziono==false)
  57. return false;
  58. else
  59. return true;
  60. }
  61.  
  62.  
  63. void Strony::usunStrony(int value){
  64. Strony *aktWartosc = NULL;
  65. Strony *wczWartosc = NULL;
  66.  
  67. aktWartosc = pierwsza;
  68. wczWartosc = pierwsza;
  69.  
  70. while(aktWartosc != NULL && aktWartosc->strona != value){
  71. wczWartosc = aktWartosc;
  72. aktWartosc = aktWartosc->nastepna;
  73. }
  74.  
  75. if(aktWartosc==NULL){}
  76. else{
  77. if(aktWartosc->strona == value){
  78. if(aktWartosc == pierwsza){
  79. pierwsza = aktWartosc->nastepna;
  80. }
  81. else if(aktWartosc->nastepna == NULL && aktWartosc->strona==value){
  82. wczWartosc->nastepna=NULL;
  83. }
  84. else
  85. wczWartosc->nastepna=aktWartosc->nastepna;
  86.  
  87. }
  88. }
  89.  
  90. }
  91.  
  92. void Strony::dodajStrony(int strona){
  93. if(!pierwsza){
  94. Strony *nowa = new Strony;
  95. nowa->strona=strona;
  96. pierwsza=nowa;
  97. }
  98. else if(pierwsza->strona>strona){
  99. Strony *nowa = new Strony;
  100. nowa->strona=strona;
  101. nowa->nastepna=pierwsza;
  102. pierwsza=nowa;
  103. }
  104. else{
  105. Strony* temp = pierwsza;
  106. Strony* temp2 = temp;
  107. Strony* nowa = new Strony;
  108. while(temp){
  109. if(temp->strona == strona){
  110. break;
  111. }
  112. else if(temp->strona > strona){
  113. temp2->nastepna = nowa;
  114. nowa->nastepna=temp;
  115. nowa->strona = strona;
  116. break;
  117. }
  118. else if(temp->nastepna == NULL){
  119. temp->nastepna = nowa;
  120. nowa->strona = strona;
  121. break;
  122. }
  123. temp2 = temp;
  124. temp = temp->nastepna;
  125. }
  126. }
  127. }
  128.  
  129. class Etykiety
  130. {
  131. public:
  132. string etykieta;
  133. Etykiety *pierwsza;
  134. Etykiety *nastepnaetykieta;
  135. Strony *poczatekstron;
  136. Etykiety();
  137. void dodajEtykiete(string);
  138. void wyswietlListe();
  139. void usunStr(string);
  140. void usunEtykiete(string);
  141. bool wyszukajEtykiete(string,int);
  142. void wyszukajAll(string);
  143.  
  144. };
  145.  
  146. Etykiety::Etykiety(){
  147. pierwsza=NULL;
  148. poczatekstron = new Strony;
  149. nastepnaetykieta = NULL;
  150. }
  151.  
  152. void Etykiety::dodajEtykiete(string etykieta){
  153. if(!pierwsza){
  154. Etykiety *nowa = new Etykiety;
  155. nowa->etykieta=etykieta;
  156. nowa->poczatekstron = new Strony;
  157. int liczbastron;
  158. cin>>liczbastron;
  159.  
  160. int strona;
  161. for(int i=0; i<liczbastron; i++){
  162. cin>>strona;
  163. if(strona<=1000)
  164. nowa->poczatekstron->dodajStrony(strona);
  165. }
  166. pierwsza=nowa;
  167. }
  168.  
  169. else{
  170. Etykiety* temp = pierwsza;
  171. Etykiety* temp2 = temp;
  172. Etykiety* nowa = new Etykiety;
  173. while(temp){
  174. if(temp->etykieta == etykieta){
  175. int liczbastron;
  176. cin>>liczbastron;
  177.  
  178. int strona;
  179. for(int i=0; i<liczbastron; i++){
  180. cin>>strona;
  181. if(strona<=1000)
  182. temp->poczatekstron->dodajStrony(strona);
  183. }
  184. break;
  185. }
  186. else if(pierwsza->etykieta > etykieta){
  187. nowa->nastepnaetykieta = pierwsza;
  188. nowa->etykieta = etykieta;
  189. nowa->poczatekstron = new Strony;
  190. int liczbastron;
  191. cin>>liczbastron;
  192.  
  193. int strona;
  194. for(int i=0; i<liczbastron; i++){
  195. cin>>strona;
  196. if(strona<=1000)
  197. nowa->poczatekstron->dodajStrony(strona);
  198. }
  199. pierwsza=nowa;
  200.  
  201. break;
  202. }
  203. else if(temp->etykieta > etykieta && etykieta > temp2->etykieta){
  204. temp2->nastepnaetykieta = nowa;
  205. nowa->nastepnaetykieta=temp;
  206. nowa->etykieta = etykieta;
  207. nowa->poczatekstron = new Strony;
  208. int liczbastron;
  209. cin>>liczbastron;
  210.  
  211. for(int i=0; i<liczbastron; i++){
  212. int strona;
  213. cin>>strona;
  214. if(strona<=1000)
  215. nowa->poczatekstron->dodajStrony(strona);
  216. }
  217. break;
  218. }
  219. else if(temp->nastepnaetykieta == NULL){
  220. temp->nastepnaetykieta = nowa;
  221. nowa->etykieta = etykieta;
  222. nowa->poczatekstron = new Strony;
  223. int liczbastron;
  224. cin>>liczbastron;
  225.  
  226. int strona;
  227. for(int i=0; i<liczbastron; i++){
  228. cin>>strona;
  229. if(strona<=1000)
  230. nowa->poczatekstron->dodajStrony(strona);
  231. }
  232. break;
  233. }
  234.  
  235. temp2 = temp;
  236. temp = temp->nastepnaetykieta;
  237. }
  238. }
  239. }
  240.  
  241. void Etykiety::wyswietlListe(){
  242. Etykiety *tmp = pierwsza;
  243. while(tmp!=NULL){
  244. cout<<tmp->etykieta<<" ";
  245. tmp->poczatekstron->wyswietlStrony();
  246. tmp=tmp->nastepnaetykieta;
  247. }
  248. }
  249.  
  250. void Etykiety::usunStr(string etyk){
  251. Etykiety* temp = NULL;
  252. temp = pierwsza;
  253.  
  254. while(temp != NULL){
  255. if(temp->etykieta==etyk){
  256. int liczbastron;
  257. cin>>liczbastron;
  258. int strona;
  259. for(int i=0; i<liczbastron; i++){
  260.  
  261. cin>>strona;
  262. temp->poczatekstron->usunStrony(strona);
  263.  
  264.  
  265. }
  266. if(temp->poczatekstron->isEmpty()==1){
  267. usunEtykiete(temp->etykieta);
  268. break;
  269. }
  270.  
  271.  
  272. }
  273. temp = temp->nastepnaetykieta;
  274.  
  275. }
  276. }
  277.  
  278.  
  279.  
  280. void Etykiety::usunEtykiete(string etykieta){
  281. Etykiety *aktWartosc = NULL;
  282. Etykiety *wczWartosc = NULL;
  283.  
  284. aktWartosc = pierwsza;
  285. wczWartosc = pierwsza;
  286.  
  287. while(aktWartosc != NULL && aktWartosc->etykieta != etykieta){
  288. wczWartosc = aktWartosc;
  289. aktWartosc = aktWartosc->nastepnaetykieta;
  290. }
  291.  
  292.  
  293. if(aktWartosc->etykieta == etykieta){
  294. if(aktWartosc == pierwsza){
  295. pierwsza = aktWartosc->nastepnaetykieta;
  296. }
  297. else if(aktWartosc->nastepnaetykieta == NULL && aktWartosc->etykieta==etykieta){
  298. wczWartosc->nastepnaetykieta=NULL;
  299. }
  300. else
  301. wczWartosc->nastepnaetykieta=aktWartosc->nastepnaetykieta;
  302. }
  303. }
  304.  
  305. bool Etykiety::wyszukajEtykiete(string etykieta, int strona)
  306. {
  307. bool flagExist = false;
  308. Etykiety *aktWartosc = NULL;
  309. aktWartosc = pierwsza;
  310.  
  311. while(aktWartosc != NULL)
  312. {
  313. if(aktWartosc->etykieta == etykieta)
  314. {
  315. if(aktWartosc->poczatekstron->wyszukajStrone(strona)==true)
  316. return true;
  317. else
  318. return false;
  319.  
  320. }else
  321. aktWartosc = aktWartosc->nastepnaetykieta;
  322.  
  323. }
  324. return false;
  325. }
  326.  
  327.  
  328. void Etykiety::wyszukajAll(string etykieta) {
  329. Etykiety *aktWartosc = NULL;
  330. aktWartosc = pierwsza;
  331. bool czyZnaleziono = false;
  332.  
  333. while(aktWartosc != NULL){
  334. if(aktWartosc->etykieta == etykieta){
  335. cout << etykieta << " ";
  336. aktWartosc->poczatekstron->wyswietlStrony();
  337. czyZnaleziono=true;
  338. }
  339. if(czyZnaleziono==true)
  340. break;
  341.  
  342.  
  343. aktWartosc = aktWartosc->nastepnaetykieta;
  344.  
  345. }
  346. if(czyZnaleziono==false)
  347. cout << "-1" << endl;
  348. }
  349.  
  350.  
  351.  
  352. int main()
  353. {
  354. Etykiety *lista = new Etykiety();
  355.  
  356. int ile_operacji;
  357. char polecenie;
  358.  
  359. cin >> ile_operacji;
  360. for(int i=0; i<ile_operacji; i++)
  361. {
  362. cin >> polecenie;
  363. switch (polecenie){
  364. case 'I':{
  365. string etykieta;
  366. cin>>etykieta;
  367. lista->dodajEtykiete(etykieta);
  368. break;
  369. }
  370. case 'D':{
  371. string etykieta;
  372. cin>>etykieta;
  373. lista->usunStr(etykieta);
  374. break;
  375. }
  376. case 'F':{
  377. string etykieta;
  378. int strona;
  379. cin>>etykieta;
  380. cin>>strona;
  381. cout << lista->wyszukajEtykiete(etykieta,strona)<<endl;
  382. break;
  383. }
  384. case 'A':{
  385. string etykieta;
  386. cin >> etykieta;
  387. lista->wyszukajAll(etykieta);
  388. break;
  389. }
  390. case 'P':{
  391. lista->wyswietlListe();
  392. break;
  393. }
  394. }
  395. }
  396. delete lista;
  397.  
  398. return 0;
  399. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement