#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?