/***************************************************************/ /* Prof. Dr. Carsten Vogt */ /* FH Koeln, Fak. 07 / Nachrichtentechnik */ /* http://www.nt.fh-koeln.de/vogt */ /* */ /* Loesung der Uebungsaufgabe Kapitel 8, Nr. 1 */ /* aus "C fuer Java-Programmierer", Hanser-Verlag */ /***************************************************************/ #include typedef struct listenknoten { int wert; struct listenknoten *next; } listenknoten; int einfuegen_kopf(listenknoten **kopf, listenknoten *einzufueg) { if ((einzufueg==NULL)||(kopf==NULL)) return -1; einzufueg->next = *kopf; *kopf = einzufueg; return 0; } /* Loesungsfunktion hier: */ int einfuegen_nter_eintrag(listenknoten **kopf, listenknoten *einzufueg, unsigned int n) { listenknoten *laufzeiger; int i; if (n==0) return einfuegen_kopf(kopf,einzufueg); laufzeiger = *kopf; if (laufzeiger==NULL) return -1; for (i=0;inext; if (laufzeiger==NULL) return -1; } einzufueg->next = laufzeiger->next; laufzeiger->next = einzufueg; return 0; } /* Ende der Loesungsfunktion */ void durchlaufen(listenknoten *kopf) { listenknoten *laufzeiger; laufzeiger = kopf; printf("-------------\n"); while (laufzeiger!=NULL) { printf("%d ",laufzeiger->wert); laufzeiger = laufzeiger->next; } printf("ENDE\n-------------\n\n"); } int main(void) { listenknoten *kopf = NULL; listenknoten *neu; int wahl, neuer_wert, errcode; unsigned int pos; do { do { printf("\nBitte Funktion auswaehlen:\n\n"); printf("( 1 ) Listeninhalt ausgeben\n"); printf("( 2 ) Eintrag einfuegen\n"); printf("( 0 ) Programmende\n"); scanf("%d",&wahl); } while (wahl<0 || wahl>2); printf("\n"); switch(wahl) { case 1: durchlaufen(kopf); break; case 2: printf("Wert des neuen Eintrags: "); scanf("%d",&neuer_wert); neu = (listenknoten *) malloc(sizeof(listenknoten)); neu->wert = neuer_wert; neu->next = NULL; printf("Position des Eintrags, nach dem der neue Eintrag eingefuegt werden soll: "); scanf("%u",&pos); errcode = einfuegen_nter_eintrag(&kopf,neu,pos); if (errcode==-1) printf("Fehler beim Einfuegen\n\n"); break; } } while (wahl!=0); return 0; }