/*
*
* Implementáció listával
*/
#include <iostream>
using namespace std;
struct elem
{
elem *elozo;
elem *kovetkezo;
int ertek;
};
/*
elem *elso = 0;
elem *utolso = 0;
int elemek_szama = 0;
void beszur( elem *p, int i);
void rendezve_beszur( int i);
void kiir_elore();
void kiir_hatra();
void felszamol();
*/
struct lista
{
elem *elso;
elem *utolso;
int elemek_szama;
lista(); // inicializal
~lista(); // felszamol
void beszur( elem *p, int i);
void rendezve_beszur( int i);
void kiir_elore();
void kiir_hatra();
};
int main()
{
int ii;
lista l; // inicializal
while ( cin >> ii )
{
l.rendezve_beszur(ii);
}
cout << "elemszam = " << l.elemek_szama << endl;
l.kiir_elore();
l.kiir_hatra();
return 0;
// felszamol
}
lista::lista()
{
elso = utolso = 0; // this->elso = this->utolso = 0;
elemek_szama = 0; // this->elemek_szama = 0;
}
lista::~lista()
{
while ( elso ) // this->elso
{
elem *kurrens = elso;
elso = kurrens->kovetkezo;
// elso->elozo = 0;
// --elemek_szama;
delete kurrens;
}
}
void lista::beszur( elem *p, int ii)
{
elem *uj = new elem;
uj->ertek = ii;
uj->elozo = uj->kovetkezo = 0;
if ( !elso ) // ures a lista
{
elso = utolso = uj;
}
else if ( !p ) // nem ures lista vegere appendalunk
{
uj->elozo = utolso;
utolso->kovetkezo = uj;
utolso = uj;
}
else if ( p == elso ) // nem ures lista elso poziciojara szurunk be
{
uj->kovetkezo = elso;
elso->elozo = uj;
elso = uj;
}
else // nem ures lista kozbulso poziciojara szurunk be p ele
{
uj->kovetkezo = p;
uj->elozo = p->elozo;
uj->elozo->kovetkezo = uj;
p->elozo = uj;
}
++elemek_szama;
}
void lista::rendezve_beszur( int ii )
{
elem *kurrens = elso;
while ( kurrens && ii > kurrens->ertek )
{
kurrens = kurrens->kovetkezo;
}
beszur( kurrens, ii);
}
void lista::kiir_elore()
{
elem *kurrens = elso;
while ( kurrens )
{
cout << kurrens->ertek << endl;
kurrens = kurrens->kovetkezo;
}
}
void lista::kiir_hatra()
{
elem *kurrens = utolso;
while ( kurrens )
{
cout << kurrens->ertek << endl;
kurrens = kurrens->elozo;
}
}