#include <stdio.h>
#include <stdlib.h>
struct element
{
int nummer;
struct element *next;
};
struct element *sort_hinzufuegen(struct element *first, int i)
{
struct element *akt_el1, *akt_el2;
if(first==NULL)
{
first=(struct element*) malloc(sizeof(struct element));
first->nummer=i;
first->next=NULL;
return first;
}
else
{
akt_el1=first;
while(akt_el1!=NULL && akt_el1->nummer<i)
akt_el1=akt_el1->next;
if(akt_el1==NULL)
{
akt_el1=(struct element*) malloc(sizeof(struct element));
akt_el1->nummer=i;
akt_el1->next=NULL;
return first;
}
else if(akt_el1==first)
{
first=(struct element*) malloc(sizeof(struct element));
first->nummer=i;
first->next=akt_el1;
return first;
}
else
{
akt_el2=first;
while(akt_el2->next!=akt_el1)
akt_el2=akt_el2->next;
akt_el1=(struct element*) malloc (sizeof(struct element));
akt_el1->nummer=i;
akt_el1->next=akt_el2->next;
akt_el2->next=akt_el1;
return first;
}
}
}
void ausgeben(struct element *first)
{
while (first!=NULL)
{
printf("%i ", first->nummer);
first=first->next;
}
printf("\n");
}
int main()
{
struct element *first=NULL;
first= sort_hinzufuegen(first, 4);
first= sort_hinzufuegen(first, 6);
first= sort_hinzufuegen(first, 1);
first= sort_hinzufuegen(first, 4);
first= sort_hinzufuegen(first, 6);
first= sort_hinzufuegen(first, 20);
first= sort_hinzufuegen(first, 2);
first= sort_hinzufuegen(first, 55);
first= sort_hinzufuegen(first, 3);
ausgeben(first);
return 0;
}
################################################################
Habe Probleme mit der Ausgabe von bestimmten Zahlen:
Er gibt in folgendem Beispiel zwar die Zahlen in richtiger Reihenfolge
aus:
1 2 3 4 4
aber die folgenden Zahlen 6 6 30 55 werden nicht ausgegeben.
Es handelt sich bei folgendem Programm um eine sortierte Eingabe von
Zahlen in eine Liste + Ausgabe der Liste.
Wieso werden die Zahlen 6 6 30 55 nicht ausgegeben???
################################################################
> Der Fehler dürfte hier liegen:> if(akt_el1==NULL)> {> akt_el1=(struct element*) malloc(sizeof(struct element));> akt_el1->nummer=i;> akt_el1->next=NULL;> return first;> }>> Du erzeugst hier ein neues Element, hängst das aber nie in die Liste> ein.
Versteh ich nicht ganz:
Das Element wird doch am Ende der Liste eingefügt und dann der NULL -
Zeiger angefügt...
Wenn ich als erstes Element in der Liste 70 anfüge, dann werden alle
ausgegeben. Das erste Element ist größer als alle anderen und es werden
die Zahlen 0-70 ausgegeben. Warum? Sobald ich 71 eingebe wird es nicht
mehr angefügt.
>Das Element wird doch am Ende der Liste eingefügt und dann der NULL ->Zeiger angefügt...
Durch welche Anweisung genau wird denn das neue Element an das Ende der
Liste eingefügt?
Eine eigene Frage?
Dieser Thread ist über 15 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.