SENARAI BERANTAI BERPUTAR (CIRCULAR SINGLE LINK LIST)
Senarai Berantai Berputar (circular link list) merupakan bentuk pengembangan senarai berantai (link list) yang pointer elemen terakhirya (last element) menunjuk elemen pertama (Head).
Model Logika
Model Fisik
Head
Oleh karena itu algoritma Traversing, Inserting dan Deleting elemen pada Circular Link List agak sedikit berbeda dengan Link List biasa.
OPERASI DASAR PADA CIRCULAR SINGLE LINKED LIST
A. Operasi Traversing
Algoritma Traversing Circular Single Link List
TraversingCLL(head) If Head = Null
Write(‘List kosong’) Else
P = Head; Do
Write(P->Info); P = P->Next;
While P != Head; Endif
Return
Head
Irna Ika Ira Ida Indah
ALM INFO NEXT
1 Indah 4
2 Ika 6
3
4 Irna 2
5 Ida 1
6 Ira 5
B. Operasi Searching
Algoritma Mencari Alamat Elemen Ke-K Pada Circular Link List FindKCLL(Head, K, P)
If Head = NULL
Write(‘List kosong’) Else IF K=1 Then
P = Head; Else
I = 1; P = Head; Do
Inc(I);
P = P->Next;
While (P != head) && (I != K); Endif
Endif /*
If (I < K) Then
Write(‘Alamat elemen ke ’, K, ‘ tidak ada !’) Else
Write(‘Alamat elemen ke ’, K, ‘ adalah : ’, P);
*/ Return
Algoritma Mencari Alamat Data (Q) Pada Circular Link List
FindQCLL(Head, Q, P) Found = False; P = Head;
Do
If P->Info = Q Found = True Else P = P->Next;
While (P != Head) && (!Found); /*
If (P->Info <> Q) Then
Write(‘Data ’, Q, ‘ tidak ada !’) Else
Write(‘Alamat Data ’, Q, ‘ adalah : ’, P);
*/ Return
Algoritma Mencari Alamat Elemen Terakhir Pada Circular Link List
FindLastCLL(Head, P) P = Head;
While (P->Next != Head) P = P->Next;
EndOfWhile;
// Write(‘Alamat elemen terakhir adalah : ’, P);
C. Operasi Inserting
C.1 Sebagai Elemen Pertama / Di Awal List
Algoritma Menyisipkan Elemen Pada Awal Cirular Link List
InsertFirstCLL(Head, X) Malloc(Temp);
Temp->Info = X;
If Head = NULL Then Temp->Next=Temp; Else
Temp->Next = Head; FindLastCLL(Head, P) P->Next = Temp;
Endif
Head = Temp; Return
C.2 Sebagai Elemen Terakhir
Algoritma Menyisipkan Elemen Pada Akhir Circular Link List
InsertLast(Head, X) Malloc(Temp); Temp->Info = X;
If Head = NULL Then Temp->Next=Temp; Else
Temp->Next = Head;
FindLastCLL(Head,P); {Alm Elemen terakhir (P)} P->Next = Temp;
Endif Return
C.3 Sebagai Elemen Ke-N yang Temp (1 < N <= MAX)