Linked List II
-Double Linked List
Double Linked List ialah sekumpulan node data yang terurut linear atau sekuensial dengan dua buah pointer yaitu prev dan next.
Double Linked memiliki proses Insert, Delete dan Search
1. Insert
Insert terbagi dua yaitu, Insert belakang dan Insert Depan
a. Insert Belakang : Penyisipan di awal list, sehingga pointer head juga akan berpindah ke elemen baru.
if(head == NULL)
{
head=tail=curr;
}
else
{
tail->next=curr;
curr->prev=tail;
tail=curr;
}
b. Insert Depan : Penyisipan di akhir list, sehingga pointer tail juga akan berpindah ke elemen baru.
if(head == NULL)
{
head=tail=curr;
}
else
{
head->prev=curr;
curr->next=head;
head=curr;
}
2. Delete
Delete terbagi dua yaitu, Delete Depan, Delete Belakang.
a. Delete Depan : penghapusan di awal list, pointer head akan berpindah ke node selanjutnya,sementara node awal akan di alokasi.
if(head == tail){
head=tail=NULL;
free(head);
}
else{
data *temp=head;
head=head->next;
head->prev=NULL;
temp->next=NULL;
free(temp);
}
b, Delete belakang :Penghapusan di akhir list, pointer tail akan berpindah ke node sebelumnya,sementara node akhir akan di alokasi.
if(head==tail)
{
head=tail=NULL;
free(head);
}
else
{
data *temp=tail;
tail=tail->prev;
tail->next=NULL;
temp->prev=NULL;
free(temp);
}
3. Search itu mencari dan mengurutkan nilai terkecil hingga terbesar atau sebaliknya. Search pun terbagi dua, search Insert dan search delete
Search Delete jika di implementasikan ke bahasa C yaitu:
if(head==NULL){ //kondisi 1
printf("No Data!\n");
}
else if(head==tail){ //kondisi 2
head=tail=NULL;
free(head);
}
else if(head->angka==curr->angka){ //kondisi 3
popHead();
}
else if(tail->angka==curr->angka){ //kondisi 4
popTail();
}
else{
data *temp=head; //kondisi 5
while(temp!=NULL){
if(temp->angka==curr->angka){
break;
}
temp=temp->next;
}
temp->next->prev=temp->prev;
temp->prev->next=temp->next;
temp->next=NULL;
temp->prev=NULL;
free(temp);
}
Search Insert jika di implementasikan ke bahasa C yaitu:
if(head == NULL)
{
head=tail=curr;
}
else if(curr->angka < head->angka)
{
pushHead(curr);
}
else if(curr->angka > tail->angka)
{
pushTail(curr);
}
else
{
data *temp=head;
while(temp->next->angka < curr->angka)
{
temp=temp->next;
}
curr->next=temp->next; //1
temp->next->prev=curr; //2
temp->next=curr; // 3
curr->prev=temp; // 4
}
Sumber:
PPT BINUS
https://rizkidoank.com/2016/10/17/double-linked-list/
No comments:
Post a Comment