forked from ASD-ADF/ASD_Task_3
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoperation.cpp
More file actions
103 lines (89 loc) · 2.54 KB
/
operation.cpp
File metadata and controls
103 lines (89 loc) · 2.54 KB
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
#include "list.h"
#include "operation.h"
#include "my_data.h"
void insertAndSort(List &L, infotype x) {
/**
* IS : List may be empty
* PR : insert a new element into an already sorted-by-ID List L
* so that the elements inside List L is still sorted by ID.
* procedure must also check if such ID is already exists (No Duplicate ID).
* If new data has duplicate ID, new data is rejected.
* FS : elements in List L sorted by ID, P is inside List L
*/
//-------------your code here-------------
address P;
address Q;
P = allocate(x);
if(first(L) == NULL) {
insertFirst(L,P);
} else {
Q = findElm(L,info(P));
if (Q == NULL) {
address last = first(L);
while (next(last) != NULL) {
last = next(last);
}
if(info(P).ID <= info(first(L)).ID) {
insertFirst(L,P);
} else if (info(P).ID >= info(first(L)).ID) {
insertLast(L,P);
} else {
Q = first(L);
while (info(next(Q)).ID < info(P).ID) {
Q = next(Q);
}
insertAfter(L,Q,P);
}
} else {
cout<<"ID Duplikat"<<endl;
}
}
//----------------------------------------
}
void deletebyID(List &L, int id_x) {
/**
* IS : List L may be empty
* FS : an element with ID info = id_x is deleted from List L (deallocate)
*/
address Prec, P;
//-------------your code here-------------
infotype x;
x.ID = id_x;
P = findElm(L,x);
if (first(L) != NULL) {
if (P==first(L)) {
deleteFirst(L,P);
deallocate(P);
} else if(next(P)==NULL) {
deleteLast(L,P);
deallocate(P);
} else {
Prec = first(L);
while(next(Prec) != P) {
Prec = next(Prec);
}
deleteAfter(L,Prec,P);
}
}
//----------------------------------------
}
void savePassedMember(List &L, List &L2){
/**
* IS : List L and L2 may be empty
* FS : any element with score greater than 80 is moved to L2
*/
address P;
//-------------your code here-------------
List tmp;
createList(tmp);
while (first(L) != NULL) {
deleteFirst(L,P);
if (info(P).score > 80) {
insertAndSort(L2,info(P));
} else {
insertAndSort(tmp,info(P));
}
}
L = tmp;
//----------------------------------------
}