[C] Lista osób

0

Witam. Mam zamiar zrobić program w którym będę wykorzystywał jednokierunkową listę osób. Mam strukturę opisującą osobę, procedurę dodawania, ale nie wiem jak zrobić procedurę do usuwania pojedynczej osoby. Oto co mam zrobione:


typedef struct person {
	struct person *next;
	char name[50];
	char surname[50];
} person;

void addPerson (person *list, char personName[50], char personSurname[50]) {
	person *new, *current;
	current=list;
	if (current != NULL) {
		while (current != NULL) {
			current=current->next;
		}
		new=malloc(sizeof(person));
		strcpy(new->name, personName);
		strcpy(new->surname, personSurname);
		new->next=NULL;
		current->next=new;
	}
	else {
		new=malloc(sizeof(person));
		strcpy(new->name, personName);
		strcpy(new->surname, personSurname);
		new->next=NULL;
		current=new;
	
	}
}

Może mi ktoś powiedzieć czy to jest dobrze zrobione i pomóc przy napisaniu procedury do usuwania dowolnej osoby? Z góry dzięki za pomoc:)

0

Podstawowy błąd. Zasada jednej odpowiedzialności! ;) Pownieneć mieć 3, osobne, niezależne struktury:

  • osoba
  • węzeł
  • lista
    Osoba to jest struktura przechowujaca dane struktury, powinieneś do niej dopisać funkcję ustawiającą dane osoby
    Węzeł to struktura węzła listy czyli mniej wiecej
struct Wezel
{
  Osoba janek;
  Wezel* next;
};

Lista to struktura przechowująca dane o konkretnej liście, czyli np.

struct Lista
{
  Wezel* top;
  //Wezel* bottom;
};

W ten sposób redukujesz złożoność problemu poprzez dekompozycje.
Poza tym zastanów się jaka to ma być lista: FIFO, LIFO? Ogólnie do listy jednokierunkowe dodaje się i usuwa z początku (LIFO), a jak dodasz sobie wskaźnik także na koniec listy to mozesz łatwo napisać wersję dodającą na koniec i zdejmujacą z początku (FIFO).

0

To co Ci napisal Shalom, to cos w stylu takiego obiektowego podejscia do C, bo ta zasada o ile mnie pamiec nie myli dotyczy w pewien sposob klas, a to ze struktury sa taka namiastka klas, to tez mozna brac tu pod uwage...

z drugiej strony wiele ksiazek do C, posiada w rozdziale o abstrakcyjnych typach danych podobne implementacje takich programow, wiec mysle ze mozesz to w ten sposob implementowac, za pomoca jednej struktury...

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