siema!
tworzę program do budowania posortowanej listy oto kod :
#include <stdio.h>
#include <stdlib.h>
struct el
{
struct el *nast;
int klucz;
};
typedef struct el elListy;
typedef elListy *lista;
void new_begin(lista *li,int n)
{
lista nowy=malloc(sizeof(elListy));
nowy->klucz=n;
nowy->nast=(*li);
(*li)=nowy;
}
void new_after(lista *li,int n)
{
lista nowy=(li);
printf("\njestem przed while\n");
if(!nowy->nast)
{
printf("\njestem w 1w\n");
while(n<nowy->klucz )
nowy=nowy->nast;
}
else
while(n<nowy->klucz && n>=nowy->nast->klucz)
{
printf("\njestem w 2 warunku \n");
nowy=nowy->nast;
}
printf("\njestem po while\n");
lista el=malloc(sizeof(elListy));
el->nast=(*li)->nast;
(*li)->nast;
(*li)->nast=el;
el->klucz=n;
//(*li)=nowy;
}
void add_el(lista *li)
{
lista ll = *li;
int spr=1;
while (spr==1)
{
printf("wpisz element do listy: \n");
int buff;
scanf("%d",&buff);
if (!(*li) || (*li)->klucz > buff)
{
printf("\nwszedlem do warunku z new begin\n ");
new_begin(li, buff);
}
else
{
printf("\nwszedlem do warunku z new after \n");
new_after(li,buff);
}
printf("\nwskaznik jest ustawiony na %d\n",(*li)->klucz);
printf("czy chcesz wejsc ponownie? [1/0]");
scanf("%d",&spr);
}
}
void wysw(lista head)
{
if(head!=NULL)
{
printf("%d\n",head->klucz);
wysw(head->nast);
}
}
int main()
{
lista nowa=NULL;
add_el(&nowa);
wysw(nowa);
return 0;
}
wiem kod jest jak jeden wielki bajzel ale na razie chciałbym żeby program działał potem napisze go jeszcze raz. Już nawet zorientowałem się gdzie jest błąd, wydaje mi się że w funkcji
new_after()
w else jest while(n<nowy->klucz && n>=nowy->nast->klucz)
i tu warunek jest zły bo program przeskakuje tylko za pierwszy element listy i w sumie nie wiem jak go zmienić ... jakieś sugestie ? :P będę wdzięczny za pomoc :)