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