SENARAI BERANTAI DUA ARAH (DOUBLE LINKED LIST)
Senarai Berantai Dua Arah (Double Linked List) merupakan bentuk pengembangan Senarai Berantai (Link List) yang tidak hanya memiliki pointer yang menunjuk ke elemen berikutnya (Next Element), tapi juga memiliki pointer yang menunjuk ke elemen sebelumnya (Prev Element). Sehingga setiap node/simpul dalam double linked list dibagi dalam 3 medan yaitu:
Medan penyambung ke elemen berikutnya (Next) Medan penyambung ke
elemen sebelumnya (Prev) Info
Model Logika Head
Ika Ira Ida
Irna
Model Fisik
Alm Prev Info Next 1 2 Ida 0 2 5 Ira 1 3 0 Irna 5 4 5 3 Ika 2 Head
3
PENDEKLARASIAN SIMPUL (NODES)
typedef struct nodestr *node;
struct nodestr {
int info;
node prev, next; };
node head, search, last, temp;
Operasi pada Double Link List
1. Traversing
2. Inserting
Seperti halnya single linked list, operasi inserting dalam double linked list juga dibedakan dalam tiga posisi penyisipan yaitu: sebagai elemen pertama (di awal list), sebagai elemen terakhir, dan di tengah list.
2.1 Sebagai Elemen Pertama / Di Awal List
Algoritma Menyisipkan Elemen Pada Awal List
InsertFirst_DLL(Head, X) Malloc(Temp);
Temp->Info = X; Temp->Prev = NULL;
If (Head = NULL) Then Temp->Next = NULL Else Begin
Temp->Next = Head; Head->Prev = Temp; End;
Head = Temp; Return Return
2.2 Penyisipan elemen sebagai elemen terakhir (di akhir list)
Algoritma menyisipkan elemen di akhir list
INSERTLAST_DLL(HEAD, X) Malloc(Temp);
Temp->Next = NULL;
If (Head = NULL) Then Temp->Prev = NULL; Head = Temp;
Else Begin
P = Head;
While (P->Next != NULL)Do {cari alm elemen terakhir} P = P->Next;
Eofwhile
P->Next = Temp; Temp->Prev = P; Endif;
2.3 Menyisipkan elemen sebagai elemen ke N yang baru (1 < N < ∑ elemen)
Algoritma Menyisipkan di tengah Link List
InsertN_DLL(Head, X, N)
Malloc(Temp); Temp->Info = X;
FindK(Head, N-1, P); //Cari alamat elemen ke N-1
If P = NULL
Write(‘Elemen ke : ‘,N-1,’tidak ada’); Free(Temp);
Else
Temp->Next = P->Next; Temp->Prev = P;
P->Next->Prev = Temp; P->Next = Temp;
Endif Return
3. Deleting
3.1 Hapus elemen pertama
Algoritma Deleting Elemen Pertama Pada Double Link List
Head
Irna Ika Ira
P 3 2
4
Ida
DeleteFirst_DLL(Head) If (Head = NULL)
Write(‘List Kosong !’) Else
P = Head; { Step 1 }
If (P->Next != NULL) { List Lebih Dari 1 Elemen } Head = P->Next; { Step 2 }
Head->Prev = NULL; { Step 3 } Else
Head = NULL; { List Hanya 1 Elemen} EndIf
SENARAI BERANTAI DENGAN KEPALA DAN EKOR
Senarai berantai dengan kepala dan ekor adalah senarai berantai yang sering digunakan dalam mensimulasikan antrian (QUEUE)
Model Logika
Head
Ika Ida
Tail Ira
SENARAI BERANTAI DUA ARAH BERPUTAR
CI RCULAR D OUBLE LI N K LI ST ( CD LL)
Senarai Berantai Dua Arah Berputar (circular double link list) merupakan bentuk pengembangan Senarai Berantai Dua Arah (double link list), dimana pointer Next Element Terakhir menunjuk Elemen Pertama dan Prev Elemen Pertama menunjuk Elemen Terakhir, sehingga tidak ada pointer yang bernilai NULL, kecuali list dalam keadaan kosong
Model Logika
Head
Irna
Model Fisik
Alm Prev Info Next 1 2 Ida 3 2 5 Ira 1 3 1 Irna 5 4 5 3 Ika 2 Head
Irna Ika Ira Ida
Head 3
Circular double linked list dengan 1 elemen Circular double linked list dengan 4 elemen
Operasi pada CDLL 1. Operasi Travesing
Algoritma traversing sama dengan algoritma traversing pada circular single link list 2. Operasi Inserting
2.1 Algoritma Inserting Elemen Di Awal Circular Double Link List InsertFirst_CDLL(Head, X)
Malloc(Temp); Temp->Info = X; If (Head = NULL)
Temp->Next = Temp; Temp->Prev = Temp;
Else