operacje na liście dwukierunkowej

0

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...

0

jakaś pomoc jeszcze? sugestie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1