Tagchen liebe Community
wie der Titel schon sagt habt ich Probleme ein Listenelement am ende einer liste einzufügen. Ich kann zwar die Eingabe machen sehe bei der Ausgabe aber bei 2 - Listenelementen nur das zuletzt eingegebene. Die Funktion um am Ende einzufügen heißt
"insert_ende" die fkt. für vorne einfügen "insert_vorne" Wobei das Einfügen vorne Wunderbar klappt.
Würde mich um paar nützliche Tips freuen und bedanke mich im voraus.
greetz
wie der Titel schon sagt habt ich Probleme ein Listenelement am ende einer liste einzufügen. Ich kann zwar die Eingabe machen sehe bei der Ausgabe aber bei 2 - Listenelementen nur das zuletzt eingegebene. Die Funktion um am Ende einzufügen heißt
"insert_ende" die fkt. für vorne einfügen "insert_vorne" Wobei das Einfügen vorne Wunderbar klappt.
Würde mich um paar nützliche Tips freuen und bedanke mich im voraus.
greetz
Code:
/****** Header Datei******/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXL 30
//Strukturdefinition zum Verwalten von Artikeln
struct artikel
{
char artikelname[MAXL];
int artikelnummer;
int preis;
};
/*Deffiniton des Knoten mit dem Zeiger
auf den nächsten Knoten*/
struct knoten
{
struct artikel daten;
struct knoten *next;
};
/*Speicher für den neuen Knoten anfordern.
Funktion gibt Zeiger auf die Speicherstelle zurück
vom Typ der Struktur*/
struct knoten *alloc_knoten(void);
struct knoten *insert_vorne(struct knoten *first);
struct knoten *insert_ende(struct knoten *first);
//Ein und Ausgabefkt.
int eingabe(struct knoten *ein);
void ausgabe(struct knoten *aus);
/*****MAIN********/
#include "artikel.h"
int main()
{
struct knoten *first = NULL,*ende = NULL; //Anker od. Head od. Listenkopf oder auch first :))
int auswahl;
do
{
printf("1. Vorne eiketten\n");
printf("2. Am Ende Einketten\n");
printf("3. Ausgabe vorne einketten\n");
printf("4. Ausgabe ende einketten\n");
printf("5. Programm beenden\n");
scanf("%d", &auswahl);
fflush(stdin);
switch(auswahl)
{
case 1:
printf("Sie moechten am Beginn einketten\n");
first = insert_vorne(first);
eingabe(first);
break;
case 2:
printf("Sie möchten am Ende einketten\n");
ende = insert_ende(ende);
eingabe(ende);
break;
case 3:
printf("Ausgabe vornde\n");
ausgabe(first);
break;
case 4:
printf("Ausgabe ende \n");
ausgabe(ende);
break;
case 5:
exit(3);
}
}while(auswahl < 5);
/******* FUNC.C********/
#include"artikel.h"
struct knoten *alloc_knoten()
{
struct knoten *neu;
neu = (struct knoten*)malloc(sizeof(struct knoten));
if(!neu)
{
puts("No Memory\n");
exit(2);
}
neu->next = NULL;
return neu;
}
struct knoten *insert_vorne(struct knoten *first)
{
struct knoten *neu ;
neu = (struct knoten*)malloc(sizeof(struct knoten));
if(!neu)
{
puts("No Memory\n");
exit(2);
}
neu->next = first;
first = neu;
return neu;
}
struct knoten *insert_ende(struct knoten *first)
{
struct knoten *neu = alloc_knoten(),*lauf = NULL;
if(!neu)
{
puts("No Memory\n");
exit(4);
}
neu->next = first;
first = neu;
lauf = first;
while(lauf != NULL && lauf->next != NULL)
lauf = lauf->next;
if(lauf != neu)
lauf->next = neu;
else
first = neu;
neu->next = NULL;
return neu;
}
int eingabe(struct knoten *ein)
{
printf("Artikelname :\n");
scanf("%s",ein->daten.artikelname);
fflush(stdin);
printf("Artikelnummer :\n");
scanf("%d",&ein->daten.artikelnummer);
fflush(stdin);
printf("Artikelpreis :\n");
scanf("%d",&ein->daten.preis);
fflush(stdin);
return ein->daten.artikelnummer;
}
void ausgabe(struct knoten *aus)
{
printf("ARTIKELBESTAND\n");
while(aus)
{
printf("Artikelname %s :\n", aus->daten.artikelname);
printf("Artikelnummer %d :\n", aus->daten.artikelnummer);
printf("Artikelpreis %d :\n", aus->daten.preis);
aus = aus->next;
}
}