Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.15 KB | None | 0 0
  1. #include <iostream>
  2. //kje gi koristime samo potrebnite funkcii od standardniot namespace.
  3. using std::cout;
  4. using std::cin;
  5. using std::endl;
  6.  
  7. struct jazol {//definirame struktura jazol
  8.     int info;//so integer info bidejkji rabotime so celobrojni podatoci
  9.     jazol *link;//i pokazuvac kon naredniot jazol
  10. };
  11.  
  12. struct EPList {//definirame struktura edinecno povrzana lista
  13.     jazol *head;//pocetniot jazol
  14.     void init();
  15.     void create(int);
  16.     void addFirst(int);
  17.     void addLast(int);
  18.     void printList();
  19.     void deleteList();
  20.     void addBefore(jazol*, int);
  21. };
  22.  
  23. void EPList::init() {//funkcija za inicijalizacija so koja go postavuvame "glavniot" jazol na NULL
  24.     head = NULL;
  25. }
  26.  
  27. void EPList::create(int x) {//funkcija za kreiranje na prviot jazol vo listata
  28.     head = new jazol;//bidejkji head ne pokazuva kon nisto(NULL), dinamicki alocirame nov jazol i sega head kje pokazuva kon adresata na toj jazol, sekogash treba da alocirame memorija koga pravime nov jazol
  29.     head->info = x;//vo info poleto kaj sto pokazuva head kje go zapisheme vlezniot argument
  30.     head->link = NULL;//bidejkji samo head e edinstveniot element znaci nemame drugi elementi i link poleto vo koe ni stoi adresata na naredniot element kje bide NULL
  31. }
  32.  
  33. void EPList::addFirst(int x) {//funcija so koja dodavame element na pocetokot na listata
  34.     jazol *pom = new jazol;//dinamicki alocirame nov jazol
  35.     pom->info = x;//kje go zapisheme vlezniot argument vo info poleto na noviot pom jazol
  36.     pom->link = head;//link poleto kje go popolnime so prviot jazol
  37.     head = pom;//i prviot jazol kje go postavime na toj nov jazol so sto toj stanuva prv
  38. }
  39.  
  40. void EPList::addLast(int x) {//funcija za dodavanje na jazol kon kraj na lista
  41.     jazol *pom = new jazol;//dinamicki go alocirame noviot jazol
  42.     pom->info = x;//kje go zapisheme vlezniot argument vo info poleto na noviot pom jazol
  43.     pom->link = NULL;//bidejkji ponatamu nema elementi link kje pokazuva kon NULL
  44.     if (head != NULL) {//proveruvame dokolku listata e prazna
  45.         if (head->link == NULL) {//so ova proveruvame ako ima samo eden element
  46.             head->link = pom;//togas naredniot jazol kje bide pom
  47.         } else {//ako nema samo eden element
  48.             jazol *dvizi = head;//definirame nov jazol so pomos na koj kje se dvizime vo listata i go inicijalizirame na prviot jazol
  49.             while (dvizi->link != NULL)//i so ovoj ciklus kje odime se dodeka ne stigneme do posledniot jazol
  50.                 dvizi = dvizi->link;
  51.             dvizi->link = pom;//i sega posledniot jazol kje pokazuva kon noviot jazol
  52.         }
  53.     }
  54. }
  55.  
  56. void EPList::printList() {// funkcija za pecatejne na lista
  57.     jazol *pom = head;//pomosen jazol so koj kje se dvizime
  58.     cout << "Elementi na lista:" << endl;
  59.     while (pom != NULL) {//dodeka ne e prazna
  60.         cout << pom->info << '\t';//pecati go info poleto na jazolot na koj sto pokazuva pom
  61.         pom = pom->link;//pomesti go pom na naredniot jazol
  62.     }
  63.     cout << endl;
  64. }
  65.  
  66. void EPList::deleteList() {//funcija za brishenje na lista
  67.     jazol *pom = head;//pomosen jazol so koj kje briseme
  68.     while (head != NULL) {//se dodeka head ne ni e NULL, odnosno se dodeka listata ima elementi
  69.         if (head->link == NULL) {//tuka proveruvame dali imame samo eden element ako imame samo toj treba da go izbrisheme
  70.             delete head;
  71.             head = NULL;
  72.         } else {
  73.             pom = head;//go postavuvame pom na prviot jazol
  74.             head = head->link;//prviot jazol go postavuvame da pokazuva na narendiot
  75.             delete pom;//i go brisheme pomoshniot jazol
  76.         }
  77.     }
  78. }
  79.  
  80. void EPList::addBefore(jazol *j, int x) {//so ovaa funcija dodavame jazol pred jazolot kako vlezen argument
  81.     if (j == head) {//ako jazolot pred koj sto dodavame e prviot jazol na listata znaci treba da dodademe jazol na pocetokot na listata
  82.         addFirst(x);
  83.     } else {
  84.         jazol *dvizi = head;
  85.         while (dvizi->link != j)//se dvizime se dodeka ne stigneme do elementot predhodnik na jazolot pred koj sto treba da dodademe
  86.             dvizi = dvizi->link;
  87.         jazol *pom = new jazol;//dinamicki alocirame nov jazol
  88.         pom->info = x;//soodvetno go popolnuvame so vtoriot vlezen argument
  89.         pom->link = dvizi->link;//noviot jazol kje pokazuva kon jazolot pred koj sto sme dodale nov jazol
  90.         dvizi->link = pom;//a jazolot sto bil pred nego sega kje pokazuva kon noviot
  91.     }
  92. }
  93.  
  94. void foo(EPList &lista, int n) {
  95.     int i;
  96.     jazol *dvizi = lista.head;//jazol so pomos na koj kje se dvizime niz listata
  97.     while (dvizi != NULL) {//se dvizime se do krajot na listata
  98.         for (i = 0; i < n - 1; i++) {//so ovoj for ciklus dodavame tocno n-1 pat elementi so info pole rezultat na celobrojnoto delenje na info poleto na koe se naogja dvizi i brojot na elementi koi treba da gi dodademe(n)
  99.             lista.addBefore(dvizi, dvizi->info / n);//elementite gi dodavame pred dvizi
  100.         }
  101.         dvizi->info = dvizi->info / n;//info poleto na dvizi isto taka kje go smenime so celobrojnoto delenje na vrednosta sto se naogjala predhodno i n, i zaradi ova gore vo for ciklusit ne iterirame do n
  102.         dvizi = dvizi->link;//i dvizi kje go pomestime na naredniot jazol
  103.     }
  104.  
  105. }
  106.  
  107. int main() {
  108.  
  109.     EPList lista;
  110.     int n;
  111.  
  112.     lista.init();
  113.     lista.create(17);
  114.     lista.addFirst(12);
  115.     lista.addLast(7);
  116.     lista.addLast(2);
  117.  
  118.     lista.printList();
  119.  
  120.     cout << "Vnesi n->";
  121.     cin >> n;
  122.  
  123.     foo(lista, n);
  124.  
  125.     lista.printList();
  126.  
  127.     lista.deleteList();
  128.  
  129.     return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement