Problem mit Listenelement am Ende einfügen in C

rse7en

Grünschnabel
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


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;
	}
}
 
Ich verstehe nicht, warum sich die Leute (meist Anfänger) immer mit verketteten Listen rumplagen, wissen sie es nicht besser, wird ihnen gesagt, dass sie es so machen sollen oder sind sie masochistisch veranlagt?
Warum nehmen ihr kein Array? Das hätte auch gleich den Vorteil, es einfach ohne Zeigerauflösungen persistent zu machen.
 
und ich frage mich immer wieso solche leute wie du immer so nen müll von sich geben müssen .. yeah hab nem anfänger ma meine meinung gesagt .. "Du Held"

Hab das Problem lösen können ...

bis denn
 
Warum nehmen ihr kein Array?

Weil ein Array vielleicht nicht das Gleiche ist wie eine Liste?

Stell dir ein Array mit 1000000 Elementen vor und du willst nach dem ersten eines noch dazu einfügen...
viel Spaß mit dem Umschichten von 999999 Elementen, das geht wirklich schön performant.

Macht euch nicht gegenseitig runter, das Problem hat sich sowieso schon erledigt.
 
Zurück