-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.c
88 lines (78 loc) · 2.11 KB
/
test.c
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
#include <stdio.h>
#include <stdlib.h>
struct dnode{
int data; struct dnode *next, *prev;
};
struct dnode *mkNode(int val){
struct dnode *node = NULL;
if ((node = malloc(sizeof (struct dnode))) != NULL) {
node->data = val; node->next = node->prev = NULL;
return node;
}
else { perror("Error"); return NULL; }
}
struct dnode *head, *tail;
void delete (int val) {
struct dnode *p = head, *prev = NULL;
while (p != NULL && p->data != val) {
prev = p;
p = p->next;
} // p == NULL || p->data == val
if (p != NULL) { // p->data == val
if (p == head) {
head = p->next;
} else {
prev->next = p->next;
}
free(p);
}
}
void insertFirst (int val) {
struct dnode *p = mkNode(val);
if (head != NULL) {
p->next = head;
head->prev = p;
}
head = p;
}
void printList(void){
struct dnode *tmp = head;
printf("(");
while(tmp != NULL){
printf(" %d", tmp->data);
tmp = tmp->next;
}
printf(" )\n");
}
int main(void) {
//Berechnung der Primzahlen bis 100
//Array mit Zahlen von 2 bis 100:
int eratosthenes[99];
for (int i = 2; i <= 100; i++) {
eratosthenes[i - 2] = i;
}
//Alle nicht-primen Zahlen werden auf 0 gesetzt (Sieb des Eratosthenes):
for (int i = 0; i < 99; i++) {
if (eratosthenes[i] != 0) {
//Vielfache der aktuellen Zahl eratosthenes[i] auf 0 setzen
for (int j = i + 1; j < 99; j++) {
if (eratosthenes[j] % eratosthenes[i] == 0) eratosthenes[j] = 0;
}
}
}
for (int i = 99; i > 0; i--) {
if (eratosthenes[i] != 0) {
insertFirst(eratosthenes[i]);
}
}
//Aus irgendeinem Grund ist die 2 nicht in meiner Liste (obwohl ich prinzipiell den selben Code wie in HA 8 verwende und sie da natürlich drin ist).
//Deswegen füge ich die 2 so ein.
//insertFirst(2);
printList();
printf("Welche Zahl soll geloescht werden?");
int zahl;
scanf("%d", &zahl);
delete(zahl);
printList();
return 0;
}