Oktatás * Programozás 2 * Szkriptnyelvek * levelezősök Félévek Linkek * kalendárium |
C /
verem megvalósítása szétszórt ábrázolással
Vermet nagyon egyszerűen tudunk láncolt listával megvalósítani. A fejmutató mindig a verem tetején lévő elemre mutat, így az új elemet a lista elejére szúrjuk be, a verem tetején lévő elemet pedig a lista elejéről vesszük ki. #include <stdio.h> #include <stdlib.h> typedef struct listaelem { int adat; struct listaelem *kov; } LISTAELEM; LISTAELEM *fej = NULL; /* ************************************* */ // üres-e a verem int empty() { return (fej == NULL); } // elem betétele void push(int szam) { LISTAELEM *uj = (LISTAELEM *)malloc(sizeof(LISTAELEM)); uj->adat = szam; uj->kov = fej; fej = uj; } // visszaadja a verem tetején lévő elem értékét ÉS ki is veszi ezt az elemet a veremből int pop() { if (empty()) { // a feladattól függ, hogy egy ilyen esetet hogyan kezelünk le fprintf(stderr, "Hiba: üres a verem!"); return -1; } // else, not empty int eredmeny = fej->adat; LISTAELEM *akt = fej; fej = fej->kov; free(akt); return eredmeny; } 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 verembe */ for (i = 0; i < meret; ++i) { push(tomb[i]); } /* kivétel a veremből */ puts("a verem elemei:"); while (!empty()) // amíg nem üres, addig veszegetünk ki { printf("%d\n", pop()); // elem kivétele } return 0; } A fenti program a köv. kimenetet produkálja: beszúrandó elemek: 1 8 5 9 2 3 4 9 a verem elemei: 9 4 3 2 9 5 8 1 |
Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |