Witam serdecznie,
Dodam na samym początku, że nie potrzebuję tego na żadne zaliczenie, natomiast chciałbym wiedzieć jak zaimplementować prostą listę dwukierunkową (obiektowo) w oparciu o klasy i metody (wyświetlanie listy, dodawanie elementów i ich usuwanie) z krótkim objaśnieniem (dlaczego w taki sposób?).
Czy jest ktoś, kto byłby w stanie spróbować mi wytłumaczyć implementację takiej listy dwukierunkowej?
Czy jest ktoś, kto byłby w stanie spróbować mi wytłumaczyć implementację takiej listy dwukierunkowej?
Myślę, że lista dwukierunkowa została już wytłumaczona milion razy w Internecie.
Pokaż co zrobiłeś i napisz na czym utknąłeś.
http://www.cplusplus.com/reference/list/list/
List containers are implemented as doubly-linked lists;
https://github.com/gcc-mirror/gcc/tree/master/libstdc%2B%2B-v3
Dwa punkty zaczepne:
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/debug/list
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/profile/list
Kompletny, funkcjonalny przykład; Baw się dobrze.
Ok, dzięki ;)
No dobra, zajawkę/ideę można dać przecież.
#include<iostream>
#include<string>
using namespace std;
template <class T>
class list{
private:
struct element{
element* next;
element* previous;
T value;
element(const T& val):value(val), next(nullptr), previous(nullptr){}
};
element* root;
public:
list() : root(nullptr){}
void add(const T& val){
element* newElement = new element(val);
if(this->root == nullptr) this->root = newElement;
else{
newElement->next = this->root;
this->root->previous = newElement;
this->root = newElement;
}
}
};
int main(){
list<string> test;
test.add("Grzesiek");
test.add("Tomek");
test.add("Czesiek");
return 0;
}
Zostaje jeszcze czyszczenie pamięci i usuwanie elementów - to z takich podstawowych rzeczy. W samej klasie możesz zapiąć jakieś metody typu kopiowanie jednej listy do drugiej, zamiana elementów i-tego z j-tym... takie tam rzeczy, żeby to się do czegoś tam nadawało. :)