1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
|
#include <stdio.h>
#include <stdlib.h>
typedef struct ls{ //Definition des Datentyps Listenelement
int value;
struct ls * next;
} listelement; //Datentyp wird "Listenelement" genannt
typedef listelement * list; //"list" wird angelegt, mit Pointer auf das erste Element
void insert(int v, list * l) { //Die Funktion "insert" übernimmt einen Wert "v" und die Liste "list" als Parameter
listelement * new; //Ein neues Listenelement wird angelegt
new = malloc(sizeof(listelement)); //Speicherreservierung mittels malloc
new->value = v;
new->next = *l;
*l = new; //Das neue Listenelement hat den Wert "v" sowie einen Zeiger auf ihn, und auf das folgende Element
}
int delete_head (list * l) { //Die Funktion "delete_head"
if (*l == NULL) return -1;
list old = *l;
*l = old->next;
free(old);
return 0;
}
void print_list(list l) { //Die Funktion "print_list" gibt die Elemente der Parameter-Listen aus
if (l == NULL) printf("Leere Liste!\n");//Testfall, ob die Liste leer ist
else
while (l != NULL) {
printf("%d ", l->value); //Solange die Liste nicht am Ende ist, wird der Wert des aktuellen Elements ausgegeben
l = l->next; //"l" ist nun das nächste Listenelement
}
}
int length(list l) { //Die Funktion berechnet die Länge der Liste "l"
int count = 0; //Der Counter wird auf 0 gesetzt
while(l != NULL) {
count++; //Solange die Liste nicht am Ende ist, wird der counter um 1 erhöht
l = l->next;
}
return count; //Die Länge der Liste wird zurückgegeben
}
void delete_all(list * l) { //Die Funktion delete_all löscht die gesamte Liste "l"
list next; //Next wird deklariert
while (*l != NULL) {
next = (*l)->next; //Next wird auf den * des nächsten Listenelements gesetzt
free(*l); //Der aktuelle * von l (vorheriges Element) wird freigesetzt
*l = next; // "*l" wird auf das nächste Listenelement gesetzt
}
}
int positionOf(int v, list l) {
int i = 0; //Der Counter i, der die Position des gesuchten Wertes darstellt
while( l != NULL) { //Die Liste wird solange durchsucht, bis sie am Ende ("NULL") ist
if (v == l->value) {
return i; //Wenn der gesuchte Wert "v" dem aktuellen Listenelement entspricht, gebe "i" zurück
}
i++;
l = l->next; //Falls es nicht der gesuchte Wert war, wird der Counter erhöht und das das nächste Listenelement wird übernommen
}
if (l == NULL) return -1; //Ist der gesuchte Wert nicht in der Liste, so wird -1 zurückgegeben
}
void filterEven(list * l) {
list next;
while (l != NULL) { //?Korrekte Anwendung
if ((*l)->value % 2 == 1) { //?Klappt das?
next = (*l)->next;
free(*l);
}
else {
next = (*l)->next;
}
}
}
// function to sort a singly linked list using insertion sort
int main () {
listelement * list;
insert(5, );
print_list(*list);
return 0;
} |