Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. struct nod
  6. {
  7. int inf;
  8. nod *st,*dr;
  9.  
  10. };
  11. nod *prim,*ultim;
  12.  
  13. void creare (nod *&prim,nod *&ultim)
  14. {
  15. int n,i;
  16. nod *p;
  17. cout<<"Dati numarul de elemente: ";
  18. cin>>n;
  19. prim=new(nod);
  20. cout<<"Informatia numarul 1= ";
  21. cin>>prim->inf;
  22. prim->st=NULL;
  23. prim->dr=NULL;
  24. ultim=prim;
  25. for (i=2; i<=n; i++)
  26. {
  27. p=new(nod);
  28. cout<<"Informatia numarul "<<i<<"=: ";
  29. cin>>p->inf;
  30. p->dr=NULL;
  31. ultim->dr=p;
  32. p->st=ultim;
  33. ultim=p;
  34. }
  35. }
  36. void creareinv(nod *&prim,nod *&ultim)
  37. {
  38. int n,i;
  39. nod *p;
  40. cout<<"Dati numarul de elemente: ";
  41. cin>>n;
  42. prim=new(nod);
  43. cout<<"Informatia numarul 1= ";
  44. cin>>prim->inf;
  45. prim->st=NULL;
  46. prim->dr=NULL;
  47. ultim=prim;
  48. for (i=2; i<=n; i++)
  49. {
  50. p=new(nod);
  51. cout<<"Informatia numarul "<<i<<"=: ";
  52. cin>>p->inf;
  53. p->dr=prim;
  54. p->st=NULL;
  55. prim->st=p;
  56. prim=p;
  57. }
  58. }
  59. void add_prim(nod*& prim,nod* &ultim)
  60. {
  61. if (prim==NULL&&ultim==NULL)
  62. {
  63. prim=new(nod);
  64. cout<<"Informatia ce trebuie adaugata este: ";
  65. cin>>prim->inf;
  66. prim->dr=NULL;
  67. prim->st=NULL;
  68. ultim=prim;
  69. }
  70. else
  71. {
  72. nod*c;
  73. c=new nod;
  74. cout<<"Informatia ce trebuie adaugata este: ";
  75. cin>>c->inf;
  76. c->st=NULL;
  77. c->dr=prim;
  78. prim->st=c;
  79. prim=c;
  80. }
  81. }
  82.  
  83. void add_ultim(nod*& prim,nod*& ultim)
  84. {
  85. nod *p;
  86. if (prim==NULL&&ultim==NULL)
  87. {
  88. prim=new(nod);
  89. cout<<"Informatia ce trebuie adaugata este: ";
  90. cin>>prim->inf;
  91. prim->st=NULL;
  92. prim->dr=NULL;
  93. ultim=prim;
  94.  
  95. }
  96. else
  97. {
  98. p=new(nod);
  99. cin>>p->inf;
  100. ultim->dr=p;
  101. p->st=ultim;
  102. p->dr=NULL;
  103. ultim=p;
  104. }
  105.  
  106. }
  107. void add_k(nod *&prim,nod*&ultim)
  108. {
  109. int k,infadd,i;
  110. nod *q,*p;
  111. cout<<"Pozitia pe care va fi inserat nodul este: ";
  112. cin>>k;
  113. cout<<"Informatia care se va adauga este: ";
  114. cin>>infadd;
  115. if (k==1)
  116. {
  117. q=new(nod);
  118. q->inf=infadd;
  119. q->st=NULL;
  120. q->dr=prim;
  121. prim=q;
  122. }
  123. else
  124. {
  125. p=prim;
  126. for (i=1; i<=k-2; i++)
  127. {
  128. p=p->dr;
  129. if (p==NULL) break;
  130. }
  131. if (p==NULL) cout<<"PREA MULT"<<endl;
  132. else
  133. {
  134. q=new(nod);
  135.  
  136. q->inf=infadd;
  137. q->dr=p->dr;
  138. p->dr=q;
  139.  
  140. }
  141.  
  142. }
  143. }
  144. void add_dupaval(nod *&prim,nod*&ultim)
  145. {
  146. int valc,infadd;
  147. nod *q,*p=prim;
  148. cout<<"Valoare cautata este: ";
  149. cin>>valc;
  150. cout<<"Valoarea care se va adauga este: ";
  151. cin>>infadd;
  152. if (prim==NULL) cout<<"Nu se poate";
  153. else
  154. {
  155. while (p!=NULL)
  156. if (p->inf!=valc) p=p->dr;
  157. else
  158. {
  159. q=new(nod);
  160. q->inf=infadd;
  161. q->dr=p->dr;
  162. p->dr=q;
  163. p=q->dr;
  164. }
  165. if (ultim->dr!=NULL)
  166. {
  167. ultim=ultim->dr;
  168. ultim->dr=NULL;
  169. }
  170. }
  171.  
  172.  
  173. }
  174. void add_inainte(nod *&prim, nod*&ultim)
  175. {
  176. int valc,infadd;
  177. nod *p=prim,*q;
  178. cout<<"Valoare cautata este: ";
  179. cin>>valc;
  180. cout<<"Valoarea care se va adauga este: ";
  181. cin>>infadd;
  182. if (prim->inf==valc)
  183. {
  184. q=new(nod);
  185. q->inf=infadd;
  186. prim->st=q;
  187. q->dr=prim;
  188. prim=q;
  189. p=q->dr->dr;
  190. }
  191. while (p)
  192. if (p->inf!=valc) p=p->dr;
  193. else
  194. {
  195. q=new(nod);
  196. q->inf=infadd;
  197. p->st->dr=q;
  198. q->st=p->st;
  199. q->dr=p;
  200. p->st=q;
  201. p=p->dr;
  202. }
  203. }
  204. void elimin_prim(nod*&prim,nod *&ultim)
  205. {
  206. nod *p=prim;
  207. prim=p->dr;
  208. prim->st=NULL;
  209. delete p;
  210. }
  211. void elimin_ultim (nod *&prim,nod *&ultim)
  212. {
  213. nod *p=ultim;
  214. ultim=ultim->st;
  215. ultim->dr=NULL;
  216. delete p;
  217.  
  218. }
  219. void elimin_k(nod *&prim,nod *&ultim)
  220. {
  221. int k,i;
  222. if (prim==NULL&&ultim==NULL) cout<<"Lista vida";
  223. cout<<"Pozitia elementului care va fi eliminat este: ";
  224. cin>>k;
  225. if (k==1)
  226. elimin_prim(prim,ultim);
  227. else
  228. {
  229. nod *p,*q;
  230. p=prim;
  231. for (i=1; i<k; i++)
  232. {
  233. p=p->dr;
  234. if (p->dr==NULL) break;
  235. }
  236. if (p==ultim) elimin_ultim(prim,ultim);
  237. else if (p==NULL) cout<<"Nu sunt destul noduri";
  238. else
  239. {
  240. q=p;
  241. p->st->dr=p->dr;
  242. p->dr->st=p->st;
  243. delete q;
  244. }
  245.  
  246. }
  247. }
  248. void elimin_val(nod *&prim,nod*&ultim)
  249. {
  250. int valc;
  251. nod *p,*q;
  252. cout<<"Valoarea cautata este: ";
  253. cin>>valc;
  254. if (prim==NULL ) cout<<"Nu se poate elimina";
  255. else
  256. {
  257. p=prim->dr;
  258. while (p->dr)
  259. if (p->inf!=valc) p=p->dr;
  260. else
  261. {
  262. q=p;
  263. p->st->dr=p->dr;
  264. p->dr->st=p->st;
  265. delete q;
  266. p=p->dr;
  267.  
  268. }
  269. if (ultim->inf==valc) elimin_ultim(prim,ultim);
  270. if (prim->inf==valc&&prim->dr==NULL)
  271. {
  272. delete prim;
  273. prim=NULL;
  274. }
  275. else
  276. if (prim->inf==valc)
  277. elimin_prim(prim,ultim);
  278.  
  279.  
  280. }
  281.  
  282. }
  283. void modific_pozk(nod *&prim,nod *&ultim)
  284. {
  285. int k,i;
  286. nod *p;
  287. cout<<"Pozitia elementului este: ";
  288. cin>>k;
  289. if (k==1)
  290. prim->inf=909;
  291. else
  292. {
  293. p=prim;
  294. for (i=1; i<k; i++)
  295. {
  296. p=p->dr;
  297. if (p==NULL) break;
  298. }
  299. if (p==NULL) cout<<"Noduri insuficiente";
  300. else
  301. p->inf=909;
  302. }
  303. }
  304. void modific_inf(nod *&prim,nod*&ultim)
  305. {
  306. int valc;
  307. nod*p=prim;
  308. cout<<"Valoarea cautata este: ";
  309. cin>>valc;
  310. while (p)
  311. {
  312. if (p->inf==valc) p->inf=1052016;
  313. p=p->dr;
  314.  
  315. }
  316. }
  317. void permutare_st(nod *&prim,nod*&ultim)
  318. {
  319. nod *q,*p;
  320. int k,i;
  321. cout<<"Numarul de noduri cu care se va permuta este: ";
  322. cin>>k;
  323. for (i=1; i<=k; i++)
  324. {
  325. q=new(nod);
  326. p=prim;
  327. q->inf=p->inf;
  328. ultim->dr=q;
  329. q->st=ultim;
  330. q->dr=NULL;
  331. ultim=q;
  332. prim=p->dr;
  333. prim->st=NULL;
  334. delete(p);
  335. }
  336.  
  337. }
  338. void permutare_dr (nod *&prim, nod*&ultim)
  339. {
  340. nod *p,*q;
  341. int k,i;
  342. cout<<"Numarul de noduri cu care se va permuta este: ";
  343. cin>>k;
  344. for (i=1; i<=k; i++)
  345. {
  346. q=new(nod);
  347. q->inf=ultim->inf;
  348. prim->st=q;
  349. q->dr=prim;
  350. prim=q;
  351.  
  352. p=ultim;
  353. ultim=ultim->st;
  354. ultim->dr=NULL;
  355. delete (p);
  356.  
  357. }
  358. }
  359. void interchimbare_adrese(nod*&prim,nod*&ultim)
  360. {
  361. nod *p,*q,*t;
  362. q=prim;
  363. t=ultim->st;
  364. p=q->dr;
  365. q->st=ultim;
  366. ultim->dr=p;
  367. prim=ultim;
  368. prim->st=NULL;
  369. q->st=t;
  370. t->dr=q;
  371. ultim=q;
  372. ultim->dr=NULL;
  373.  
  374.  
  375. }
  376. void sortare (nod *&prim,nod *&ultim)
  377. {
  378. int ok,aux;
  379. nod *p;
  380. ok=1;
  381. while (ok)
  382. {
  383. ok=0;
  384. p=prim;
  385. while (p->dr)
  386. {
  387. if (p->inf>p->dr->inf)
  388. {
  389. aux=p->inf;
  390. p->inf=p->dr->inf;
  391. p->dr->inf=aux;
  392. ok=1;
  393.  
  394. }
  395. p=p->dr;
  396. }
  397. }
  398. }
  399. void afisinv(nod *&prim,nod*&ultim)
  400. {
  401. nod *p=ultim;
  402. while (p)
  403. {
  404. cout<<p->inf<<" ";
  405. p=p->st;
  406. }
  407. cout<<endl;
  408. }
  409.  
  410. void afis (nod*&prim,nod*&ultim)
  411. {
  412. nod *p=prim;
  413. if (prim==NULL) cout<<"LV";
  414. else
  415. while (p)
  416. {
  417. cout<<p->inf<<" ";
  418. p=p->dr;
  419. }
  420. cout<<endl;
  421.  
  422. }
  423.  
  424. int main()
  425. {
  426. int caz,ok;
  427. char a;
  428. cout << "*Cum doriti sa se creeze lista?*"<<endl;
  429. cout<<"a)in ordinea citirii."<<endl;
  430. cout<<"b)in ordine inversa citirii. "<<endl;
  431. cin>>a;
  432. if (a=='a') creare(prim,ultim);
  433. else if (a=='b') creareinv(prim,ultim);
  434. cout<<endl;
  435. cout << "*Cum doriti sa se afiseze lista?*"<<endl;
  436. cout<<"a)in ordinea citirii."<<endl;
  437. cout<<"b)in ordine inversa citirii. "<<endl;
  438. cin>>a;
  439. if (a=='a') ok=1;
  440. else if (a=='b') ok=0;
  441. cout<<endl;
  442. cout<<"****Lista de operatii:****"<<endl;
  443. cout<<" 1)Adaugarea unui nod pe prima pozitie"<<endl;
  444. cout<<" 2)Adaugarea unui nod pe ultima pozitie"<<endl;
  445. cout<<" 3)Adaugarea unui nod pe pozitia k"<<endl;
  446. cout<<" 4)Adaugarea unui nod dupa un nod cu o anumita informatie"<<endl;
  447. cout<<" 5)Adaugarea unui nod inaintea unui nod cu o anumita informatie"<<endl;
  448. cout<<" 6)Stergerea nodului de pe prima pozitie"<<endl;
  449. cout<<" 7)Stergerea nodului de pe ultima pozitie"<<endl;
  450. cout<<" 8)Stergerea nodului de pe pozitia k"<<endl;
  451. cout<<" 9)Stergerea nodurilor cu o anumita informatie"<<endl;
  452. cout<<"10)Modificarea informatiei nodului de pe pozitia k"<<endl;
  453. cout<<"11)Modificarea anumitei informatii din lista"<<endl;
  454. cout<<"12)Deplasarea primelor k noduri la final"<<endl;
  455. cout<<"13)Permutarea elementelor cu k pozitii la dreapta"<<endl;
  456. cout<<"14)Interschimbarea adreselor a 2 noduri (primul si ultimul)"<<endl;
  457. cout<<"15)Sortarea informatiilor in ordine crescatoare"<<endl;
  458. cout<<endl;
  459. cout<<"Dati numarul operatiei: ";
  460. cin >> caz;
  461. cout<<endl;
  462. cout<<"Lista creata este: "<<endl;
  463. afis(prim,ultim);
  464. cout<<endl;
  465. do
  466. {
  467. switch (caz)
  468. {
  469. case 1:
  470. add_prim(prim,ultim);
  471. if (ok) afis(prim,ultim);
  472. else afisinv(prim,ultim);
  473. break;
  474.  
  475. case 2:
  476. add_ultim(prim,ultim);
  477. if (ok) afis(prim,ultim);
  478. else afisinv(prim,ultim);
  479. break;
  480.  
  481. case 3:
  482. add_k(prim,ultim);
  483. if (ok) afis(prim,ultim);
  484. else afisinv(prim,ultim);
  485. break;
  486.  
  487. case 4:
  488. add_dupaval(prim,ultim);
  489. if (ok) afis(prim,ultim);
  490. else afisinv(prim,ultim);
  491. break;
  492.  
  493. case 5:
  494. add_inainte(prim,ultim);
  495. if (ok) afis(prim,ultim);
  496. else afisinv(prim,ultim);
  497. break;
  498.  
  499. case 6:
  500. elimin_prim(prim,ultim);
  501. if (ok) afis(prim,ultim);
  502. else afisinv(prim,ultim);
  503. break;
  504.  
  505. case 7:
  506. elimin_ultim(prim,ultim);
  507. if (ok) afis(prim,ultim);
  508. else afisinv(prim,ultim);
  509. break;
  510.  
  511. case 8:
  512. elimin_k(prim,ultim);
  513. if (ok) afis(prim,ultim);
  514. else afisinv(prim,ultim);
  515. break;
  516.  
  517. case 9:
  518. elimin_val(prim,ultim);
  519. if (ok) afis(prim,ultim);
  520. else afisinv(prim,ultim);
  521. break;
  522.  
  523. case 10:
  524. modific_pozk(prim,ultim);
  525. if (ok) afis(prim,ultim);
  526. else afisinv(prim,ultim);
  527. break;
  528.  
  529. case 11:
  530. modific_inf(prim,ultim);
  531. if (ok) afis(prim,ultim);
  532. else afisinv(prim,ultim);
  533. break;
  534.  
  535. case 12:
  536. permutare_st(prim,ultim);
  537. if (ok) afis(prim,ultim);
  538. else afisinv(prim,ultim);
  539. break;
  540.  
  541. case 13:
  542. permutare_dr(prim,ultim);
  543. if (ok) afis(prim,ultim);
  544. else afisinv(prim,ultim);
  545. break;
  546.  
  547. case 14:
  548. interchimbare_adrese(prim,ultim);
  549. if (ok) afis(prim,ultim);
  550. else afisinv(prim,ultim);
  551. break;
  552. case 15:
  553. sortare(prim,ultim);
  554. if (ok) afis(prim,ultim);
  555. else afisinv(prim,ultim);
  556. break;
  557. }
  558. cout<<endl;
  559. cout<<"Dati numarul operatiei: ";
  560. cin >> caz;
  561. }while (caz);
  562. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement