Lista Dwukierunkowa C++

Lista dwukierunkowa w języku C++.
Program lista działa na strukturach – struktura element, oraz struktura lista (jako całość).
Obiekt el (element listy) posiada atrybut v (wartość) typu integer oraz w wskaźnik do następnego (*nast) i poprzedniego (*pop) elementu.
Obiekt lista przechowuje natomiast wskaźnik do głowy i ogona, czyli pierwszego i ostatniego elementu listy.
W kodzie zaimplementowana listę, dodano takie funkcje jak:

  • Dodaj nowy element do listy (z argumentami wskaźnik do elementu po którym mam wstawić nowy oraz wartość ‘nowego elementu’)
  • Dodaj nowy element na początek listy (z argumentem wartość ‘nowego elementu’)
  • Usuń dowolny element z listy – oprócz głowy
  • Usuń głowę
  • Wyświetl listę na ekranie

#include <cstdlib>
#include <iostream>
using namespace std;

struct el{
       int v;
       el *nast, *pop;
       el();
       };

struct lista
{
       el *glowa;
       el *ogon;
       lista (){
             glowa=ogon=0;
             }
       el *dodajGlowe(int a);
       el *dodaj(el* poprzednik, int a);
       void usunGlowa();
       void usun();
       void wyswietl();
};

//KONSTRUKTOR
el::el(){
         v=0;
         nast=pop=0;
         }

el* lista::dodaj(el*poprzednik, int a){
    el *nowy= new el;
    nowy->v=a;
    nowy->nast=poprzednik->nast;
    poprzednik->nast=nowy;
    nowy->pop=poprzednik;
    if (nowy->nast){
    nowy->nast->pop=nowy;
    }
    else {
         ogon=nowy;
         }
    return nowy;
}

el* lista::dodajGlowe(int a){
    el* nowy = new el;
    nowy->v=a;
    nowy->nast=glowa;
    glowa=nowy;
    if (glowa)
    glowa->pop=nowy;
    return nowy;
    }
void lista::wyswietl(){
     el* tmp=glowa;
     while(tmp){
                cout<<tmp->v<<" ";
                tmp=tmp->nast;

     }
}

int main(int argc, char *argv[])
{
    lista l;
    el *tmp=l.dodajGlowe(5);
    tmp=l.dodaj(tmp,10);
    tmp=l.dodaj(tmp,11);
    tmp=l.dodaj(tmp,12);
    tmp=l.dodaj(tmp,7);
    tmp=l.dodaj(tmp,2);

    l.wyswietl();

    system("PAUSE");
    return EXIT_SUCCESS;
}

Leave a comment

Your comment

Anti-Spam Protection by WP-SpamFree