• Nie Znaleziono Wyników

Informatyka II. INF & EIT.

N/A
N/A
Protected

Academic year: 2021

Share "Informatyka II. INF & EIT."

Copied!
2
0
0

Pełen tekst

(1)

Informatyka II. INF & EIT. Ćwiczenie 11.

Listy

Zagadnienia: Projektowanie algorytmów wykorzystujących dynamiczne struktury informacyjne.

Obsługa listy jednokierunkowej i dwukierunkowej. Implementacja kolejki typu FIFO oraz LIFO (stosu) za pomocą listy. Definiowanie złożonych typów danych. Tworzenie projektów.

1. Zaprojektować funkcje obsługujące listę jednokierunkową określoną za pomocą następują- cych definicji:

typedef int tdana; // typ danej klucza

typedef struct node *pnode; // wskaźnik na element listy

typedef struct node { tdana klucz; pnode nast; }; // element listy

pnode pocz; // wskaźnik początku listy - program główny Deklaracje typów danych (typedef) oraz prototypy funkcji umieścić w pliku nagłówkowym prot.h, definicje funkcji umieścić w pliku defs.cpp, program główny nazwać lista.cpp. W pro- gramie głównym umieścić pnode pocz. Utworzyć projekt lista i skompilować.

Opracować funkcje umożliwiające:

a) dodanie na końcu listy elementu o podanej wartości klucza; funkcja przydziela dyna- micznie pamięć dla elementu i dołącza go do listy; prototyp funkcji:

void DodajElement(pnode& pocz, tdana klucz); lub void DodajElement(pnode* pocz, tdana klucz);

b) dodanie elementu z zachowaniem porządku klucza; funkcja powinna umieścić element w takim miejscu listy, aby klucze tworzyły ciąg rosnący; prototyp funkcji:

void DodajUporz(pnode& pocz, tdana klucz); lub void DodajUporz(pnode* pocz, tdana klucz);

c) usunięcie elementu z końca listy; funkcja powinna zwolnić pamięć przydzieloną elementowi; prototyp funkcji:

void UsunKoniec(pnode& pocz); lub void UsunKoniec(pnode* pocz);

d) odnalezienie elementu o podanej wartości klucza; funkcja zwraca wskaźnik do odnale- zionego elementu; prototyp funkcji: pnode ZnajdzElement(pnode pocz, tdana klucz);

e) usunięcie elementu o podanej wartości klucza; funkcja powinna odnaleźć element, zmie- nić powiązania w liście, a następnie zwolnić pamięć przydzieloną elementowi; prototyp funkcji: void UsunElement(pnode &pocz, tdana klucz); lub

void UsunElement(pnode *pocz, tdana klucz);

f) wyprowadzenie na ekran zawartości listy oraz adresów jej poszczególnych elementów;

prototyp funkcji: void PiszLista(pnode pocz).

Przetestować opracowane funkcje w programie głównym. Przed zakończeniem programu zwolnić pamięć.

(2)

2. Zaprojektować funkcje obsługi kolejek następujących typów (dwa rodzaje):

• FIFO,

• LIFO (stos),

zrealizowanych za pomocą listy jednokierunkowej określonej w poprzednim zadaniu.

Przyjąć pnode pocz, kon za wskaźniki, odpowiednio, początku i końca listy (kolejki, stosu).

Opracować funkcje umożliwiające:

a) dodanie elementu o podanej wartości klucza na końcu kolejki (umieszczenie elementu na stosie); przydzielić pamięć, zmodyfikować wskaźnik końca kolejki (wierzchołek stosu);

prototypy funkcji:

void Wstaw(pnode &pocz, pnode &kon, tdana klucz); // dla FIFO void Wstaw(pnode &pocz, tdana klucz); // dla LIFO

w przypadku kolejki typu FIFO wykorzystywane są parametry pocz i kon, natomiast w przypadku kolejki typu LIFO parametr pocz.

b) usunięcie elementu z początku kolejki (wierzchołka stosu); zwolnić pamięć, zmodyfiko- wać wskaźnik początku kolejki (stosu); prototypy funkcji:

void Usun(pnode &pocz, pnode &kon); // dla FIFO void Usun(pnode &pocz); // dla LIFO

c) wyprowadzenie na ekran zawartości kolejki (stosu) oraz adresów jej poszczególnych elementów (%p); prototyp funkcji: void Pisz(pnode pocz).

Przetestować opracowane funkcje w programie głównym. Przed zakończeniem programu zwolnić pamięć.

Cytaty

Powiązane dokumenty

Zdefiniować wskaźnik funkcji double f(double). Zainicjować wskaźnik adresem standar- dowej funkcji sin. Za pomocą wskaźnika wyznaczyć wartości funkcji sin w N losowych punktach

Opracować program umożliwiający przekazanie do programu trzech liczb typu int za pomocą argumentów funkcji main(int argc, char *argv[]), gdzie argc – liczba

Nie zmieniając zawartości tablicy struktur i nie kopiując jej do innej tablicy zmodyfi- kować tablicę indeksów w taki sposób, aby kolejne pozycje w tablicy ind określały

Opracować program, który zapisze do pliku binarnego dane w formacie: rozmiar danej typu tdana (zmienna typu unsigned), liczba danych w pliku (zmienna typu long), ciąg danych

Opracować funkcję, która wyznacza wszystkie liczby pierwsze z przedziału [2,N] w oparciu o metodę „sita” (opis: wpisać wszystkie liczby z przedziału [2,N] do tablicy t[N+1],

Napisać program, który losuje k cyfr liczby binarnej do tablicy unsigned char dane[N], gdzie 1<= k <= N, a następnie oblicza wartość dziesiętną liczby.. Zadanie zrealizować z

przydzielić dynamicznie pamięć zmiennym typu char, int, long, float, double oraz zapamię- tać ich adresy w odpowiednich wskaźnikach. W przypadku, gdy alokacja pamięci powiedzie

a) tworzącą dynamiczną tablicę 2-wymiarową typu int A[nw][nk] o liczbie wierszy i liczbie kolumn wczytywanych do zmiennych int nw, nk; funkcja typu int** zwraca adres po-