Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct lista // lista to taka typ struktury, który posiada:
- {
- int data; // przechowalnie na dane, czyli to co zawiera ten element
- lista * next; //wskaźnik na kolejny element listy
- };
- void insert_new(lista * & head, int key, int index) // funkcja dodająca nowy element
- {
- int licznik=0;
- unsigned c = 0; // zerujemy licznik
- lista* p = head;
- while (p) // obliczamy ile jest elementów w 'p' - czyli kopi head ( a head to wskaźnik na listę, która podajemy do funkcji)
- {
- c++;
- p = p->next; // tutaj tę kopię zmieniamy, dlatego używamy kopi, a nie oryginału
- }
- //są teraz 4 możlowości dodania nowego elementu za które trzeba się inaczej zabrać
- if (head==nullptr) // 1. jeżeli wskaźnik na listę jest pusty oznacza to, że lista nie istnieje
- {
- lista* nowy = new lista; // tworzymy nowy element, który jest wskaźnikiem na strukturę 'lista' - czyli towrzymy nowy element listy
- nowy->data = key;
- nowy->next = nullptr; //ogólnie rzecz biorąc normalnie w strukturach byśmy zapisali nowy.next, ale zapisujemy nowy->next, bo next jest wskaźnikiem (tak to rozumiem)
- head = nowy;
- }
- else if (index==0) // 2. jeżeli dodajemy na początku listy
- {
- lista* nowy = new lista;
- nowy->next = head;
- nowy->data = key;
- head = nowy;
- }
- else if (index==c) // 3. jeżeli chcemy coś umieścić w środku
- {
- lista* nowy = new lista; // jak zwykle chcąc dodać nowy element trzeba go stworzyć :)
- lista* iterator = head; // pomocnicza lista za pomocą której dojdziemy do ostatniego elementu
- while (iterator->next!=nullptr) iterator = iterator->next; // sposób w jaki dojść (if you know what I mean) do ostatenigo elementu
- iterator->next = nowy;
- nowy->data = key;
- nowy->next = nullptr;
- }
- else
- {
- lista* nowy = new lista;
- int inny_licznik=0;
- lista* iterator = head;
- while (inny_licznik!=(index-1)) // znajdujemy element poprzedający to miejsce, na które chcemy dodać nasz nowy element
- {
- iterator = iterator->next; // ten sam magiczny sposób na dojście
- inny_licznik++;
- }
- nowy->next = iterator->next;
- iterator->next = nowy;
- nowy->data = key;
- }
- }
- void delete_index(lista * & head, int index)
- {
- unsigned c = 0;
- lista* p = head; // pomocnicza lista
- while (p)
- {
- c++;
- p = p->next;
- }
- if (index==0) // jeżeli chcem usunąc pierwszy element listy
- {
- lista* pomocniczy = head; // inna pomocnicza lista
- head = pomocniczy->next;
- delete pomocniczy;
- }
- else if (index==c) // ostatni element
- {
- lista* iterator = head;
- while (iterator->next != nullptr) iterator = iterator->next;
- delete iterator;
- }
- else
- {
- int inny_licznik = 0;
- lista* iterator = head;
- while (inny_licznik != (index - 1))
- {
- iterator = iterator->next;
- inny_licznik++;
- }
- iterator->next = iterator->next->next;
- // tutaj nie wiem jak wrzucić 'delete', bo trzeba usunąć usunięty element, ale coś mi się pieprzy w programie
- }
- }
- void get_index(lista * & head, int index)
- {
- int inny_licznik = 0;
- lista* iterator = head; // pomocnicza lista - kopia
- while (inny_licznik != (index ))
- {
- iterator = iterator->next;
- inny_licznik++;
- }
- cout << iterator->data;
- }
- int main()
- {
- lista * L = NULL; // zawiera adres początku listy
- char zmienna;
- while (cin>>zmienna)
- {
- if (zmienna == 'q')
- break;
- switch (zmienna)
- {
- case 'i':
- int key, index;
- cin >> key;
- cin >> index;
- insert_new(L, key, index);
- break;
- case 'g':
- int delta;
- cin >> delta;
- get_index(L, delta);
- break;
- case 'd':
- int gamma;
- cin >> gamma;
- delete_index(L, gamma);
- break;
- default:
- // powinno tu coś być, ale stos nie popełnia błędów i cały ten program napisałem dla przypadku idealnego
- break;
- }
- }
- // Szowinistyczny żart na koniec:
- // Na lekcji programowania obiektowego student łapie koleżankę obok za pierś.
- // Na to ona: „To prywatne!!!”, a on odpowiada: „Myślałem że jesteśmy w tej samej klasie
- // ~~ pozdrawiam Dawid Krefta ~~
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement