diff --git a/list.cpp b/list.cpp index 847a957..31b6c2c 100644 --- a/list.cpp +++ b/list.cpp @@ -5,7 +5,7 @@ void createList(List &L) { * FS : first(L) diset Nil */ //------------- YOUR CODE HERE ------------- - + first(L) = NULL; //---------------------------------------- } @@ -17,7 +17,12 @@ address allocate(infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = new elmlist; + info(P).ID = x.ID; + info(P).location = x.location; + info(P).name = x.name; + next(P) = NULL; + prev(P) = NULL; //---------------------------------------- return P; } @@ -27,7 +32,7 @@ void deallocate(address &P) { * FS : menghapus elemen yang ditunjuk oleh P (delete) */ //------------- YOUR CODE HERE ------------- - + delete P; //---------------------------------------- } @@ -37,7 +42,17 @@ void insertFirst(List &L, address P) { * FS : elemen yang ditunjuk P menjadi elemen pertama pada List L */ //------------- YOUR CODE HERE ------------- - + if (first(L) != NULL){ + next(P) = first(L); + prev(P) = prev(first(L)); + next(prev(first(L))) = P; + prev(first(L)) = P; + first(L) = P; + } else{ + first(L) = P; + next(first(L)) = P; + prev(first(L)) = P; + } //---------------------------------------- } @@ -47,7 +62,14 @@ void insertLast(List &L, address P) { * FS : elemen yang ditunjuk P menjadi elemen terakhir pada List L */ //------------- YOUR CODE HERE ------------- - + if (first(L) == NULL) { + insertFirst(L, P); + } else { + next(P) = first(L); + prev(P) = prev(first(L)); + next(prev(first(L))) = P; + prev(first(L)) = P; + } //---------------------------------------- } @@ -60,7 +82,13 @@ address findElmByID(List L, infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = first(L); + do { + P = next(P); + } while (P != first(L) && info(P).ID != x.ID); + if (P == first(L) && info(P).ID != x.ID) { + return NULL; + } //---------------------------------------- return P; } @@ -74,7 +102,13 @@ address findElmByName(List L, infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = first(L); + do { + P = next(P); + } while (P != first(L) && info(P).name != x.name); + if (P == first(L) && info(P).name != x.name) { + return NULL; + } //---------------------------------------- return P; } @@ -85,7 +119,12 @@ void deleteFirst(List &L, address &P) { * FS : elemen pertama di dalam List L dilepas dan disimpan/ditunjuk oleh P */ //------------- YOUR CODE HERE ------------- - + P = first(L); + next(prev(first(L))) = next(first(L)); + prev(next(first(L))) = prev(first(L)); + first(L) = next(first(L)); + next(P) = NULL; + prev(P) = NULL; //---------------------------------------- } @@ -95,7 +134,15 @@ void deleteLast(List &L, address &P) { * FS : elemen tarakhir di dalam List L dilepas dan disimpan/ditunjuk oleh P */ //------------- YOUR CODE HERE ------------- - + if (first(L) == NULL) { + deleteFirst(L, P); + } else { + P = prev(first(L)); + next(prev(P)) = first(L); + prev(first(L)) = prev(P); + next(P) = NULL; + prev(P) = NULL; + } //---------------------------------------- } @@ -106,7 +153,14 @@ void insertAfter(List &L, address &Prec, address P) { * ditunjuk pointer Prec */ //------------- YOUR CODE HERE ------------- - + if (first(L) == NULL) { + insertFirst(L, P); + } else { + next(P) = next(Prec); + prev(P) = Prec; + prev(next(Prec)) = P; + next(Prec) = P; + } //---------------------------------------- } @@ -117,7 +171,11 @@ void deleteAfter(List &L, address &Prec, address &P) { * dan disimpan/ditunjuk oleh P */ //------------- YOUR CODE HERE ------------- - + P = next(Prec); + next(Prec) = next(P); + prev(next(P)) = Prec; + next(P) = NULL; + prev(P) = NULL; //---------------------------------------- } diff --git a/list.h b/list.h index 4468d0f..894c0fe 100644 --- a/list.h +++ b/list.h @@ -29,15 +29,15 @@ typedef struct elmlist *address; struct elmlist { //------------- YOUR CODE HERE ----------- - - - //---------------------------------------- + infotype info; + address next; + address prev; + //------------------------------------------ }; struct List { //------------- YOUR CODE HERE ----------- - - + address first; //---------------------------------------- }; diff --git a/main.cpp b/main.cpp index a66a5c1..82d0408 100644 --- a/main.cpp +++ b/main.cpp @@ -122,9 +122,8 @@ void runMenu(int menu) { case 2: // insert last music //------------- YOUR CODE HERE ------------- - cout<<"UNDER MAIN TENIS"<>x.ID; + P = findElmByID(L,x); + if (P != NULL){ + cout<<"Musiknya ada lur\n"; + } //---------------------------------------- cout<<"press enter";getche(); @@ -182,8 +186,10 @@ void runMenu(int menu) { case 10: // play previous music //------------- YOUR CODE HERE ------------- - cout<<"UNDER MAIN TENIS"< 0){ + P = first(L); + int i = randomInt(count); + while(i != 0){ + P = next(P); + i -= 1; + } + address Q = P; + deleteAfter(L,prev(P),Q); + insertFirst(L,Q); + count -= 1; + } //---------------------------------------- } @@ -55,8 +70,15 @@ void playRepeat(List &L, int n) { * dari lagu pertama hingga terakhir sebanyak n kali */ //------------- YOUR CODE HERE ------------- - - cout<<"UNDER MAIN TENIS"<