diff --git a/ASD_Task_4.depend b/ASD_Task_4.depend index a544662..d0b9ee4 100644 --- a/ASD_Task_4.depend +++ b/ASD_Task_4.depend @@ -19,3 +19,23 @@ "player.h" +1583302833 source:d:\github\asd_task_4\main.cpp + "player.h" + "list.h" + + +1582798164 d:\github\asd_task_4\player.h + "list.h" + +1583304130 d:\github\asd_task_4\list.h + + + + +1583304597 source:d:\github\asd_task_4\player.cpp + "player.h" + + +1583304130 source:d:\github\asd_task_4\list.cpp + "list.h" + diff --git a/ASD_Task_4.layout b/ASD_Task_4.layout index 5ec49e7..c41f852 100644 --- a/ASD_Task_4.layout +++ b/ASD_Task_4.layout @@ -2,29 +2,29 @@ - + - + - + - + - + - + - + - + - + diff --git a/bin/Debug/ASD_Task_4.exe b/bin/Debug/ASD_Task_4.exe new file mode 100644 index 0000000..9cc4777 Binary files /dev/null and b/bin/Debug/ASD_Task_4.exe differ diff --git a/list.cpp b/list.cpp index 847a957..ee8bcfe 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,10 @@ address allocate(infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = new elmlist ; + info(P) = x ; + next(P) = NULL ; + prev(P) = NULL ; //---------------------------------------- return P; } @@ -27,7 +30,7 @@ void deallocate(address &P) { * FS : menghapus elemen yang ditunjuk oleh P (delete) */ //------------- YOUR CODE HERE ------------- - + delete(P) ; //---------------------------------------- } @@ -37,7 +40,20 @@ void insertFirst(List &L, address P) { * FS : elemen yang ditunjuk P menjadi elemen pertama pada List L */ //------------- YOUR CODE HERE ------------- - + if (first(L) == NULL) + { + first(L) = P ; + next(P) = P ; + prev(P) = P ; + } + else + { + next(P) = first(L) ; + prev(P) = prev(first(L)) ; + next(prev(first(L))) = P ; + prev(first(L)) = P ; + first(L) = P ; + } //---------------------------------------- } @@ -47,7 +63,19 @@ void insertLast(List &L, address P) { * FS : elemen yang ditunjuk P menjadi elemen terakhir pada List L */ //------------- YOUR CODE HERE ------------- - + address Prec ; + Prec = first(L) ; + 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 +88,16 @@ address findElmByID(List L, infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = first(L) ; + do + { + P = next(P) ; + } + while ((P != first(L)) && (x.ID != info(P).ID)) ; + if ((P == first(L)) && (info(P).ID != x.ID)) + { + return NULL ; + } //---------------------------------------- return P; } @@ -74,7 +111,16 @@ address findElmByName(List L, infotype x) { address P = NULL; //------------- YOUR CODE HERE ------------- - + P = first(L) ; + do + { + P = next(P) ; + } + while ((P != first(L)) && (x.name != info(P).name)) ; + if ((P == first(L)) && (info(P).name != x.name)) + { + return NULL ; + } //---------------------------------------- return P; } @@ -85,7 +131,21 @@ 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) ; + if (next(P) == first(L)) + { + first(L) = NULL ; + next(P) = NULL ; + prev(P) = NULL ; + } + else + { + first(L) = next(first(L)) ; + next(prev(P)) = first(L) ; + prev(first(L)) = prev(P) ; + next(P) = NULL ; + prev(P) = NULL ; + } //---------------------------------------- } @@ -95,7 +155,19 @@ void deleteLast(List &L, address &P) { * FS : elemen tarakhir di dalam List L dilepas dan disimpan/ditunjuk oleh P */ //------------- YOUR CODE HERE ------------- - + P = first(L) ; + if (next(P) == first(L)) + { + next(P) = NULL ; + prev(P) = NULL ; + first(L) = NULL ; + } + else + { + P = prev(first(L)) ; + next(prev(first(L))) = next(P) ; + prev(first(L)) = prev(P) ; + } //---------------------------------------- } @@ -106,9 +178,11 @@ void insertAfter(List &L, address &Prec, address P) { * ditunjuk pointer Prec */ //------------- YOUR CODE HERE ------------- - + prev(next(Prec)) = P ; + next(P) = next(Prec) ; + next(Prec) = P ; + prev(P) = Prec ; //---------------------------------------- - } void deleteAfter(List &L, address &Prec, address &P) { /** @@ -117,7 +191,50 @@ void deleteAfter(List &L, address &Prec, address &P) { * dan disimpan/ditunjuk oleh P */ //------------- YOUR CODE HERE ------------- - + P = next(Prec) ; + if (next(next(Prec)) == Prec) + { + next(P) = NULL ; + prev(P) = NULL ; + next(Prec) = Prec ; + prev(Prec) = Prec ; + } + else + { + next(Prec) = next(P) ; + prev(next(P)) = Prec ; + next(P) = NULL ; + prev(P) = NULL ; + } //---------------------------------------- } + +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,Q ; + P = first(L) ; + if ((P == NULL) || (info(P).ID > x.ID)) + { + insertFirst(L,allocate(x)) ; + } + else if (findElmByID(L,x) == NULL) + { + while ((P != NULL) && (info(P).ID < x.ID)) + { + Q = P ; + P = next(P) ; + } + insertAfter(L,Q,allocate(x)); + } + //---------------------------------------- +} diff --git a/list.h b/list.h index 4468d0f..ca5ea21 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 ; //---------------------------------------- }; @@ -61,5 +61,6 @@ void deleteAfter(List &, address &, address &); address findElmByID(List, infotype ); address findElmByName(List, infotype ); +///void insertAndSort(List &L, infotype x) ; #endif // LIST_H_INCLUDED diff --git a/main.cpp b/main.cpp index a66a5c1..9432757 100644 --- a/main.cpp +++ b/main.cpp @@ -122,10 +122,8 @@ void runMenu(int menu) { case 2: // insert last music //------------- YOUR CODE HERE ------------- - cout<<"UNDER MAIN TENIS"<>x.ID; + P = findElmByName(L, x); + if(P != NULL){ + cout<<"music found"<>x.name; + cin>>x.ID; deleteMusicByID(L, x); cout<<"press enter";getche(); break; diff --git a/obj/Debug/list.o b/obj/Debug/list.o new file mode 100644 index 0000000..c854853 Binary files /dev/null and b/obj/Debug/list.o differ diff --git a/obj/Debug/main.o b/obj/Debug/main.o new file mode 100644 index 0000000..475372f Binary files /dev/null and b/obj/Debug/main.o differ diff --git a/obj/Debug/player.o b/obj/Debug/player.o new file mode 100644 index 0000000..3adf8b0 Binary files /dev/null and b/obj/Debug/player.o differ diff --git a/player.cpp b/player.cpp index 31ef288..23176e5 100644 --- a/player.cpp +++ b/player.cpp @@ -14,12 +14,20 @@ void printInfo(List L) { */ address Q = first(L); - do { - cout<<"name : "< 0) + { + P = first(L) ; + k = randomInt(i) ; + while (k != 0) + { + P = next(P) ; + k-- ; + } + Q = P ; + deleteAfter(L,prev(P),Q) ; + insertFirst(L,Q) ; + i-- ; + } //---------------------------------------- } @@ -55,8 +84,20 @@ void playRepeat(List &L, int n) { * dari lagu pertama hingga terakhir sebanyak n kali */ //------------- YOUR CODE HERE ------------- - - cout<<"UNDER MAIN TENIS"<