Wyszukanie elementu w liście dwukierunkowej.

0

Witam. Napisałem taką funkcję :

 int check(struct el* head, int a)
{
	int status=0;
	 struct el* temp;
   temp=head->next;
   while (temp!=head && temp->key!=a)
      temp=temp->next;
   if(temp->key==a)
	 status=1;
   else
	  status=0;
   return status;
};

Która ma sprawdzić, czy dany klucz, nie znajduje się w mojej liście dwukierunkowej cyklicznej, zanim go utworzy.
Deklaracja dodawania elementu :

void add(struct el* &head, struct el* &tail, int y)
{
	if(check(head, y)==1)
	cout << "\n Sorry, but key y exists, cant create it again\n";
	else
	{ //tu tworzy się już element bez problemu, pod warunkiem, ze dany element nie istnieje
} 
}

Mógłby ktoś powiedzieć, co ominąłem?

0

wygląda jakby było wszystko ok... można co najwyżej wywalić struct, niepotrzebnego else'a oraz zamienić status na bool

0

Raczej powinieneś sprawdzić czy nie doszedłeś na koniec listy, a nie początek...

1

on nie sprawdza początku listy na początku tylko zaczyna od 2 elementu dlatego musi sprawdzać czy nie doszedł znowu dla pierwszego. Inaczej nie sprawdzi pierwszego elementu

0

Jest problem dokładnie w tej linijce :

  int check(struct el* head, int a)
{
    
   temp=head->next;

Błąd gdybym operował źle po pamięci, może coś z wskaźnikami pomieszałem?
Co to boola itp, to rozbiłem go już na najłatwiejszą opcję, żeby znaleŹć błąd, stąd taka konstrukcja..

0

no ciekawe... zaczynasz od drugiego elementu... jeśli faktycznie zapętliłeś to nie powinno być problemu bo głowa wskazuje na następny element lub samą siebie

0

Ok juz naprawiłem, działa w taki sposób :

 
int check(struct el* head, struct el* tail, int a)
{
	int status=0;
	 struct el* temp;
	 if(head==NULL)
		 status=0;
	 else if(head!=NULL && tail==NULL)
	 {
		 if(head->key==a)
			 status=1;
	 }
	 else if(head!=NULL && tail!=NULL)
	 {
   temp=(head->next);
   while (temp!=head)
   {
      if(temp->key==a)
	  {
	 status=1;
	 break;
	  }
   else
	  temp=(temp->next);
   }
	 }
   return status;
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1