Advertisement
bokunda

Dvostruko povezane osnovno

Dec 6th, 2016
616
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.18 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct element ELEMENT;
  5.  
  6. struct element
  7. {
  8.     int podatak;
  9.    
  10.     ELEMENT *sledeci;
  11.     ELEMENT *prethodni;
  12. };
  13.  
  14. void alociraj(ELEMENT **novi)
  15. {
  16.     (*novi) = (ELEMENT *)malloc(sizeof(ELEMENT));
  17.     if (!(*novi))
  18.     {
  19.         printf("GRESKA_NOVI\n\n");
  20.         exit(1);
  21.     }
  22.    
  23.     (*novi)->sledeci = NULL;
  24.     (*novi)->prethodni = NULL;
  25. }
  26.  
  27. ELEMENT *napravi_element(void)
  28. {
  29.     ELEMENT *novi;
  30.     alociraj(&novi);
  31.    
  32.     printf("Unesite vrednost: ");
  33.     scanf("%d",&novi->podatak);
  34.    
  35.     return novi;
  36. }
  37.  
  38. void dodaj(ELEMENT **poc, ELEMENT **kraj, ELEMENT *novi)
  39. {
  40.     if(!(*poc))
  41.     {
  42.         *poc = novi;
  43.         *kraj = novi;
  44.     }
  45.     else
  46.     {
  47.         novi->prethodni = *kraj;
  48.         (*kraj)->sledeci = novi;
  49.         (*kraj) = novi;
  50.     }
  51. }
  52.  
  53.  
  54.  
  55. void dodaj_pocetak(ELEMENT **poc, ELEMENT **kraj, ELEMENT *novi)
  56. {
  57.     if (!(*poc))
  58.     {
  59.         *poc = novi;
  60.         *kraj = novi;
  61.     }
  62.     else
  63.     {
  64.         novi->sledeci = *poc;
  65.         (*poc)->prethodni = novi;
  66.         *poc = novi;
  67.     }
  68. }
  69.  
  70. void umetni(ELEMENT **pocetak, ELEMENT **kraj, ELEMENT *novi, int n)
  71. {
  72.     int indeks, br = 1;
  73.     printf("Unesite indeks posle kog zelite da se nadje umetnuti element: ");
  74.     scanf("%d",&indeks);
  75.    
  76.     if(indeks < 1) dodaj_pocetak(pocetak, kraj, novi);
  77.     else if (indeks >= n) dodaj(pocetak, kraj, novi);
  78.     else
  79.     {
  80.        
  81.     ELEMENT *pom = *pocetak;
  82.    
  83.     while(br < indeks)
  84.     {      
  85.         br++;
  86.         pom = pom->sledeci;
  87.     }
  88.    
  89.     novi->prethodni = pom;
  90.     novi->sledeci = pom->sledeci;
  91.     pom->sledeci->prethodni = novi;
  92.     pom->sledeci = novi;   
  93.     }
  94. }
  95.  
  96.  
  97.  
  98. void kreiraj_listu(ELEMENT **poc, ELEMENT **kraj, int *n)
  99. {
  100.     ELEMENT *novi;
  101.    
  102.     printf("Unesite n: ");
  103.     scanf("%d", &(*n));
  104.     int br = *n;
  105.    
  106.     while(br)
  107.     {
  108.         novi = napravi_element();
  109.         dodaj(poc, kraj, novi);
  110.         br--;
  111.     }
  112. }
  113.  
  114. void stampaj_desno(ELEMENT *poc)
  115. {
  116.     printf("\n\nELEMENTI LISTE SU:\n\n");
  117.     while(poc != NULL)
  118.     {
  119.         printf("%d\t",poc->podatak);
  120.         poc = poc->sledeci;
  121.     }
  122.     putchar('\n');
  123. }
  124.  
  125. void stampaj_levo(ELEMENT *kraj)
  126. {
  127.     printf("\n\nELEMENTI LISTE SU:\n\n");
  128.     while(kraj != NULL)
  129.     {
  130.         printf("%d\t",kraj->podatak);
  131.         kraj = kraj->prethodni;
  132.     }
  133.     putchar('\n');
  134. }
  135.  
  136. void obrisi(ELEMENT **poc, ELEMENT **kraj, int n)
  137. {
  138.     int indeks;
  139.     printf("Unesite indeks elementa za brisanje: ");
  140.     scanf("%d",&indeks);
  141.     ELEMENT *pom = *poc;
  142.    
  143.     if (indeks == 1)
  144.     {
  145.         *poc = (*poc)->sledeci;
  146.         (*poc)->prethodni = NULL;
  147.        
  148.         free(pom);
  149.     }
  150.     else if (indeks == n)
  151.     {
  152.         pom = *kraj;
  153.         *kraj = (*kraj)->prethodni;
  154.         (*kraj)->sledeci = NULL;
  155.        
  156.         free(pom);
  157.     }
  158.     else
  159.     {
  160.         indeks--;
  161.         while(indeks)
  162.         {
  163.             pom = pom->sledeci;
  164.             indeks--;
  165.         }
  166.        
  167.         pom->prethodni->sledeci = pom->sledeci;
  168.         pom->sledeci->prethodni = pom->prethodni;
  169.         free(pom);     
  170.     }
  171. }
  172.  
  173. int main(void)
  174. {
  175.     ELEMENT *pocetak, *kraj;//, *pom;
  176.     int n;
  177.    
  178.     kreiraj_listu(&pocetak, &kraj, &n);
  179.     stampaj_desno(pocetak);
  180.     stampaj_levo(kraj);
  181.    
  182. /*  printf("\nDODAVANJE NA POCETAK\n");
  183.     alociraj(&pom);
  184.     pom = napravi_element();
  185.     dodaj_pocetak(&pocetak, &kraj, pom);
  186.     stampaj_desno(pocetak);
  187.    
  188.     printf("\nUMETNI\n");
  189.     alociraj(&pom);
  190.     pom = napravi_element();
  191.     umetni(&pocetak, &kraj, pom, n);
  192.     stampaj_desno(pocetak);
  193. */ 
  194.     printf("\nBRISANJE\n");
  195.     obrisi(&pocetak, &kraj, n);
  196.     stampaj_desno(pocetak);
  197.    
  198.     return 0;
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement