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);
}
}