14 Listy jednokierunkowe
Wykorzystaj z zadaniach konwencją omawianą na wykładzie.
14.1 Bez funkcji
- W
mainstwórz listę bez głowy o trzech elementach 4,5,-12. Następnie w kolejnych wierszach wyświetl elementy znajdujące się na liście. Wykorzystaj strukturę:
struct element {
int x;
struct element * next;
};- W
mainstwórz listę z głową o trzech elementach 4,5,-12. Następnie w kolejnych wierszach wyświetl elementy znajdujące się na liście. Wykorzystaj strukturę:
struct element {
int x;
struct element * next;
};14.2 Wyświetlanie
- Napisz funkcję
printListWithoutHead, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma wyświetlić kolejne elementy listy w kolejnych wierszach lub wyświetlić komunikat, że lista jest pusta. Stwórz przypadek testowy.
- Napisz funkcję
printListWithHead, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma wyświetlić kolejne elementy listy w kolejnych wierszach lub wyświetlić komunikat, że lista jest pusta. Stwórz przypadek testowy.
- Napisz funkcję
printPos, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma wyświetlić te elementy listy, które są dodatnie. Stwórz przypadek testowy.
- Napisz funkcję
printOdd, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma wyświetlić te elementy listy, które są nieparzyste. Stwórz przypadek testowy.
14.3 Tworzenie listy
- Napisz bez-argumentową funkcję
createNoHead, która zwraca wskaźnik na “nowo-utworzoną” pustą listę bez głowy. Stwórz przypadek testowy. Wykorzystaj strukturę:
struct element {
int x;
struct element * next;
};- Napisz bez-argumentową funkcję
createWithHead, która zwraca wskaźnik na “nowo-utworzoną” pustą listę z głową. Stwórz przypadek testowy. Wykorzystaj strukturę:
struct element {
int x;
struct element * next;
};14.4 Dodawanie na początek
- Napisz funkcję
addFirst, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};oraz liczbę całkowitą a. Funkcja ma dodać na początek listy nowy element o wartości a. Stwórz przypadek testowy.
- Napisz funkcję
addFirst, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};oraz liczbę całkowitą a. Funkcja ma dodać na początek listy nowy element o wartości a. Stwórz przypadek testowy.
14.5 Dodawanie na koniec
- Napisz funkcję
addLast, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};oraz liczbę całkowitą a. Funkcja ma dodać na koniec listy nowy element o wartości a. Stwórz przypadek testowy.
- Napisz funkcję
addLast, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};oraz liczbę całkowitą a. Funkcja ma dodać na koniec listy nowy element o wartości a. Stwórz przypadek testowy.
14.6 Wyszukiwanie/liczniki
- Napisz funkcję
find, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};oraz liczbę całkowitą a. Funkcja ma zwrócić 1, jeśli co najmniej jeden element listy jest równy a oraz ma zwrócić 0 w pozostałych wypadkach. Stwórz przypadek testowy.
- Napisz funkcję
find, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};oraz liczbę całkowitą a. Funkcja ma zwrócić 1, jeśli co najmniej jeden element listy jest równy a oraz ma zwrócić 0 w pozostałych wypadkach. Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma zwrócić sumę elementów nieparzystych znajdujących się na liście. Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma zwrócić sumę elementów ujemnych znajdujących się na liście. Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma zwrócić adres ostatniego elementu parzystego lub NULL gdy takie elementu nie ma lub lista jest pusta. Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma zwrócić adres ostatniego elementu dodatniego lub NULL gdy takie elementu nie ma lub lista jest pusta. Stwórz przypadek testowy.
14.7 Usuwanie pojedynczych elementów
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma usunąć początkowy element na liście (o ile lista nie jest pusta). Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma usunąć początkowy element na liście (o ile lista nie jest pusta). Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma usunąć ostatni element na liście (o ile lista nie jest pusta). Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma usunąć ostatni element na liście (o ile lista nie jest pusta). Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma usunąć przedostatni element na liście (o ile lista ma co najmniej dwa elementy). Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma usunąć przedostatni element na liście (o ile lista ma co najmniej dwa elementy). Stwórz przypadek testowy.
14.8 Usuwanie całej listy
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma usunąć całą listę (ręcznie element za elementem). Po usunięciu upewnij się, że lista jest pusta zgodnie z konwencją. Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct element {
int x;
struct element * next;
};Funkcja ma usunąć całą listę (ręcznie element za elementem). Po usunięciu upewnij się, że lista jest pusta zgodnie z konwencją. Stwórz przypadek testowy.
14.9 Zadania różne
- Napisz funkcję, która otrzymuje jako argument listę bez głowy o elementach typu:
struct node {
int i;
struct node * next;
};Funkcja ma wyświetlić na konsoli w kolejnych wierszach wartości elementów na liście będących kwadratami liczb całkowitych. Stwórz przypadek testowy.
Przykład. Jeśli lista składa się z elementów 4,5,6,-34,0,25,11, to ma być wyświetlone w kolejnych wierszach: 4,0,25.
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct node {
double x;
struct node * next;
};i zwraca najmniejszą z liczb znajdujących się na liście. W przypadku pustej listy, funkcja ma zwrócić zero. Stwórz jeden przypadek testowy.
- Napisz funkcję, która otrzymuje jako argument listę bez głowy o elementach typu:
struct node {
int i;
struct node * next;
};Funkcja ma zdublować wartość ostatniego elementu, o ile lista jest nie pusta. W przypadku pustej listy, funkcja ma nic nie robić. Stwórz przypadek testowy.
Przykład: Dla listy 3,4,5 ma być zdublowana 5, więc po modyfikacji lista ma być postaci 3,4,5,5.
- Napisz funkcję, która otrzymuje jako argument listę z głową o elementach typu:
struct elem {
int a;
struct elem * next;
};Funkcja ma zdublować wartość ostatniego elementu, o ile lista jest nie pusta. W przypadku pustej listy, funkcja ma nic nie robić. Stwórz przypadek testowy.
Przykład: Dla listy 3,4,5 ma być zdublowana 5, więc po modyfikacji lista ma być postaci 3,4,5,5.
- Napisz funkcję, która porównuje dwie listy z głową o elementach typu:
struct node {
int i;
struct node * next;
};i zwraca 1 jeśli ostatnie elementy na liście są równe oraz 0 w pozostałych przypadkach (także wtedy gdy któraś z list lub obie są puste). Stwórz jeden przypadek testowy.
- Napisz funkcję, która porównuje dwie listy bez głowy o elementach typu:
struct node {
int a;
struct node * next;
};i zwraca 1 jeśli listy są takiej samej długości oraz 0 w pozostałych przypadkach (także wtedy, gdy któraś z list lub obie są puste). Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje dwie listy z głową o elementach typu:
struct node {
int value;
struct node * next;
};i zwraca 1 jeśli suma wszystkich elementów nieparzystych w obu listach jest taka sama oraz 0 w przeciwnym przypadku (także wtedy, gdy któraś z list lub obie są puste). Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje dwie listy bez głowy o elementach typu:
struct node {
int w;
struct node * next;
};i zwraca 1 jeśli suma wszystkich elementów parzystych w obu listach jest taka sama oraz 0 w przeciwnym przypadku (także wtedy, gdy któraś z list lub obie są puste). Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct node {
int x;
struct node * next;
};Funkcja ma zwrócić sumę elementów nieparzystych z listy. Stwórz jeden przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct elem {
int x;
struct elem * next;
};Funkcja ma podwoić wszystkie elementy dodatnie na liście (o ile istnieją). Stwórz jeden przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct node {
int y;
struct node * next;
};oraz dwie liczby całkowite a i b. Funkcja ma dodać na początek listy dwa nowe elementy i ich wartości ustawić odpowiednio z podanych argumentów. Stwórz jeden przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę bez głowy o elementach typu:
struct node {
int a;
struct node * next;
};oraz dwie liczby całkowite a i b. Funkcja ma dodać na początek listy dwa nowe elementy i ich wartości ustawić odpowiednio z podanych argumentów. Stwórz jeden przypadek testowy.
- Napisz funkcję, która otrzymuje jako argument listę bez głowy o elementach typu:
struct element {
float value;
struct element * next;
};Funkcja ma zamienić wartości każdego elementu na jego wartość bezwzględną. Dla listy pustej funkcja ma nic nie robić. Stwórz przypadek testowy.
- Napisz funkcję, która otrzymuje jako argument listę z głową o elementach typu:
struct node {
int val;
struct node * next;
};Funkcja ma zamienić wartości każdego elementu na jego wartość bezwzględną. Dla listy pustej funkcja ma nic nie robić. Stwórz przypadek testowy.
- Napisz funkcję, która przyjmuje jako argument listę z głową o elementach typu:
struct node {
int x;
struct node * next;
};oraz liczbę całkowitą d. Funkcja ma zwrócić ile na liście jest elementów równych d. Stwórz jeden przypadek testowy.