Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Implementacja listy w C

Ostatnio zmodyfikowano 2019-06-01 00:12
Autor Wiadomość
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?


C/C++
#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 ];
   
   
    //  printf("%s %s", imie, nazwisko);
   
    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 );
   
   
   
}
P-174741
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.
P-174742
vanitas
Temat założony przez niniejszego użytkownika
» 2019-05-31 23:36:55
W jaki sposób ?
P-174743
pekfos
» 2019-05-31 23:55:16
Dosłownie.
C/C++
typedef struct Student {
    char imie[ 20 ];
    //..
i albo wczytuj prosto do tej tablicy w strukturze, albo użyj strcpy() żeby skopiować napis.
P-174744
vanitas
Temat założony przez niniejszego użytkownika
» 2019-06-01 00:12:03
Dzięki !!! Działa :D
P-174745
« 1 »
  Strona 1 z 1