Tutaj treść zadania (polecenie):
Waszym zadaniem jest stworzenie klasy, która stanie się częścią większego systemu. Klasa ma służyć do przechowywania dużej ilości elementów typu "Element". Z punktu widzenia tego zadania klasę "Element" możemy sobie uprościć do kodu podanego poniżej:
class Element {
int val;
public:
Element (int v=0) {val=v;}
int getVal() {return val;}
};
Na sposób implementacji Waszej klasy narzucono szereg ograniczeń:
1. Klasa ma nazywać się "LinkedList"
2. Dane mają być przechowywane jako lista dwukierunkowa
3. Elementy listy indeksowane są od 0
4. Klasa ma posiadać następujące metody publiczne:
int size();
// Zwraca liczbę elementów na liście. Czas działania tej operacji nie może zależeć
// od liczby elementów na liście
Element * get(int index);
// Zwraca wskaźnik na element leżący na pozycji "index" lub NULL
// jeśli index jest nieprawidłowy. Za nieprawidłowe uznajemy indeksy:
// - mniejsze od zera
// - większe niż size()-1
Element * set(int index, E * element);
// Zastępuje element leżący na pozycji index elementem przekazanym jako
// parametr wywołania. Zwraca wskaźnik na wstawiony element lub NULL jeśli
// operacja nie mogła być wykonana poprawnie
bool add(E * element);
// Dodaje element przekazany jako parametr wywołania na koniec listy
// Zwraca prawdę jeśli operacja się udała, fałsz jeśli z jakiegokolwiek powodu
// nie mogła być wykonana
bool add(int index, E * element);
// Dodaje element do listy w taki sposób, aby znalazł się on na pozycji "index".
// Jeśli na tej pozycji już był jakiś element, to nowo wstawiony element musi
// znaleźć się przed elementem istniejącym. Przypadki szczególne:
// index <= 0 - element jest wstawiany na początek listy
// index >= size() - element jest wstawiany na koniec listy
// zwraca prawdę jeśli operacja się powiodła
bool remove(int index);
// Usuwa z listy element leżący na pozycji index. Zwraca prawdę jeśli operacja się
// udała, fałsz w przeciwnym wypadku.
5. Metody które kasują elementy są odpowiedzialne za zwolnienie ich pamięci
Powyższe ograniczenia narzucają poniższy szkielet klasy LinkedList:
class LinkedList {
public:
int size();
Element * get(int index);
Element * set(int index, E * element);
bool add(E * element);
bool add(int index, E * element);
bool remove(int index);
};
Waszym zadaniem jest uzupełnienie go tak, aby spełnione były podane wyżej założenia.
W funkcji main() należy zademonstrować działanie wszystkich metod listy.
Uwaga - proszę zwrócić uwagę na przypadki szczególne, np.
- dodawanie elementu na koniec pustej listy
- kasowanie ostatniego elementu listy
A tutaj mój kod:
# include <iostream>
using namespace std;
class Element {
int val;
public:
Element (int v=0) {val=v;}
int getVal() {return val;}
};
class LinkedList {
public:
int size();
Element * get(int index);
Element * set(int index, E * element);
bool add(E * element);
bool add(int index, E * element);
bool remove(int index);
};
int LinkedList::size
{
return counter;
}
Wiem, że to tyle co nic, ale nie mogę znaleźć nigdzie operacji na liście dwukierunkowej (w google i w symfonii). Każdy link do materiału, który może pomóc, każda rada i wskazówka będą bardzo cenione.
Help...