Advertisement
Matqux

lista

Nov 24th, 2019
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.00 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. //listaelemek definiálása egész elemek tárolására
  4. typedef struct listelem
  5. {
  6.     int data;
  7.     struct listelem *next;
  8. }listelem;
  9.  
  10. //függvény előre beszúráshoz
  11. listelem* beszurElore(listelem *list, int data)
  12. {
  13.     listelem *uj = (listelem*)malloc(sizeof(listelem)); //1.lépés: memóriafoglalás az új elemnek
  14.     uj->next = list; //2. lépés: az új elem next eleme az eddigi lista kezdőcíme lesz (hiszen az elé szúrtuk be)
  15.     uj->data = data; //Adatbeírás
  16.     return uj; //3.lépés: visszadjuk az új elem címét, mely a lista új kezdőcíme lesz
  17. }
  18.  
  19. //függvény kiíratáshoz
  20. void kiirat(listelem *list)
  21. {
  22.     while (list != NULL) //addig megyünk, amig nem találunk null pointert
  23.     {
  24.         printf("%p\t%d\n", list, list->data); //kiíratjuk a listaelem cimét és az ott található adatot
  25.         list = list->next; //a következő elemre ugrunk (a következő listaelem, az adott listaelem next adatmezőjével egyezik meg)
  26.     }
  27. }
  28.  
  29. //függvény hátra beszúráshoz
  30. beszurHatra(listelem *list, int data)
  31. {
  32.     while (list->next != NULL) //1.lépés: elmegyünk a listában az utolsó elemig
  33.     {
  34.         list = list->next;
  35.     }
  36.     //printf("%p\n", list);
  37.  
  38.     listelem *uj = (listelem*)malloc(sizeof(listelem));//2.lépés: memóriafoglalás az új elemnek
  39.     uj->next = NULL; //az új elem a lista vége, ezért next eleme nullpointer
  40.     uj->data = data; //beírjuk az adatot
  41.     list->next = uj; //az eredetileg utolsó elem next adatmezőjébe beírjuk az új adat címét
  42. }
  43.  
  44. //függvény lista felszabadításához
  45. void felszabadit(listelem *list)
  46. {
  47.     while (list != NULL)
  48.     {
  49.         listelem *next = list->next; //eltaroljuk kulon valtozoban a kovetkezo elem cimet, hiszen az elso elem torlesevel nem tudnank elerni a lista tobbi elemet
  50.         free(list);
  51.         printf("%p felszabadtva\n", list);
  52.         list = next;
  53.     }
  54. }
  55.  
  56. int main()
  57. {
  58.     //ures lista letrehozasa
  59.     listelem *list1 = (listelem*)malloc(sizeof(listelem)); //lefoglalunk memóriát az első elemnek, az első elem címe a lista kezdőcíme is
  60.     (*list1).next = NULL; //mivel egy egyben az utolsó tag is, ez legyen nullpointer
  61.     list1->data = 0; // (*list1).data ugyan az, mint a list1->data
  62.  
  63.     //beszúrás előre
  64.     list1 = beszurElore(list1, 3); //a visszatérési érték, ami az új elem címe volt, a lista új kezdőcíme lesz
  65.     list1 = beszurElore(list1, 6);
  66.     list1 = beszurElore(list1, 9);
  67.  
  68.     //kiíratás
  69.     kiirat(list1);
  70.     printf("------------------\n");
  71.  
  72.     //beszúrás hátra
  73.     beszurHatra(list1, -3);
  74.     beszurHatra(list1, -6);
  75.     beszurHatra(list1, -9);
  76.  
  77.     //kiíratás
  78.     kiirat(list1);
  79.     printf("------------------\n");
  80.  
  81.     //lista felszabadítása
  82.     felszabadit(list1);
  83.     printf("------------------\n");
  84.  
  85.     //uj ures lista letrehozasa
  86.     //listelem *list2 = (listelem*)malloc(sizeof(listelem)); //lefoglalunk memóriát az első elemnek, az első elem címe a lista kezdőcíme is
  87.     //(*list2).next = NULL; //mivel egy egyben az utolsó tag is, ez legyen nullpointer
  88.  
  89.     listelem *list2 = NULL; //egy teljesen üres lista létrehozása is elég, hiszen a beszurElore fv. szinte felépíti magának a listát
  90.  
  91.     FILE *file; //file pointer létrehozása
  92.     file = fopen("random.txt", "r"); //file megnyitása olvasásra
  93.     if (file == NULL) //hibakezelés
  94.     {
  95.         printf("Hiba a fajl olvasasakor!\n");
  96.         return;
  97.     }
  98.  
  99.     int read;
  100.     while (fscanf(file, "%d", &read) == 1) //amig sikeresen tudunk értéket olvasni, addig fut
  101.     {
  102.         list2 = beszurElore(list2, read); //lista feltöltése    
  103.     }
  104.  
  105.     kiirat(list2);
  106.     printf("------------------\n");
  107.  
  108.     rewind(file); //vissza a file elejére a második olvasáshoz
  109.     listelem *list3 = NULL;
  110.     while (fscanf(file, "%d", &read) == 1) //amig sikeresen tudunk értéket olvasni, addig fut
  111.     {
  112.         if (list3 == NULL)
  113.         {
  114.             listelem *uj = (listelem*)malloc(sizeof(listelem));
  115.             uj->next = NULL;
  116.             uj->data = read;
  117.             list3 = uj;
  118.  
  119.         }
  120.         else
  121.         {
  122.             beszurHatra(list3, read); //lista feltöltése
  123.         }
  124.     }
  125.  
  126.     fclose(file);
  127.  
  128.     kiirat(list3);
  129.     printf("------------------\n");
  130.  
  131.     felszabadit(list2);
  132.     felszabadit(list3);
  133.  
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement