Programowanie proceduralne
Zadania dodatkowe 2 – Struktury cykliczne
Dynamiczna struktura danych – lista jest zdefiniowana następująco:
struct Node{
int v;
struct Node * next;
};
typedef struct Node Node;
typedef Node * List;
1. Zaimplementuj następujące funkcje:
void add(List*,int); - dodaj nowy element (na początek listy),
void print(List); - wypisz elementy listy (iteracyjnie),
void printRec(List); - wypisz elementy listy (rekurencyjnie),
void printRecRev(List); - wypisz elementy listy w odwrotnej kolejności (rekurencyjnie),
int rem(List*, int*); - usuń pierwszy element listy (funkcja powinna zwracać informację, czy operacja się udała, natomiast wartość usuwanego elementu powinna być wpisywana w drugi argument),
int remAll(List*); - usuń całą listę (zwolnij pamięć),
void addNondecreasing(List*,int); - wstaw element
niemalejąco (zakładając, że elementy listy są ułożone niemalejąco, wstaw element w odpowiednie miejsce – zachowując uporządkowanie).
Dynamiczna struktura danych – drzewo wyszukiwań binarnych jest zdefiniowane następująco:
typedef struct Node{
int v;
struct Node * left;
struct Node * right;
} Node;
typedef Node* Tree;
2. Zaimplementuj następujące funkcje:
void add(Tree*, int); - dodaj element do drzewa (tak, aby
elementy leżące w lewym poddrzewie były mniejsze niż element w węźle, a w prawym niemniejsze),
void print(Tree); - wypisywanie elementów drzewa (w porządku infiksowym – wrostkowym),
void printPre(Tree); - wypisywanie elementów drzewa (w porządku prefiksowym – przedrostkowym),
void printPost(Tree); - wypisywanie elementów drzewa (w porządku postfiksowym – przyrostkowym),
void deleteTree(Tree*); - usunięcie drzewa (zwolnienie pamięci),
int nodesNumber(Tree); - obliczenie liczby węzłów w drzewie,
int leavesNumber(Tree); - obliczenie liczby liści w drzewie,
int height(Tree); - obliczenie głębokości drzewa.
Karol Tarnowski Wrocław, 2018