Mam problem z programem dotyczącym cyklicznej listy jednokierunkowej, który się nie kompiluje, mógłby ktoś rzucić okiem, co robię źle? Nie jestem zaawansowanym programistą, dopiero z tym zaczynam i chciałbym się nauczyć prawidłowo programować, wrzucam kody plików: żródłowego, nagłówkowego i main
Kod: Zaznacz cały
#include "listy.h"
#include <iostream>
#include <fstream>
using namespace std;
void stworz_wezel(WezelInt *& pocz, int x)
{
WezelInt *pom;
pom = new WezelInt;
pom->wartosc = x;
if (pocz == NULL)
{
pocz = pom;
pom->nast = pocz;
}
else
{
pom->nast = pocz->nast;
pocz->nast = pom;
pocz = pom;
}
}
void dodaj_poczatek(WezelInt *& pocz,int x)
{
if (pocz == NULL)
{
cout<<"Najpierw stworz liste."<<endl;
return;
}
WezelInt *pom;
pom = new WezelInt;
pom->wartosc = x;
pom->nast = pocz->nast;
pocz->nast = pom;
}
void dodaj_koniec(WezelInt *& pocz, int x, int poz)
{
if (pocz == NULL)
{
cout<<"Najpierw stworz liste."<<endl;
return;
}
WezelInt *pom, *s;
s = pocz->nast;
for (int i = 0;i < poz-1;i++)
{
s = s->nast;
if (s == pocz->nast)
{
cout<<"Nie mniej niż ";
cout<<poz<<" na liscie"<<endl;
return;
}
}
pom = new WezelInt;
pom->nast = s->nast;
pom->wartosc = x;
s->nast = pom;
/*Element dodaje się na końcu*/
if (s == pocz)
{
pocz=pom;
}
}
void usun_element(WezelInt *& pocz, int x)
{
WezelInt *pom, *s;
s = pocz->nast;
/* Jeżeli Lista zawiera tylko jeden element*/
if (pocz->nast == pocz && pocz->wartosc == x)
{
pom = pocz;
pom = NULL;
delete pom;
return;
}
if (s->wartosc == x) /*Usuwanie pierwszego elementu*/
{
pom = s;
pocz->nast = s->nast;
delete pom;
return;
}
while (s->nast != pocz)
{
/*Usuwanie elemnetu pomiedzy*/
if (s->nast->wartosc == x)
{
pom = s->nast;
s->nast = pom->nast;
delete pom;
cout<<"Element "<<x;
cout<<" Usunieto z listy"<<endl;
return;
}
s = s->nast;
}
/*Usuwanie ostatniego elementu*/
if (s->nast->wartosc == x)
{
pom = s->nast;
s->nast = pocz->nast;
delete pom;
pocz = s;
return;
}
cout<<"Element "<<x<<" nie znalezniony na liscie"<<endl;
}
void wyszukaj_element(WezelInt *& pocz,int x)
{
WezelInt *s;
int licznik = 0;
s = pocz->nast;
while (s != pocz)
{
licznik++;
if (s->wartosc == x)
{
cout<<"Element "<<x;
cout<<" znalezione na pozycji "<<licznik<<endl;
return;
}
s = s->nast;
}
if (s->wartosc == x)
{
licznik++;
cout<<"Element "<<x;
cout<<" znalezione w pozycji "<<licznik<<endl;
return;
}
cout<<"Element "<<x<<" nie znalezniony na liscie"<<endl;
}
void wyswietl_liste(WezelInt * pocz)
{
WezelInt *s;
if (pocz == NULL)
{
cout<<"Lista jest pusta, nic do wyświetlenia"<<endl;
return;
}
s = pocz->nast;
cout<<"cykliczna lista jednokierunkowa: "<<endl;
while (s != pocz)
{
cout<<s->wartosc<<"->";
s = s->nast;
}
cout<<s->wartosc<<endl;
}
Kod: Zaznacz cały
#ifndef lista_h
#define lista_h
using namespace std;
class WezelInt{
public:
int wartosc;
WezelInt *nast;
WezelInt();
WezelInt(int x);
WezelInt(int x, WezelInt *nastepny);
}*pocz;
};
void stworz_wezel(WezelInt *& pocz, int x);
void dodaj_poczatek(WezelInt *& pocz,int x);
void dodaj_koniec(WezelInt *& pocz, int x, int poz);
void usun_element(WezelInt *& pocz, int x);
void wyszukaj_element(WezelInt *& pocz,int x);
void wyswietl_liste(WezelInt * pocz);
Kod: Zaznacz cały
#include <iostream>
#include "listy.h"
using namespace std;
int main(int argc, char** argv) {
int wybor, element, pozycja;
while (1)
{
cout<<endl<<"---------------------------"<<endl;
cout<<endl<<"------------MENU-----------"<<endl;
cout<<endl<<"---------------------------"<<endl;
cout<<"1.Tworzenie wezla"<<endl;
cout<<"2.Dodawanie elementu na poczatek"<<endl;
cout<<"3.Dodawanie elementu na koniec"<<endl;
cout<<"4.Usuwanie elementu"<<endl;
cout<<"5.Wyszukiwanie"<<endl;
cout<<"6.Wyswietlanie"<<endl;
cout<<"7.Wyjscie"<<endl;
cout<<"Wprowadź swój wybór : ";
cin>>wybor;
switch(wybor)
{
case 1:
cout<<"Wprowadź element: ";
cin>>element;
stworz_wezel(element);
cout<<endl;
break;
case 2:
cout<<"Wprowadź element: ";
cin>>element;
dodaj_poczatek(WezelInt *& pocz,element);
cout<<endl;
break;
case 3:
cout<<"Wprowadź element: ";
cin>>element;
cout<<"Wstaw element, za pozycja: ";
cin>>pozycja;
dodaj_koniec(WezelInt *& pocz, element, pozycja);
cout<<endl;
break;
case 4:
if (pocz == NULL)
{
cout<<"Lista jest pusta, nic do usunięcia"<<endl;
break;
}
cout<<"Wprowadź element do usuniecia: ";
cin>>element;
usun_element( element);
cout<<endl;
break;
case 5:
if (pocz == NULL)
{
cout<<"Lista pusta! Nie można wyszukiwać"<<endl;
break;
}
cout<<"Wprowadź element do wyszukania: ";
cin>>element;
wyszukaj_element(WezelInt *& pocz, element);
cout<<endl;
break;
case 6:
wyswietl_liste(WezelInt * pocz);
break;
case 7:
exit(1);
break;
default:
cout<<"Zly wybor"<<endl;
}
}
return 0;
}