Implementacja listy w C
Ostatnio zmodyfikowano 2019-06-01 00:12
vanitas Temat założony przez niniejszego użytkownika |
Implementacja listy w C » 2019-05-31 21:02:35 Witam, czy może ktoś mi pomóc z implementacją listy w C z użyciem struktur ? Mój kod jest jeszcze niekompletny, jak narazie zaimplementowałem dwie funkcje: pierwsza dodaje element na początek listy a druga pokazuje wszystkie elementy. Struktura mieście info. o studentach: imię, nazwisko, data urodzenia. Wszystko działa poprawnie jeśli chodzi o wyświetlanie daty urodzenia wszystkich dodany studentów, niestety jeśli chodzi o imiona i nazwiska to dla każdego studenta wyświetlane jest nazwisko i mię dla ostatniego dodanego elementu. Czy ktoś wie jak uporać się z tym problemem? #include <stdio.h> #include <stdlib.h>
typedef struct STUDENT { char * imie; char * nazwisko; int dataUrodzenia; struct STUDENT * next; } ST;
void frontPush( ST ** head, char * imie, char * nazwisko, int rokUrodzenia ); void showAll( ST * head );
enum M Ó J_INTERFEJS { EXIT, FRONT_PUSH, BACK_PUSH, FRONT_POP, BAC_POP, SHOW, };
int main() { int funkcja = - 1, rokUrodzenia = 0; char tablicaImie[ 20 ], tablicaNazwisko[ 20 ]; ST * head; head =( ST * ) malloc( sizeof( ST ) ); head = NULL; while( funkcja != 0 ) { printf( "Wybierz funkcje:\n" ); printf( "1. Dodac element na poczatek listy.\n" ); printf( "2. Dodac element na koniec listy.\n" ); printf( "3. Usunac element z poczatku listy.\n" ); printf( "4. Usunac element z konca listy.\n" ); printf( "5. Pokaż wszystkie elementy.\n" ); printf( "6. Usunac element o wybranym indeksie.\n" ); printf( "0. Zakonczyc program.\n" ); scanf( "%d", & funkcja ); getchar(); switch( funkcja ) { case FRONT_PUSH: printf( "Podaj imie:\n" ); fgets( tablicaImie, sizeof( tablicaImie ), stdin ); printf( "Podaj nazwisko:\n" ); fgets( tablicaNazwisko, sizeof( tablicaNazwisko ), stdin ); printf( "Podaj rok urodzenia:\n" ); scanf( "%d", & rokUrodzenia ); frontPush( & head, tablicaImie, tablicaNazwisko, rokUrodzenia ); break; case SHOW: showAll( head ); break; case 0: funkcja = 0; break; } } return 0; }
void frontPush( ST ** head, char * tablicaImie, char * tablicaNazwisko, int rokUrodzenia ) { ST * nastepny; nastepny =( ST * ) malloc( sizeof( ST ) ); nastepny->imie = tablicaImie; nastepny->nazwisko = tablicaNazwisko; nastepny->dataUrodzenia = rokUrodzenia; nastepny->next = * head; * head = nastepny; }
void showAll( ST * head ) { do { printf( "%s", head->imie ); printf( "%s", head->nazwisko ); printf( "%d", head->dataUrodzenia ); printf( "\n" ); head = head->next; } while( head != NULL ); }
|
|
pekfos |
» 2019-05-31 22:10:58 W tym programie istnieje tylko jedno imię i nazwisko. Wszystkie węzły wskazują na te same 2 tablice. Przenieś je do struktury. |
|
vanitas Temat założony przez niniejszego użytkownika |
» 2019-05-31 23:36:55 W jaki sposób ?
|
|
pekfos |
» 2019-05-31 23:55:16 Dosłownie. typedef struct Student { char imie[ 20 ];
i albo wczytuj prosto do tej tablicy w strukturze, albo użyj strcpy() żeby skopiować napis. |
|
vanitas Temat założony przez niniejszego użytkownika |
» 2019-06-01 00:12:03 Dzięki !!! Działa :D |
|
« 1 » |