Witam to moja prawie gotowa lista jednokierunkowa mam tylko problem przy wstawianiu bo jak wstawię jakiś element np. 100
to nie mogę dodać elementu większego np 101 może ktoś mi wyjaśnić jaki jest błąd podejrzewam, że w funkcji insert2
#include <iostream>
using namespace std;
struct Wezel
{
float dane;
Wezel *nastepny;
};
Wezel *poczatek=NULL;
void usunpoczatek(Wezel *&poczatek)
{
Wezel *tmp;
tmp=poczatek;
poczatek=tmp->nastepny;
delete tmp;//free(tmp)
}
void usunAll(Wezel *&poczatek)
{
Wezel *tmp;
while(poczatek!=NULL)
{
tmp=poczatek;
poczatek=tmp->nastepny;
delete tmp;
}
}
int szukaj(Wezel *&poczatek,float wartosc)
{
Wezel *tmp;
tmp=poczatek;
while(tmp!=NULL)
{
if(tmp->dane==wartosc)
{
cout<<"jest taki element na liscie\n";system("PAUSE");return 0;
}
tmp=tmp->nastepny;
}
cout<<"nie ma takiego elementu na liscie\n";system("PAUSE");return 0;
return 0;
}
void drukuj(Wezel *poczatek)
{
Wezel *tmp;
tmp=poczatek;
int t=1;
for(tmp;tmp!=NULL;tmp=tmp->nastepny,t++)
{
cout<<"[ "<<tmp->dane<<" ] -";
if(t%8==0)cout<<endl;
}
}
int deletee(Wezel *&head, float x) //zwrócenie wartości ≠ 0 oznacza błąd
{
Wezel *p, *previous;
previous = NULL;
p = head;
if(!p) return(-1); //lista pusta
while(p) {
if(p->dane == x) //znaleziono element o kluczu x
{
if(!previous) //usunięto „czoło listy”
head = p->nastepny;
else previous->nastepny = p->nastepny;//”sklejenie” listy
free(p); //zwolnienie alokowanej pamięci
return(0);
}
if(p->dane > x) return(-1); //nie znaleziono elementu o kluczu x
previous = p; p = previous->nastepny;
}
return(-1); //nie znaleziono elementu o kluczu x
}
int insert2(Wezel *&head,float key)
{
Wezel *p,*prev=NULL,*new_node;
new_node = new Wezel;
if(!new_node)return(-1);
new_node->nastepny=NULL;
new_node->dane=key;
p=head;
if(!p)//lista dotad byla pusta
{
head=new_node;return 0;
}
while(p)
{
if(p->dane==key)return -2;//na liscie jest just element
if(p->dane<key){prev=p;p=prev->nastepny;}
else
{if(!prev)
head=new_node;
else
prev->nastepny=new_node;
}
new_node->nastepny=p;return 0;
}
prev->nastepny=new_node;return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
int zakonczenie=99;
float war;
while(zakonczenie!=1)
{
system("CLS");
cout<<"\nAdam "<<endl;
cout<<"\nlista jednokierunkowa podaj opcje"<<endl;
cout<<"1 koniec programu"<<endl;
cout<<"2 dodanie do listy "<<endl;
cout<<"3 dodanie kilku losowych el. do listy "<<endl;
cout<<"4 usuniecie z listy"<<endl;
cout<<"5 usuniecie kilku poczatkowych el z listy"<<endl;
cout<<"6 szukanie"<<endl;
cout<<"7 czyszczenie listy"<<endl;
drukuj(poczatek);
cout<<"\n: ";
cin>>zakonczenie;
switch(zakonczenie)
{
case(1):
cout<<"koniec programu"<<endl;
system("PAUSE");
return 0;
case(2):
cout<<"jaka wartosc dodac? : ";
cin>>war;
insert2(poczatek,war);
break;
case(3):
cout<<"ile dodac? : ";
cin>>war;
for(int q=0;q<war;q++)
{
insert2(poczatek,(float)(rand()%100));
}
break;
case(4):
if(poczatek==0)
{
cout<<"lista jest pusta\n";system("PAUSE");
}
else
{
cout<<"co chcesz usunac : ";
cin>>war;
deletee(poczatek,war);
}
break;
case(5):
cout<<"ile usunac : ";
cin>>war;
if(!poczatek)
{
cout<<"lista jest pusta\n";system("PAUSE");
}else
{
for(int q=1;q<=war;q++)
{
usunpoczatek(poczatek);
}
}
break;
case(6):
cout<<"co chcesz znalezc : ";
cin>>war;
szukaj(poczatek,war);
break;
case(7):
usunAll(poczatek);
break;
}
}
system("PAUSE");
return 0;
}