Mam do wykonania programik, który będzie miał takie opcje :
* wstawianie osoby o podanych atrybutach do listy
* usuwanie osoby o podanym indeksie
* usuwanie osoby o podanym imieniu-i-nazwisku
* wyświetlanie osoby o podanym indeksie
* wyświetlanie całej listy
Dane mają być pobierane z klawiatury.
* Wstawianie polega na zaalokowaniu struktury na stercie i zainicjowaniu jej odpowiednią funkcją.
* Wypisywanie ma być zrealizowane rekurencyjnie
* Usuwanie również ma być rekurencyjne (uwaga: lista jest jednokierunkowa!).
#include "stdlib.h"
#include "string.h"
typedef struct Osoba{
char imie[10];
char nazwisko[10];
char plec[10];
int wiek;
struct Osoba * next;
} el_listy;
void PokazListe(el_listy * head){
printf("\nLISTA: \n");
el_listy *p;
p = head;
while( p != NULL) {
printf("[%10s %10s %d]\n",p->imie,p->nazwisko,p->plec, p-> wiek);
printf(" ^\n");
printf(" |\n");
p = p->next;
}
printf(" NULL\n\n");
}
void DodajOsobe(const char *imie, const char *nazwisko, const char *plec, int wiek, el_listy ** head){
if(*head==NULL){
*head = (el_listy *)malloc(sizeof(el_listy));
strcpy((*head)->imie,imie);
strcpy((*head)->nazwisko,nazwisko);
strcpy((*head)->plec,plec);
(*head)->wiek = wiek;
(*head)->next = NULL;
}
else{
el_listy *p,*p_poprzedni;
p_poprzedni=(*head);
p = (*head)->next;
while (p != NULL){
p_poprzedni=p;
p=p-> next;
p = (el_listy *)malloc(sizeof(el_listy));
if(p != NULL ){
strcpy((*head)->imie, imie, 10);
strcpy((*head)->nazwisko, nazwisko, 10);
strcpy((*head)->plec, plec, 10);
p -> wiek = wiek;
p->next=NULL;
}
}
}
el_listy * SzukajOsoby(int wiek, el_listy * head){
el_listy * Poszukiwany;
Poszukiwany = head;
while ( Poszukiwany != NULL){
if(Poszukiwany->wiek == wiek) break;
Poszukiwany = Poszukiwany->next;
}
return Poszukiwany;
}
void UsunOsobe(int wiek, el_listy ** head){
bool UdaloSieUsunac = false;
el_listy *p, *p2;
if(*head != NULL){
if((*head)->wiek == wiek){
p = (*head)->next;
free(*head);
*head = p;
UdaloSieUsunac = true;
}
else{
p2 = *head;
p = p2->next;
while (p != NULL){
if(p->wiek == wiek){
p2->sasiad_nast = p->next;
free(p);
UdaloSieUsunac = true;
break;
}
p2 = p;
p = p->next;
}
}
}
return UdaloSieUsunac;
}
void wczytajDane(el_listy ** head){
struct Osoba abc;
printf("imie:");
scanf("%d", &abc.imie);
printf("nazwisko:");
scanf("%d", &abc.nazwisko);
printf("plec:");
scanf("%d", &abc.plec);
printf("wiek:");
scanf("%d", &abc.wiek);
return abc;
}
int main(void){
el_listy * head = NULL;
wczytajDane(&head);
PokazListe(head);
bool czySieUdalo = UsunOsobe(10,&head);
if(czySieUdalo) printf("Usunieto osobe.\n");
else printf("Nie usunieto osoby.\n");
PokazListe(head);
el_listy * element;
element = SzukajOsoby(66,head);
if(element != NULL) printf("Znaleziono element.\n");
else printf("Nie znaleziono elementu.\n");
return 0;
}
Chciałbym, żeby ktoś rzucił okiem i sprawdził na ile to co mam obecnie ma sens i w razie czego wspomógł przy ewentualnych błędach.