/* Launo Tuuri --- C-ohj (Taina) s97 ------ Laskarit 6 Tehtävä 2 */ #include #include #include struct solmu { struct solmu *edell; struct solmu *seur; int tieto; }; struct lista { struct solmu *eka; struct solmu *vika; int alkm; }; struct lista *perusta_lista() { struct lista *l; l = malloc(sizeof(struct lista)); if (l == NULL) return NULL; l->eka = NULL; l->vika = NULL; l->alkm = 0; return l; } struct solmu *luo_solmu(int arvo) /* irrallinen, mutta talleta tieto */ { struct solmu *s; s = malloc(sizeof(struct solmu)); if (s == NULL) return NULL; memset(s, 0, sizeof(struct solmu)); s->tieto = arvo; return s; } int lisaa_solmu(struct lista *l, struct solmu *s) /* liitä listan alkuun */ { if (l->vika == NULL) l->vika = s; s->seur = l->eka; l->eka = s; ++l->alkm; return 1; } struct solmu *poista_solmu(struct lista *l) { struct solmu *s; s = l->eka; if (s) { l->eka = s->seur; --l->alkm; if (l->eka) l->eka->edell = NULL; else l->vika = NULL; } return s; } int main() { int i; struct lista *kl; struct solmu *ks, *kst[10], *si; kl = perusta_lista(); ks = luo_solmu(3); if (lisaa_solmu(kl, ks)) printf("eka %d vika %d alkioita %d\n", kl->eka->tieto, kl->vika->tieto, kl->alkm); for (i=0; i<10; ++i) { kst[i] = luo_solmu(i); lisaa_solmu(kl, kst[i]); } for (si=kl->eka; si; si=si->seur) printf("%d ", si->tieto); putchar(10); for (i=0; i<5; ++i) { ks = poista_solmu(kl); printf("%d ", ks->tieto); free(ks); } putchar(10); for (si=kl->eka; si; si=si->seur) printf("%d ", si->tieto); printf("- eka %d vika %d alkioita %d\n", kl->eka->tieto, kl->vika->tieto, kl->alkm); return 0; }