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;
}
