• Nie Znaleziono Wyników

Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 7.

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 7."

Copied!
1
0
0

Pełen tekst

(1)

Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 7.

Dynamiczne struktury informacyjne - listy

Cel ćwiczenia: Projektowanie algorytmów wykorzystujących dynamiczne struktury informa- cyjne. Operacje na listach jednokierunkowych i dwukierunkowych. Listy uporządkowane.

Implementacja kolejki i stosu z wykorzystaniem listy.

1. Zadeklarować typy danych określające listę jednokierunkową:

typedef int tdana; // typ danej klucza

typedef struct tlista *plista; // wskaźnik na element listy struct tlista { tdana klucz; plista nast; }; // element listy

Zdefiniować zmienną pocz typu plista wskazującą na początek listy. Wykorzystać przedstawione definicje do implementacji stosu (kolejki typu LIFO). Opracować funkcje:

a) dodającą element o podanej wartości klucza na stos; przydzielić pamięć, wpisać daną x do klucza, zmodyfikować wskaźnik wierzchołka stosu pocz; prototyp funkcji:

void NaStos(plista &pocz, tdana x); // LIFO

b) zdejmującą element z wierzchołka stosu; zapamiętać wartość klucza w zmiennej x, zmodyfikować wskaźnik wierzchołka stosu pocz, zwolnić pamięć; prototyp funkcji:

void ZeStosu(plista &pocz, tdana &x);

c) wyprowadzającą na ekran zawartość stosu oraz adresy jego poszczególnych elementów (%p); prototyp funkcji: void Pisz(plista pocz);

Deklaracje typów danych oraz prototypy funkcji umieścić w pliku nagłówkowym prot.h, definicje funkcji umieścić w pliku defs.cpp, program główny nazwać stos.cpp. W programie głównym umieścić plista pocz. Utworzyć projekt i skompilować.

Przetestować funkcje w programie. Przed zakończeniem programu zwolnić pamięć.

2. Wykorzystując listę jednokierunkową zdefiniowaną w zadaniu 1 zrealizować kolejkę typu FIFO. Przyjąć zmienne pocz i kon typu plista za, odpowiednio, początek i koniec kolejki.

Wartości początkowe: pocz = kon = NULL. Opracować funkcje:

a) dodającą element o podanej wartości klucza na koniec kolejki; przydzielić pamięć, wpisać daną x do klucza, zmodyfikować wskaźniki kolejki (pocz, kon); prototyp funkcji: void DoKolejki(plista &pocz, plista &kon, tdana x); // FIFO

b) pobierającą element z początku kolejki; zapamiętać wartość klucza w zmiennej x, zmodyfikować wskaźniki kolejki (pocz, kon), zwolnić pamięć; prototyp funkcji:

void ZKolejki(plista &pocz, plista &kon, tdana &x);

c) wyprowadzającą na ekran zawartość kolejki oraz adresy jej poszczególnych elementów (%p); prototyp funkcji: void Pisz(plista pocz);

Deklaracje typów danych oraz prototypy funkcji umieścić w pliku nagłówkowym prot.h, definicje funkcji umieścić w pliku defs.cpp, program główny nazwać kolejka.cpp. W programie głównym umieścić plista pocz, kon. Utworzyć projekt i skompilować.

Przetestować funkcje w programie. Przed zakończeniem programu zwolnić pamięć.

3. Zdefiniować listę dwukierunkową w sposób następujący:

typedef int tdana; // typ danej klucza

typedef struct tlistad *plistad; // wskaźnik na element listy struct tlistad { tdana klucz; plistad nast, pop; }; // element listy

Przyjąć, że zmienna pocz typu plistad wskazuje na początek listy.

(2)

Opracować następujące funkcje:

a) dodającą element do listy z zachowaniem porządku klucza (np. wczytywanie danych z pliku z zachowaniem porządku klucza, tj. dane z pliku ustawić na liście zgodnie z rosnącymi lub malejącymi wartościami klucza);

b) znajdującą wskaźnik pierwszego elementu o podanej wartości klucza;

c) usuwającą pierwszy element o podanej wartości klucza;

d) wyprowadzającą zawartość listy oraz adresy jej elementów na ekran.

Przetestować opracowane funkcje w programie głównym.

4. Utworzyć listę dwukierunkową złożoną z N losowych elementów typu tdana, gdzie N jest liczbą typu int wprowadzaną z klawiatury (tj. wpisać losowe dane do listy). Opracować następujące funkcje:

a) wyprowadzającą zawartość listy na ekran;

b) obliczającą sumę elementów;

c) sortującą elementy wprowadzone do listy (tj. posortować dane wpisane do listy).

Przetestować opracowane funkcje w programie głównym.

Cytaty

Powiązane dokumenty

Zadanie Do zbioru reprezentowanego przez drzewo D dołączyć element e, o ile nie należy on jeszcze do etykiet drzewa D.... Zastosowanie: wyszukiwanie

Powiemy, że problem jest rozstrzygalny, jeśli istnieje algorytm, który dla dowolnych danych x po skończonej liczbie kroków daje rozwiązanie problemu. W przeciwnym

Na stronie Pobierz certyfikat urzędu certyfikacji, łańcuch certyfikatów lub listę CRL (Retrieve the CA certificate or certificate revocation list), wybrać Zainstaluj jego łańcuch

b) usunięcie elementu z początku kolejki (wierzchołka stosu); zwolnić pamięć, zmodyfikować wskaźnik początku kolejki (stosu); prototyp funkcji void Usun(pnode &pocz,

c) usunięcie elementu o podanej wartości klucza (zadanie dla chętnych); funkcja powinna odnaleźć element, zmodyfikować strukturę drzewa, a następnie zwolnić

b) Opracować funkcję wyprowadzającą zawartość struktury typu tosoba na ekran (parametrem funkcji jest zmienna typu tosoba). Zainicjować zmienną stud wartościami

Wyznaczyć czasy działania algorytmów w przypadku sortowania tablicy liczb całkowitych (wykorzystać funkcję pomiaru czasu). Wyprowadzić na ekran czasy

W programie głównym zdefiniować tablicę tab typu ttab oraz zmienną ile typu unsigned, w której pamiętana jest liczba struktur wprowadzonych do tablicy