/* Launo Tuuri --- C-ohj (Taina) s97 ------ Laskarit 6 Tehtävä 4 */ #include #include #include #define MAXRP 256 struct solmu { struct solmu *seur; char rivi[MAXRP]; }; struct lista { struct solmu *ekasolmu; }; struct lista *perusta_lista() { struct lista *l; l = malloc(sizeof(struct lista)); if (l == NULL) return NULL; l->ekasolmu = NULL; return l; } struct solmu *luo_solmu() /* irrallinen, tyhjäksi alustettu */ { struct solmu *s; s = malloc(sizeof(struct solmu)); if (s == NULL) return NULL; memset(s, 0, sizeof(struct solmu)); return s; } int lisaa_solmu(struct lista *l, struct solmu *s) /* liitä listan alkuun */ { s->seur = l->ekasolmu; l->ekasolmu = s; return 1; } struct solmu *poista_solmu(struct lista *l) { struct solmu *s; s = l->ekasolmu; if (s) l->ekasolmu = l->ekasolmu->seur; return s; } static void rivit_listaan(char *nimi, struct lista *l) { FILE *t; char ri[MAXRP]; struct solmu *s; if (nimi) { if ((t = fopen(nimi, "r")) == NULL) { fprintf(stderr, "Huom: tiedostoa \"%s\" " "ei löytynyt\n", nimi); return; } } while (fgets(ri, MAXRP, nimi?t:stdin)) { s = luo_solmu(); strcpy(s->rivi, ri); lisaa_solmu(l, s); } } static void tulosta_rivit(struct lista *l) { struct solmu *s; for (s=poista_solmu(l); s; s=poista_solmu(l)) { printf("%s", s->rivi); free(s); } free(l); } int main(int argc, char *argv[]) { int i; struct lista *l = perusta_lista(); for (i=1; i