#include <ctime>
#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdlib>
#include <time.h>
using namespace std;
struct Selement
{
char litera;
Selement* next;
};
void dodajNaKoniec(Selement* &glowa, Selement* nowy)
{
if (nowy==nullptr)
{
return; //nie ma czego dodać
}
if (glowa==nullptr)
{
glowa = nowy; //pierwszy element
glowa->next = nullptr; //na wszelki wypadek
}
else
{
Selement* temp = glowa; //szukamy konca listy
while(temp->next != nullptr)
{
temp = temp->next;
} //temp ostatni element listy
temp->next = nowy; //dodajemy na koniec listy
}
}
Selement* nowyElement(bool &jestNowy)
{
Selement* nowy = nullptr;
char literaLos = 'a' + rand()%('z'-'a'+1);
if (literaLos !='a')
{
nowy = new Selement;
nowy->litera = literaLos;
nowy->next = nullptr;
jestNowy = true;
}
else
{
jestNowy = false;
}
return nowy;
}
void drukowanieListy (Selement* reader, string naglowek)
{
cout << naglowek << endl;
while(reader!=nullptr)
{
cout <<reader->litera << ';';
reader = reader->next;
}
cout << endl;
}
void usuwanieListy(Selement* &glowa)
{
while(glowa!=nullptr)
{
Selement* toDel = glowa;
glowa = glowa->next;
delete toDel;
}
}
int rozmiarListy(Selement* glowa)
{
int licznik = 0;
for(Selement* re = glowa; re!= nullptr; re = re->next)
{
licznik++;
}
return licznik;
}
bool dodajWPozycji(Selement* &glowa, Selement* nowy, int pozycja)
{
if(nowy== nullptr)
{
return false; // nie ma czego dodawać
}
int rozmiar = rozmiarListy(glowa);
//wiemy ile jest elementów listy
if(pozycja - 1 > rozmiar || pozycja < 1)
{
return false;
}
if(pozycja == 1)
{
//dodać na początku
nowy->next = glowa;
glowa = nowy;
}
else
{
Selement* temp = glowa;
int licznik = 1;
while (licznik < pozycja - 1)
{
temp = temp->next;
licznik++;
}
nowy->next = temp->next; //przepisywanie następnika
temp->next = nowy; //podstawianie nowego elementu
}
return true; //gdy wszystko jest dobrze
}
int zamianaLiterki(Selement* &glowa, char literkaPrzed, char literkaPo)
{
int licznik = 0;
while (glowa!= nullptr)
{
if(glowa->litera==literkaPrzed)
{
glowa->litera = literkaPo;
licznik++;
}
glowa = glowa->next;
}
return licznik;
}
int main()
{
srand(time(NULL));
Selement* glowa = nullptr;
Selement* nowy = nullptr;
bool jestNowy = true;
nowy = nowyElement(jestNowy);
while(jestNowy) //nie dodamy elementu nowy gdy wylosowano a
{
dodajNaKoniec(glowa,nowy);
nowy =nowyElement(jestNowy);
}
drukowanieListy(glowa, "Zawartość listy:");
nowy = new Selement;
nowy->litera = '#';
nowy->next = nullptr;
dodajWPozycji(glowa, nowy, 4);
drukowanieListy(glowa, "Zawartość listy po wstawieniu nowego elementu:");
nowy = new Selement;
nowy->litera = '$';
nowy->next = nullptr;
dodajWPozycji(glowa, nowy, 5);
drukowanieListy(glowa, "Zawartość listy po wstawieniu nowego elementu:");
int counter = zamianaLiterki(glowa, 'b', 'v');
cout << endl << counter << endl;
drukowanieListy(glowa, "Zawartość listy po zmienie literki:");
usuwanieListy(glowa);
}