Czesc
Mam problem mam za zadanie stworzyc baze danych samochdow wpostaci listy jednokierunkowej:
1 dołożyc element :
a)na początek listy;
b)na końcu listy
c) w dowolne miejsce na liscie;
2 wyswitlić baze uporzadkowaną wg ktoregos z parametrow(parametrem funkcji porządkującej wskaźnik do funkcji porównywania)
3 usunąć 1 element z bazy( z dowolnego miejsca)
4 wyszukac element lisy
5 zapisac do pliku

Mam już trochę ale nie mogę sobie dalej poradzić dodaję elemnty na poczatek ale mam problem z dodawaniem na koncu i nie potrafie zrobic by dodawal na koncu poniżej zameszczam co juz zrobiłem. Prosze was o pomoc bo nie zabadzo mam opanowany ten zakres materialu a musze to oddać. Jeśli to możliwe to prosiłbym o objaśnienia

#include <cstdlib> 
 #include <iostream> 
 using namespace std; 



 struct element 
 { 
 char producent[20]; 
 char nazwa[20]; 

 int rok; 
 }; 
 typedef struct tlista *plista; 
 struct tlista{ 
 struct element klucz; 
 plista nast; 
 }; 

 void dodajpocz(plista &pocz); 
 void dodajkoniec(plista &koniec); 
 int usun(plista &pocz, int n); 
 void zmiana(plista &pocz); 
 void wypisz(plista pocz); 
 void naliste(plista &pocz, struct element rek); 
 plista pocz = NULL; 
 plista koniec = NULL; 

 int main() 
 { 
           char wybor; 
                       
                      do{ 
                      cout << " *****************************************\n"; 
                      cout << "WITAJ OTO TWOJE MENU \n"; 
                      cout << "(1)-dodaj poczatek \n (2)-dodaj koniec \n(3)-usun\n(4)-zmiana rekordu\n(5)-wyswietl\n(6)-zakoncz\n WYBOR NALEZY DO CIEBIE:"; 
                      cin >> wybor; 
                          switch(wybor){ 
                                        case '1': dodajpocz(pocz); break; 
                                        case '2': dodajkoniec(koniec); break; 
                                        case '3': usun(pocz, 0); break; 
                                        case '4': zmiana(pocz); break; 
                                        case '5': wypisz(pocz); break; 
                                        } 
                                        } 
                          while(wybor != '5'); 
 return EXIT_SUCCESS; 
 } 


 void dodajpocz(plista &pocz) 
 { 
       
      struct element rekord; 

      cout << " *****************************************\n"; 
      cout << "Dodawanie nowego elementu do listy\n";cout << "Podaj nazwe producenta samochodu: "; 
      cin >> rekord.producent; 
      cout << "Podaj nazwe samochodu: "; 
      cin >> rekord.nazwa; 
      cout << "Rok produkcji: "; 
      cin >> rekord.rok; 

      cout << "\n"; 
      naliste(pocz, rekord); 
 } 

 void dodajkoniec(plista &koniec) 
 { 
      struct element rekord; 
        cout << " *****************************************\n"; 
      cout << "Dodawanie nowego elementu do na koniec listy\n";cout << "Podaj nazwe producenta samochodu: "; 
      cin >> rekord.producent; 
      cout << "Podaj nazwe samochodu: "; 
      cin >> rekord.nazwa; 
      cout << "Rok produkcji: "; 
      cin >> rekord.rok; 

      cout << "\n"; 
      naliste(koniec, rekord); 
 } 
   




 int usun(plista &pocz, int numer) 
 { 
                 int k, i=1; 
                 plista usuwany, pom; 
                 if(numer==0) 
                 { 
                  cout << "Podaj rekord do usuniecia: "; 
                  cin >> k; 
                  } 
                  else 
                  k = numer; 
                  pom = pocz; 
                  usuwany = NULL; 
                  while(pom != NULL && k != i) 
                  { 
                  i++; 
                  usuwany = pom; 
                  pom = pom  nast; 
                  } 
                  if(pom == NULL) 
                  cout << "Rekord o zadanym numerze nie istnieje!\n"; 
                  else 
                  { 
                  if(usuwany == NULL) 
                  pocz = pom  nast; 
                  else 
                  { 
                  usuwany  nast = pom  nast; 
                  } 
                  free(pom); 
                  return 1; 
                  } 
                  return 0; 
 } 


 void naliste(plista &pocz, struct element rek) 
 { 
      plista nowy, pom1, pom2; 

      nowy = (plista)malloc(sizeof(struct tlista)); 
      (*nowy).klucz = rek; 
      if(pocz == NULL) pocz = nowy; 
      else 
      { 
      pom1 = pocz; 
      pom2 = NULL; 
      if(pom2 == NULL) 
      { 
      nowy  nast = pocz; 
      pocz = nowy; 
      } 
      else 
      { 
      pom2  nast = nowy; 
      nowy  nast = pom1; 
 } 
 } 
 } 
 void nalistek(plista &koniec, struct element rek) 
 { 
      plista nowy1, pom3, pom4; 

      nowy1 = (plista)malloc(sizeof(struct tlista)); 
      (*nowy1).klucz = rek; 
      if(koniec == NULL) koniec = nowy1; 
      else 
      { 
      pom3 = koniec; 
      pom4 = NULL; 
      if(pom3 == NULL) 
      { 
      nowy1  nast = koniec; 
      koniec = nowy1; 
      } 
      else 
      { 
      pom4  nast = nowy1; 
      nowy1  nast = pom3; 
 } 
 } 
 } 


 void wypisz(plista pocz) 
 { 
      int licznik=1, j; char katwybor[20]; 

      if(pocz == NULL) 
      cout << "Baza aktulanie jest pusta" << endl; 

      while(pocz != NULL){ 
                 cout << "Numer: " << licznik << "\n"; 
                 cout << "Producent samochodu : " << pocz  klucz.producent << "\n"; 
                 cout << "Nazwa samochodu : " << pocz  klucz.nazwa << "\n"; 
                 cout << "Rok produkcji : " << pocz  klucz.rok << "\n"; 

                 cout << "-\n"; 
                 pocz = pocz  nast; 
                 licznik++; 
 } 
 } 


 void zmiana(plista &pocz) 
 { 
      int numerrek, i=1, typsamochodu; 
       
      struct element rekord; 
       
      cout << "Rekord do zmiany podaj numer: "; 
      cin >> numerrek; 
       
      if(usun(pocz, numerrek) == 1){ 
                    cout << " AKTUALIZUJ\n"; 
                    cout << " Producent (nowy): "; 
                    cin >> rekord.producent; 
                    cout << "Nazwa (nowy): "; 
                    cin >> rekord.nazwa; 
                     
                    cout << "Rok produkcji (nowy): "; 
                    cin >> rekord.rok; 

                    cout << "\n"; 
                    naliste(pocz, rekord); 
 } 
 }