Lista jednokierunkowa - szukanie osoby z listy i usuwanie poszczególnych elementów.

0

Mam taki kod uzupełniony podczas wykonywania zadania domowego: zostały mi 2 funkcje do uzupełnienia:

ZAD 5: Przeanalizuj funkcję: "SzukajOsobe()"
Następnie uzupełnij funkcję: PERSON *FindByName(char *first, char *last), która będzie zwracała pozycję na liście osoby o przekazanym imieniu i nazwisku. Jeżeli osoba nie istnieje , to funkcja ma zwrócić wartość zero (NULL).

ZAD 6: Przeanalizuj funkcję: "UsunOsobe()". Następnie uzupełnij funkcję: void Delete(PERSON *element), tak aby kasowała wskazany element listy. Należy rozważyć dwa przypadki, jeżeli jest usuwany pierwszy element listy i dowolny inny.

Header.h: http://wklej.org/id/1596508/
Source.cpp: http://wklej.org/id/1596507/

Jak mają wyglądać te funkcje? Zwracała pozycję na liście osoby, czyli mam skombinować licznik i zaczynając od początku zliczać? Jak usuwać wskazane elementy i pierwszy?

Jak uzupełnić te szukanie osoby, bo obecnie nie działa, nie wiem dlaczego biorę na początku pierwszą osobę, porównuje, zaś biorę kolejne jeśli nie są sobie równe przechodzę do następnych, jeśli w liście jej nie ma powinno zwracać NULL, a program crashuje.

@Edit

Kod wygląda tak, ale nie działa, bo zawsze jest zwracany 1 element:

PERSON *FindByName(char *first, char* last)
{
    //uzupelnic - zadanie 5
    int licznik = 1;
    GetFirst();
 
    while (strcmp(current->FirstName,first) == 1 && strcmp(current->LastName, last) == 1 && current->Next!=NULL);
    {
        GetNext();
        licznik++;
    }
 
 
    if (current->Next == NULL) return NULL;
    else  return current;
 
}

Wiem, że często mi pomagacie, ale moglibyście mi pomóc tak szybciej, bo mam jutro kolokwium i będę walczył o przepis z egzaminu i chcę już zająć się tylko liczeniem. A zadanie muszę wysłać wykładowcy dziś.

0

Skąd pochodzi ten bubel co masz w załączniku?

0
_13th_Dragon napisał(a):

Skąd pochodzi ten bubel co masz w załączniku?

A dokładniej:P? Chodzi Ci o cały kod czy tą funkcję?

Teraz wygląda tak:

PERSON *FindByName(char *first, char* last)
{
	//uzupelnic - zadanie 5
	int licznik = 1;
	GetFirst();

	while (current->Next != NULL && (strcmp(current->FirstName, first) != 0 || strcmp(current->LastName, last) != 0)) ;
	{
		GetNext();
		licznik++;

		 
		if (strcmp(current->FirstName, first) == 0 || strcmp(current->LastName, last) == 0) return current;
		else return NULL;
	} 

	
	
}

I nadal nie wiedzieć czemu nie działa.

0

Chodzi mi o całość dołączona jako załączniki:

Header.h: http://wklej.org/id/1596508/
Source.cpp: http://wklej.org/id/1596507/
to kompletne badziewie poczynając od projektu.

0

Ten Twój kod:

while (strcmp(current->FirstName,first) == 1 && strcmp(current->LastName, last) == 1 && current->Next!=NULL);
{
     GetNext();
     licznik++;
}

jest równoważny:

while (strcmp(current->FirstName,first) == 1 && strcmp(current->LastName, last) == 1 && current->Next!=NULL)
{}
    
GetNext();
licznik++;

z powodu średnika na końcu linijki z while.

0
twonek napisał(a):

Ten Twój kod:
z powodu średnika na końcu linijki z while.

Wiem, a teraz jak zrobić usuwanie, chciałem się przesuwać od początku listy dopóki wskaźnik next nie będzie pokazywał na element i wtedy podmienić Next na element->next jak to praktycznie zrobić, mam tak na razie.

void Delete(PERSON *element)
{
	GetFirst();

	while (current->Next != element)
	{
		GetNext();
	}
	
}

Tak to powinno wyglądać: ????

void Delete(PERSON *element)
{
	GetFirst();

	while (current->Next != element)
	{
		GetNext();
	}
	
	current->Next = element->Next;
	delete element;
}

PS: Chyba działa, bo jak usunąłem i próbowałem wyszukać to nie znalazło, tylko nie wiem czy dobrze przypisuje te wskaźniki:D?

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