Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- using namespace std;
- // Element listy
- //--------------
- struct dlistEl
- {
- dlistEl * next; // następnik
- dlistEl * prev; // poprzednik
- int data;
- };
- // Definicja obiektu listy dwukierunkowej
- //---------------------------------------
- class dlist
- {
- public:
- dlistEl * head; // początek listy
- dlistEl * tail; // koniec listy
- unsigned count; // licznik elementów
- dlist(); // konstruktor
- ~dlist(); // destruktor
- void printl();
- void push_front(int v);
- void push_back(int v);
- void insert_before(dlistEl * e, int v);
- void insert_after(dlistEl * e, int v);
- void remove(dlistEl * e);
- void pop_front();
- void pop_back();
- };
- //------------------------------------
- // Metody obiektu listy dwukierunkowej
- //------------------------------------
- // Inicjuje pola zmiennej listy
- //-----------------------------
- dlist::dlist()
- {
- head = tail = NULL;
- count = 0;
- }
- // Usuwa listę z pamięci
- //----------------------
- dlist::~dlist()
- {
- while(count) pop_front();
- }
- // Wyświetla zawartość elementów listy
- //----------------------------------------------
- void dlist::printl()
- {
- dlistEl * p;
- cout << endl;
- cout << "--------------------------------------------------" <<endl;
- cout << "---------ZAWARTOŚĆ LISTY DWUKIERUNKOWEJ---------" <<endl;
- cout << "--------------------------------------------------" <<endl;
- cout << "Ilość elementów: " << count << endl;
- p = head;
- for (int i = 1; p ; ++i)
- {
- cout << "Element #"<< i << " dane = " << p->data << endl;
- p = p->next;
- }
- cout << "--------------------------------------------------" <<endl;
- }
- // Dodaje nowy element na początek listy
- //------------------------------------------------
- void dlist::push_front(int v)
- {
- dlistEl * p;
- p = new dlistEl;
- p->data = v;
- p->prev = NULL;
- p->next = head;
- head = p;
- count++;
- if(p->next) p->next->prev = p;
- else tail = p;
- }
- // Dodaje nowy element na koniec listy
- //----------------------------------------------
- void dlist::push_back(int v)
- {
- dlistEl * p;
- p = new dlistEl;
- p->data = v;
- p->next = NULL;
- p->prev = tail;
- tail = p;
- count++;
- if(p->prev) p->prev->next = p;
- else head = p;
- }
- // Dodaje nowy element przed wybranym
- //-----------------------------------
- void dlist::insert_before(dlistEl * e, int v)
- {
- dlistEl * p;
- if(e == head) push_front(v);
- else
- {
- p = new dlistEl;
- p->data = v;
- p->next = e;
- p->prev = e->prev;
- count++;
- e->prev->next = p;
- e->prev = p;
- }
- }
- // Dodaje nowy element za wybranym
- //--------------------------------
- void dlist::insert_after(dlistEl * e, int v)
- {
- dlistEl * p;
- if(e == tail) push_back(v);
- else
- {
- p = new dlistEl;
- p->data = v;
- p->next = e->next;
- p->prev = e;
- count++;
- e->next->prev = p;
- e->next = p;
- }
- }
- // Usuwa wybrany element z listy
- //------------------------------
- void dlist::remove(dlistEl * e)
- {
- count--;
- if(e->prev) e->prev->next = e->next;
- else head = e->next;
- if(e->next) e->next->prev = e->prev;
- else tail = e->prev;
- delete e;
- }
- // Usuwa element z początku listy
- //-------------------------------
- void dlist::pop_front()
- {
- if(count) remove(head);
- }
- // Usuwa element z końca listy
- //----------------------------
- void dlist::pop_back()
- {
- if(count) remove(tail);
- }
- void menu()
- {
- cout << "1. Dodaj element na początek listy" << endl;
- cout << "2. Dodaj element na koniec listy" << endl;
- cout << "3. Dodaj element przed elementem nr..." << endl;
- cout << "4. Dodaj element za elementem nr..." << endl;
- cout << "5. Usuń element z początku listy" << endl;
- cout << "6. Usuń element z końca listy" << endl;
- cout << "7. Usuń element numer..." << endl;
- cout << "8. Wyjdź z programu" << endl;
- cout << endl;
- }
- //---------------
- // Program główny
- //---------------
- int main()
- {
- dlist L;
- dlistEl * e;
- int i;
- int x;
- int y;
- while(true) {
- L.printl();
- menu();
- cout << "Wybór: ";
- cin >> i;
- switch (i) {
- case 1:
- if (L.count < 6)
- {
- cout << "Podaj numer jaki dodać do elementu na początku listy: ";
- cin >> x;
- L.push_front(x);
- } else {
- cout << "Lista jest pełna! Max 6 elementów" << endl;
- }
- break;
- case 2 :
- if (L.count < 6)
- {
- cout << "Podaj numer jaki dodać do elementu na końcu listy: ";
- cin >> x;
- L.push_back(x);
- } else {
- cout << "Lista jest pełna! Max 6 elementów" << endl;
- }
- break;
- case 3 :
- cout << "Wpisz numer elementu przed którym dodać element: ";
- cin >> y;
- cout << "Wpisz wartość dodawanego elementu: ";
- cin >> x;
- e = L.head;
- for (int xx = 1; xx < y; xx++) e = e->next;
- L.insert_before(e, x);
- break;
- case 4 :
- cout << "Wpisz numer elementu za którym dodać element: ";
- cin >> y;
- cout << "Wpisz wartość dodawanego elementu: ";
- cin >> x;
- e = L.head;
- for (int xx = 1; xx < y; xx++) e = e->next;
- L.insert_after(e, x);
- break;
- case 5 :
- if (L.count > 0) L.pop_front();
- else cout << "Lista jest pusta! Brak możliwości usunięcia elementu.";
- break;
- case 6 :
- if (L.count > 0) L.pop_back();
- else cout << "Lista jest pusta! Brak możliwości usunięcia elementu.";
- break;
- case 7 :
- if (L.count > 0) {
- cout << "Wpisz numer elementu za którym chcesz usunąć: ";
- cin >> y;
- e = L.head;
- for (int xx = 1; xx < y; xx++) e = e->next;
- L.remove(e);
- } else {
- cout << "Lista jest pusta! Brak możliwości usunięcia elementu.";
- }
- break;
- case 8:
- return 0;
- default:
- cout << "Niepoprawny numer!" << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement