diff --git a/ASD_Task_4.cbp b/ASD_Task_4.cbp
index 4951420..4c18bb7 100644
--- a/ASD_Task_4.cbp
+++ b/ASD_Task_4.cbp
@@ -35,6 +35,9 @@
+
+
+
diff --git a/ASD_Task_4.depend b/ASD_Task_4.depend
index a544662..05618d0 100644
--- a/ASD_Task_4.depend
+++ b/ASD_Task_4.depend
@@ -19,3 +19,23 @@
"player.h"
+1583590871 source:c:\users\asus\documents\github\asd_task_4\main.cpp
+ "player.h"
+ "list.h"
+
+
+1583490921 c:\users\asus\documents\github\asd_task_4\player.h
+ "list.h"
+
+1583590871 c:\users\asus\documents\github\asd_task_4\list.h
+
+
+
+
+1583591031 source:c:\users\asus\documents\github\asd_task_4\player.cpp
+ "player.h"
+
+
+1583581414 source:c:\users\asus\documents\github\asd_task_4\list.cpp
+ "list.h"
+
diff --git a/ASD_Task_4.layout b/ASD_Task_4.layout
index 5ec49e7..ba99d9e 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..4b0ed98
Binary files /dev/null and b/bin/Debug/ASD_Task_4.exe differ
diff --git a/list.cpp b/list.cpp
index 847a957..4e37612 100644
--- a/list.cpp
+++ b/list.cpp
@@ -4,9 +4,7 @@ void createList(List &L) {
/**
* FS : first(L) diset Nil
*/
- //------------- YOUR CODE HERE -------------
-
- //----------------------------------------
+ first(L)=NULL;
}
address allocate(infotype x) {
@@ -16,9 +14,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;
}
@@ -26,9 +25,7 @@ void deallocate(address &P) {
/**
* FS : menghapus elemen yang ditunjuk oleh P (delete)
*/
- //------------- YOUR CODE HERE -------------
-
- //----------------------------------------
+ delete P;
}
void insertFirst(List &L, address P) {
@@ -36,9 +33,17 @@ void insertFirst(List &L, address P) {
* IS : List L mungkin kosong
* 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;
+ }
}
void insertLast(List &L, address P) {
@@ -46,9 +51,14 @@ void insertLast(List &L, address P) {
* IS : List L mungkin kosong
* 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;
+ }
}
address findElmByID(List L, infotype x) {
@@ -59,9 +69,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;
}
@@ -73,9 +87,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;
}
@@ -84,9 +102,23 @@ void deleteFirst(List &L, address &P) {
* IS : List L mungkin kosong
* FS : elemen pertama 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;
+ }else if (prev(first(L))==next(first(L))){
+ first(L)=next(P);
+ next(first(L))=first(L);
+ prev(first(L))=first(L);
+ next(P)=NULL;
+ prev(P)=NULL;
+ }else{
+ first(L)=next(P);
+ next(prev(P))=first(L);
+ prev(first(L))=prev(P);
+ next(P)=NULL;
+ prev(P)=NULL;
+ }
}
void deleteLast(List &L, address &P) {
@@ -94,9 +126,20 @@ void deleteLast(List &L, address &P) {
* IS : List L mungkin kosong
* FS : elemen tarakhir di dalam List L dilepas dan disimpan/ditunjuk oleh P
*/
- //------------- YOUR CODE HERE -------------
-
- //----------------------------------------
+ P=prev(first(L));
+ if (P==first(L)){
+ deleteFirst(L, P);
+ }else if(prev(first(L))==next(first(L))){
+ next(first(L))=first(L);
+ prev(first(L))=first(L);
+ next(P)=NULL;
+ prev(P)=NULL;
+ }else{
+ next(prev(P))=first(L);
+ prev(first(L))=prev(P);
+ next(P)=NULL;
+ prev(P)=NULL;
+ }
}
void insertAfter(List &L, address &Prec, address P) {
@@ -105,9 +148,10 @@ void insertAfter(List &L, address &Prec, address P) {
* FS : elemen yang ditunjuk P menjadi elemen di belakang elemen yang
* 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) {
@@ -116,8 +160,16 @@ void deleteAfter(List &L, address &Prec, address &P) {
* FS : elemen yang berada di belakang elemen Prec dilepas
* dan disimpan/ditunjuk oleh P
*/
- //------------- YOUR CODE HERE -------------
-
- //----------------------------------------
+ P=next(Prec);
+ if (P==first(L)){
+ deleteFirst(L, P);
+ }else if (P==prev(first(L))){
+ deleteLast(L, P);
+ }else{
+ next(Prec)=next(P);
+ prev(next(P))=Prec;
+ next(P)=NULL;
+ prev(P)=NULL;
+ }
}
diff --git a/list.h b/list.h
index 4468d0f..cca5f52 100644
--- a/list.h
+++ b/list.h
@@ -28,17 +28,13 @@ 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..67e85e8 100644
--- a/main.cpp
+++ b/main.cpp
@@ -121,12 +121,8 @@ void runMenu(int menu) {
break;
case 2:
// insert last music
- //------------- YOUR CODE HERE -------------
- cout<<"UNDER MAIN TENIS"<>x.name;
P = findElmByName(L, x);
if(P != NULL){
cout<<"music found"<>x.ID;
+ P=findElmByID(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..840e324
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..d235777
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..577c5e7
Binary files /dev/null and b/obj/Debug/player.o differ
diff --git a/player.cpp b/player.cpp
index 31ef288..bc09659 100644
--- a/player.cpp
+++ b/player.cpp
@@ -42,11 +42,28 @@ void shuffleList(List &L) {
* PR : mengacak isi (elemen) dari list L
* FS : isi (elemen) dari list teracak
*/
- //------------- YOUR CODE HERE -------------
-
- cout<<"UNDER MAIN TENIS"< 0)
+ {
+ P = first(L);
+ int j = randomInt(i);
+ while( j != 0)
+ {
+ P = next(P);
+ j--;
+ }
+ address Q = P;
+ deleteAfter(L, prev(P), Q);
+ insertFirst(L, Q);
+ i--;
+ }
}
void playRepeat(List &L, int n) {
@@ -55,8 +72,15 @@ void playRepeat(List &L, int n) {
* dari lagu pertama hingga terakhir sebanyak n kali
*/
//------------- YOUR CODE HERE -------------
-
- cout<<"UNDER MAIN TENIS"<