Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- //listaelemek definiálása egész elemek tárolására
- typedef struct listelem
- {
- int data;
- struct listelem *next;
- }listelem;
- //függvény előre beszúráshoz
- listelem* beszurElore(listelem *list, int data)
- {
- listelem *uj = (listelem*)malloc(sizeof(listelem)); //1.lépés: memóriafoglalás az új elemnek
- 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)
- uj->data = data; //Adatbeírás
- return uj; //3.lépés: visszadjuk az új elem címét, mely a lista új kezdőcíme lesz
- }
- //függvény kiíratáshoz
- void kiirat(listelem *list)
- {
- while (list != NULL) //addig megyünk, amig nem találunk null pointert
- {
- printf("%p\t%d\n", list, list->data); //kiíratjuk a listaelem cimét és az ott található adatot
- list = list->next; //a következő elemre ugrunk (a következő listaelem, az adott listaelem next adatmezőjével egyezik meg)
- }
- }
- //függvény hátra beszúráshoz
- beszurHatra(listelem *list, int data)
- {
- while (list->next != NULL) //1.lépés: elmegyünk a listában az utolsó elemig
- {
- list = list->next;
- }
- //printf("%p\n", list);
- listelem *uj = (listelem*)malloc(sizeof(listelem));//2.lépés: memóriafoglalás az új elemnek
- uj->next = NULL; //az új elem a lista vége, ezért next eleme nullpointer
- uj->data = data; //beírjuk az adatot
- list->next = uj; //az eredetileg utolsó elem next adatmezőjébe beírjuk az új adat címét
- }
- //függvény lista felszabadításához
- void felszabadit(listelem *list)
- {
- while (list != NULL)
- {
- listelem *next = list->next; //eltaroljuk kulon valtozoban a kovetkezo elem cimet, hiszen az elso elem torlesevel nem tudnank elerni a lista tobbi elemet
- free(list);
- printf("%p felszabadtva\n", list);
- list = next;
- }
- }
- int main()
- {
- //ures lista letrehozasa
- listelem *list1 = (listelem*)malloc(sizeof(listelem)); //lefoglalunk memóriát az első elemnek, az első elem címe a lista kezdőcíme is
- (*list1).next = NULL; //mivel egy egyben az utolsó tag is, ez legyen nullpointer
- list1->data = 0; // (*list1).data ugyan az, mint a list1->data
- //beszúrás előre
- list1 = beszurElore(list1, 3); //a visszatérési érték, ami az új elem címe volt, a lista új kezdőcíme lesz
- list1 = beszurElore(list1, 6);
- list1 = beszurElore(list1, 9);
- //kiíratás
- kiirat(list1);
- printf("------------------\n");
- //beszúrás hátra
- beszurHatra(list1, -3);
- beszurHatra(list1, -6);
- beszurHatra(list1, -9);
- //kiíratás
- kiirat(list1);
- printf("------------------\n");
- //lista felszabadítása
- felszabadit(list1);
- printf("------------------\n");
- //uj ures lista letrehozasa
- //listelem *list2 = (listelem*)malloc(sizeof(listelem)); //lefoglalunk memóriát az első elemnek, az első elem címe a lista kezdőcíme is
- //(*list2).next = NULL; //mivel egy egyben az utolsó tag is, ez legyen nullpointer
- 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
- FILE *file; //file pointer létrehozása
- file = fopen("random.txt", "r"); //file megnyitása olvasásra
- if (file == NULL) //hibakezelés
- {
- printf("Hiba a fajl olvasasakor!\n");
- return;
- }
- int read;
- while (fscanf(file, "%d", &read) == 1) //amig sikeresen tudunk értéket olvasni, addig fut
- {
- list2 = beszurElore(list2, read); //lista feltöltése
- }
- kiirat(list2);
- printf("------------------\n");
- rewind(file); //vissza a file elejére a második olvasáshoz
- listelem *list3 = NULL;
- while (fscanf(file, "%d", &read) == 1) //amig sikeresen tudunk értéket olvasni, addig fut
- {
- if (list3 == NULL)
- {
- listelem *uj = (listelem*)malloc(sizeof(listelem));
- uj->next = NULL;
- uj->data = read;
- list3 = uj;
- }
- else
- {
- beszurHatra(list3, read); //lista feltöltése
- }
- }
- fclose(file);
- kiirat(list3);
- printf("------------------\n");
- felszabadit(list2);
- felszabadit(list3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement