Oktatás * Programozás 2 * Szkriptnyelvek * levelezősök Félévek Linkek * kalendárium |
C /
beszúrás a lista végére #1
A láncolt listát a végén bővítjük. Itt most csak egyetlen fejmutatót használunk, így bővítéskor mindig meg kell keresni a lista végét, ill. ugyanígy kell eljárnunk az utolsó elem törlésekor is. #include <stdio.h> #include <stdlib.h> typedef struct listaelem { int adat; struct listaelem *kov; } LISTAELEM; LISTAELEM *fej = NULL; /* ************************************* */ void vegere_beszur(int szam) { LISTAELEM *akt = fej; LISTAELEM *uj = (LISTAELEM *)malloc(sizeof(LISTAELEM)); uj->adat = szam; uj->kov = NULL; if (fej == NULL) { fej = uj; } else { while (akt->kov != NULL) { akt = akt->kov; } akt->kov = uj; } } void utolso_torles() { LISTAELEM *elozo = NULL; LISTAELEM *akt = fej; if (fej == NULL) { return; /* a lanc ures */ } /* else */ while (akt->kov != NULL) { elozo = akt; akt = akt->kov; } if (elozo == NULL) /* egyelemu */ { free(akt); fej = NULL; } else { free(akt); elozo->kov = NULL; } } void bejar(LISTAELEM *fej) { LISTAELEM *akt = fej; while (akt != NULL) { printf("%d, ", akt->adat); akt = akt->kov; } printf("\n"); } int main() { int tomb[] = {1, 8, 5, 9, 2, 3, 4, 9}; int meret = sizeof(tomb) / sizeof(int); int i; /* tömb elemei */ printf("beszúrandó elemek: "); for (i = 0; i < meret; ++i) { printf("%d ", tomb[i]); } printf("\n"); /* elemek beszúrása a lista végére */ for (i = 0; i < meret; ++i) { vegere_beszur(tomb[i]); } /* a listát a végén bővítettük, így az elemek sorrendje megmaradt */ printf("a lista elemei: "); bejar(fej); /* utolsó elem törlése */ puts("# utolsó elem törlése"); utolso_torles(); printf("a lista elemei: "); bejar(fej); return 0; } A fenti program a köv. kimenetet produkálja: beszúrandó elemek: 1 8 5 9 2 3 4 9 a lista elemei: 1, 8, 5, 9, 2, 3, 4, 9, # utolsó elem törlése a lista elemei: 1, 8, 5, 9, 2, 3, 4, |
Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |