Usuwanie elementu z listy, poprzez wartość.

0

Cześć,
mam problem z funkcją usuwającą element z listy poprzez jego wartość, a nie indeks. Oto mój nie działający kod

struct Lista
{
  Lista * next;
  int klucz;
};


class taLista
{
  private:

    Lista * poczatek, * koniec;
    unsigned licznik;

(...........)

Lista * usun_element(Lista * p, int k)
{
	p = poczatek;
	while (p != NULL){
		if (p->klucz == k)
			p->next = p;
        }
       return p;
}
1
  1. Nazywaj zmienne wyłacznie po angielsku (mieszanie języków nazywania zmiennych to chyba jeszcze gorszy pomysł niż same polskie).
void taLista::usun_wartosci(int klucz)
  {
   for(Lista **i=&poczatek;*i;)
     {
      Lista *current=*i;
      if(current->klucz==klucz)
        {
         *i=current->next;
         delete current;
        }
      else i=&(current->next);
     }
   if(!poczatek) koniec=0;
  }
0

Mam jeszcze problem z wyszukiwaniem (ma tylko zwracać TAK/NIE jak liczba jest na liście albo jej nie ma), oto mój kod:

Lista * wyszukaj (Lista * p1)
	{
		Lista * p;
		p = poczatek;
		int i = 0;
		while (p){
			if (p->klucz == p1->klucz)
				i++;
		}
		if (i>0)
			cout<<"TAK";
		else cout<<"NIE";
		return p;
	} 

Wywołanie:

p = new Lista;
  p->klucz = 2;
  sl.wyszukaj(p); 
1

Czy rozumiesz różnicę pomiędzy zwrócić a wyświetlić?

Lista *wyszukaj(Lista *p,int klucz)
  {
   while((p)&&(p->klucz!=klucz)) p=p->next;
   return p;
  }

cout<<(s1.wyszukaj(2)?"TAK":"NIE")<<endl;
0

Trochę ten kod zmodyfikowałem, bo w poprzedniej wersji nie do końca działał:

        Lista *wyszukaj(int klucz)
	{
		Lista *p;
		p=poczatek;
		while((p) && (p->klucz!=klucz)) 
			p=p->next;
		return p;
	} 

Dziękuję bardzo za pomoc :)

0

Mam jeszcze problem z wstawieniem nowego elementu do tablicy na jej końcu, oto mój kod:

void nowy_koniec(int wartosc)
	{
		if (rozm == 0)
		{
			rozm++;
			tab = new int[rozm];
			tab [0] = wartosc;
		}
		
		else
		{
			int *temp = new int [rozm];
			for (int i=0; i<rozm; i++)
				temp[i] = tab[i];
			rozm++;
			tab = new int[rozm];
			for (int i=0; i<rozm-1; i++)
				tab[i]=temp[i];
			tab[rozm] = wartosc;
			delete []temp;
		}
	}

Wpisuje mi pierwszą wartość poprawnie, a następnie nie poprawną, ale na wszystkich pozycjach tę samą.

0

Wybacz, nie chciałem tworzyć nowego temat. Mógłby mi ktoś pomóc znaleźć błąd w moim kodzie?

0

Po pierwsze, pytanie nie ma nic wspólnego z wątkiem, to że ci się nie chciało zakładać wątek - nie jest usprawiedliweniem.
Po drugie, jest to jeden wielki błąd powodujący między innymi wycieki pamięci.
Po trzecie, w linku masz przykład jak należy to rozwiązać.

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