Proszę o ocenę listy jednokierunkowej, czy jest dobrze zaimplementowana

0

Witam,
Tak jak w temacie proszę o ocenę kodu źródłowego. Z góry dziękuję za poświęcony czas.

struct Lista
{
	Lista *next;
	float data;
};

Lista *DodajL(Lista *L, float wartosc)
{
	if (L == NULL)
	{
		L = (Lista*)malloc(sizeof(Lista));
		L->data = wartosc;
		L->next = 0;
	}
	else
	{
		Lista *nl = (Lista*)malloc(sizeof(Lista));
		nl->data = wartosc;
		nl->next = 0;

		while (L->next != 0) L = L->next;
		L->next = nl;
		return nl;
	}
	return L;
}

int LicznikEl(Lista *L)
{
	if (L != 0)
	{
		int licznik = 1;
		while (L->next != 0)
		{
			licznik++;
			L = L->next;
		}
		return licznik;
	}
	else  return 0;
}

Lista *Nastepny(Lista *L)
{
	return L->next;
}

float Odczytaj(Lista *L)
{
	return L->data;
}

void ZwolniListe(Lista *L)
{
	if (L != 0)
	{
		while (L->next != 0)
		{
			Lista *dl = L;
			L = L->next;
			free(dl);
		}
		free(L);
	}
}
0

Kod bardzo ładny.
Ale czy działa nie pytaj kolegów, nauczyciela czy obcych ludzi na forum tylko napisz testy jednostkowe.

Nie jeden. Wszystkie. Przy tej ilości kodu nie powinno być z tym problemu.

0

pytanie jak napisać test jednostkowy ?

0

W uproszczeniu, pseudo-kod:

#include <assert.h>

void testDodaj1() {
  Lista *head;
  head = DodajL(NULL, 12.3f);
  assert(head != NULL);
  ZwolniListe(head);
}

main() {
  testDodaj1();    
}

Więcej o assert: https://pl.wikibooks.org/wiki/C/assert

0

Ja bym zamiast przyrównywać next cały czas do 0, używałbym NULL.

0

Możesz nawet przejść przez dane funkcje za pomocą GDB.

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