LABORKA 3 (stos i lista)

STOS::

Wyobraźcie sobie, że uczestniczycie w większym projekcie. Waszym zadaniem jest zaimplementowanie klasy obsługującej stos liczb zmiennoprzecinkowych według ściśle podanych wytycznych:

1. Klasa nazywa się "Stack"

2. Klasa Stack posiada konstruktor jednoargumentowy określający rozmiar stosu

3. Dane stosu są przechowywane w dynamicznie alokowanej tablicy o nazwie "buffer"

4. Klasa posiada dwie metody dostępu do danych:
a) push() - umieszcza wartość na wierzchołku stosu
 
Metoda push ma jeden parametr - liczbę typu double. Zwraca prawdę lub fałsz, w zależności od tego czy operacja się powiodła czy nie.

Prototyp:
bool push(double v)

b) pop() - pobiera wartość z wierzchołka stosu

Ze względu na wygodę użytkownika zdecydowano, że metoda pop ma mieć dwie wersje - z przekazywaniem wartości przez wskaźnik i przez referencję. Metoda zwraca prawdę jeśli operacja się powiodła, fałsz w przeciwnym wypadku.

Prototypy:
bool pop(double *v);
bool pop(double &v);


Daje Wam to następujący szkielet klasy:

class Stack {
    double *buffer;
  public:
    Stack(int size);
    bool push(double v);
    bool pop(double *v);
    bool pop(double &v);
    ~Stack() {if (buffer) delete [] buffer;}
};

Waszym zadaniem jest zaimplementowanie stosu według podanych wyżej wytycznych. Jako rozwiązanie proszę przesłać spakowany projekt zawierający pliki:
- Stack.h
- Stack.cpp
- main.cpp

W pliku main.cpp należy zademonstrować działanie stosu:
1. Tworzenie nowego stosu
2. Umieszczanie 3 wartości na stosie i następnie ich pobranie i wyświetlenie
3. Weryfikację zabezpieczeń - co się stanie jeśli spróbujecie pobrać wartość z pustego stosu lub umieścić wartość na stosie całkowicie zapełnionym

LISTA:

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.


Jako rozwiązanie proszę przesłać spakowany projekt zawierający pliki
- LinkedList.h
- LinkedList.cpp
- Element.h
- main.cpp

W pliku main.cpp 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


Wyszukiwarka

Podobne podstrony:
Lista 11, Polibuda, Podstawy Chemii Organicznej, Chemia Organiczna Laborki, Listy zadań
Lista zadań laborki Badania Operacyjne u p Rostek
Lista 5, Polibuda, Podstawy Chemii Organicznej, Chemia Organiczna Laborki, Listy zadań
27 Struktury danych stos, kolejka, lista, drzewo id (2)

więcej podobnych podstron