Advertisement
B-Matt

Studij #1 - C

Feb 18th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. struct lista {                                                  // Radiš strukturu za jednostruku listu
  6.     int vrijednost;                                             // U ovo spremaš vrijednost pojedinog polja liste
  7.     struct lista *sljedeca;                                     // Ovdje spremaš adresu sljedećeg elementa koji dolazi nakon
  8. } *glavna;                                                      // Ovdje deklariraš pokazivač glavne liste
  9.  
  10. void UnosListe(int num)                                         // Funkcija koja stavlja vrijednost num u listu (na prvo mjesto)
  11. {
  12.     struct lista *temp = (struct lista *)malloc(sizeof(struct lista)); // Pravimo privremenu listu u koju ćemo spremiti vrijednost
  13.                                                                 // Nakon provjera unosimo vrijednost u glavnu listu
  14.     temp->vrijednost = num;                                     // Stavljaš vrijednost argumenta u privremenu listu
  15.     if (glavna == NULL) {                                       // Ako je glavna lista prazna onda stavljaj tu vrijednost u nju
  16.         glavna = temp;                                          // Ako izjednačiš liste onda automatski ubacuješ vrijednost iz privremene u glavnu listu
  17.         glavna->sljedeca = NULL;                                // Ako je prazna lista onda imaš samo 1 element, a idući element ne postoji (NULL je adresa sljedećeg)
  18.     }
  19.     else {                                                      // Ako lista ima već elemente
  20.         temp->sljedeca = glavna;                                // Stavljaš da sljedeća adresa privremene liste zapravo adresa glavne liste
  21.         glavna = temp;                                          // Ovdje ubacuješ vrijednost argumenta na sljedeće prazno polje
  22.     }
  23. }
  24.  
  25. void Zamjena(struct lista **tmp_lista, int x, int y)            // Funkcija koja vrši zamjenu integera x i y
  26. {
  27.     if (x == y) return;                                         // Ako su x i y isti onda nema svrhe mijenjati podatke
  28.     struct lista *prosliX = NULL, *sadX = *tmp_lista;           // Ovdje deklariraš dva pokazivača koji služe za praćenje X vrijednosti u listi
  29.     while (sadX && sadX->vrijednost != x) {                     // Pratiš adrese vrijednosti u listi koje su različite od X, a tražiš X u listi
  30.         prosliX = sadX;                                         // Prosli postaje trenutna adresa X vrijednosti
  31.         sadX = sadX->sljedeca;                                  // Sadasnja adresa je sljedeća adresa
  32.     }
  33.  
  34.     struct lista *prosliY = NULL, *sadY = *tmp_lista;           // Isto sve vrijedi kao i kod Xa, pratiš adrese vrijednosti u listi koje si različite od Y, a tražiš Y u listi
  35.     while (sadY && sadY->vrijednost != y) {
  36.         prosliY = sadY;
  37.         sadY = sadY->sljedeca;
  38.     }
  39.  
  40.     if (sadX == NULL || sadY == NULL) return;                   // Ukoliko nema X i Y u listi izađi iz programa
  41.     if (prosliX != NULL)                                        // Ukoliko X nije na početku liste onda napravi Y da je na početku
  42.         prosliX->sljedeca = sadY;
  43.     else
  44.         *tmp_lista = sadY;
  45.  
  46.  
  47.     if (prosliY != NULL)                                        // Ukoliko Y nije na početku liste onda napravi X da je na početku
  48.         prosliY->sljedeca = sadX;
  49.     else
  50.         *tmp_lista = sadX;
  51.  
  52.     struct lista *temp = sadY->sljedeca;                        // Spremaš Y u privremenu varijablu
  53.     sadY->sljedeca = sadX->sljedeca;                            // U mjesto Ya spremaš X (adresu pokazivača Xa stavljaš na Y)
  54.     sadX->sljedeca = temp;                                      // U mjesto Xa spremaš Y adresu pokazivača Ya stavljaš na X)
  55. }
  56.  
  57. void  IspisListe()                                              // Funkcija koja služi za ispis liste
  58. {
  59.     struct lista *temp = glavna;                                // Tu radiš privremenu listu koja je zapravo ona gore (da ne bismo
  60.     if (temp == NULL) return;                                   // Ukoliko je lista prazna ne ispisuje se ništa
  61.     while (temp != NULL) {                                      // Sve dok petlja ne dođe do zadnje vrijednosti se vrti
  62.         printf("%d ", temp->vrijednost);                        // Ispisuje se vrijednost
  63.         temp = temp->sljedeca;                                  // Kao trenutnu adresu elementa koristiš sljedeći element
  64.     }
  65.     printf("\n");
  66. }
  67.  
  68.  
  69. int main() {
  70.  
  71.     UnosListe(5);
  72.     UnosListe(6);
  73.     UnosListe(7);
  74.     UnosListe(9);
  75.     UnosListe(12);
  76.     UnosListe(2);
  77.     UnosListe(1);
  78.  
  79.     IspisListe();
  80.     Zamjena(&glavna, 7, 5);
  81.     Zamjena(&glavna, 12, 6);
  82.     IspisListe();
  83.  
  84.     system("pause");
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement