Wyszukanie elementu w liście dwukierunkowej.

Wyszukanie elementu w liście dwukierunkowej.
Syrozudo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Witam. Napisałem taką funkcję :

Kopiuj
 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 :

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

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

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

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
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

Syrozudo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Jest problem dokładnie w tej linijce :

Kopiuj
  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..

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
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

Syrozudo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

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

Kopiuj
 
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;
};

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.