SENARAI BERANTAI (LINK LIST)
Salah satu solusi untuk mengatasi kekurangan array adalah dengan Linked List. Linked List (senarai berantai satu arah atau one way list) merupakan struktur data dinamis yang paling sederhana. Link list merupakan kumpulan komponen yang disusun secara berurutan dengan bantuan pointer.
Masing-masing komponen atau disebut juga dengan istilah simpul (node), terdiri atas 2 bagian yaitu medan informasi, yang berisi informasi yang akan disimpan/diolah, dan medan penyambung, yang berisi alamat simpul berikutnya. Sebuah simpul dapat digambarkan sebagai berikut :
MODEL LOGIKA
Medan Penyambung Medan Informasi
Head
Ira Ida Indah Ika
Irna
MODEL FISIK
Alamat Info Next
1 Ira 5
2 Ika 1
3 Indah 0
4 Irna 2
5 Ida 3
Head 4
Jika P adalah variabel pointer, maka :
P = Variabel yang berisi alamat
P-> = Data yang ditunjuk oleh P
P->Next = Variabel yang berisi alamat data setelah data alamat P P->Next-> = Data yang ditunjuk oleh P->Next
Head
Irna Ika Ira Ida Indah
Head->Info
Head->Next
Head->Next->
PENDEKLARASIAN SIMPUL (NODES)
typedef struct nodestr *node;
struct nodestr {
char info[10]; node next; };
node head, temp;
PENGALOKASIAN MEMORI UNTUK TIPE DATA POINTER
temp = (node)malloc(sizeof(node));
MENDEALOKASI MEMORI YANG SUDAH TIDAK DIGUNAKAN
free(temp);
OPERASI DASAR PADA LINKED LIST
A. Operasi Traversing
Algoritma untuk melakukan operasi travesing adalah sebagai berikut: Traversing(head)
temp = Head;
While (temp != Null) Write(temp->Info); temp = temp->next; EndOfWile
Return
Jika kita buat prosedurnya dalam bahasa c sebagai berikut:
void Traversing() {
temp = head;
while (temp != NULL)
{
cout << "\n" << temp->info; temp = temp->next;
B. Operasi Searching
Algoritma Mencari Alamat Elemen Ke-K Pada Link List
FindK(Head, K, P) I = 1;
P = Head;
While (P != NULL) And (I < K) Inc(I);
P = P->Next; EndOfWhile;
/*
Hasil dari pencarian tersebut adalah
If (P = NULL)
Write(‘Elemen ke K tidak ada’) Else
Alamat elemen ke-k adalah P */
Return
Algoritma Mencari Alamat Data (Q) Pada Link List
FindQ(Head, Q, P) Found = False; P = Head;
While (P != NULL) && (!Found) If P->Info = Q Found = True Else P = P->Next
EndOfWhile /*
If (P == NULL) Then
Write(‘Data ’, Q, ‘ tidak ada !’) Else
Write(‘Alamat Data ’, Q, ‘ adalah : ’, P); */
Return
Algoritma Mencari Alamat Elemen Terakhir Pada Link List
Head
Ira Ida Indah Ika
Irna
P P->Info R
FindLast(Head, P) P = Head;
R = Head;
While (R != NULL) P = R;
R = R->Next; End;
Contoh penggunaan list berkait dalam program
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
typedef struct nodestr *node;
struct nodestr
{
int info;
node next;
};
node head, search, last, temp;
void ninsert(int i);
void listview();
void ndelete();
void main()
void ninsert(int i)
{
temp = (node)malloc(sizeof(node));
temp->info = i;
search = search->next;
}
void listview()
{
void ndelete()
C. Operasi Inserting
Operasi inserting dibedakan dalam tiga posisi penyisipan yaitu: sebagai elemen pertama (di awal list), sebagai elemen terakhir, dan di tengah list (sebagai elemen ke N yang baru dimana 1 < N < = jumlah elemen) .
C.1 Sebagai Elemen Pertama / Di Awal List
Algoritma Menyisipkan Elemen Pada Awal Link List InsertFirst(Head, X)
Malloc(Temp); Temp->Info = X; Temp->Next = Head; Head = Temp;
Return
C.2 Sebagai Elemen Terakhir
Algoritma Menyisipkan Elemen Pada Akhir Link List InsertLast(Head, X)
Malloc(Temp); Temp->Info = X; Temp->Next = NULL;
FindLast(Head,P); //Cari Alamat Elemen terakhir (P) P->Next = Temp;
Return
C.3 Sebagai Elemen Ke-N yang baru (1 < N <= Jumlah Elemen) Algoritma Menyisipkan di tengah Link List
InsertN(Head, X, N) Malloc(Temp);
Temp->Info = X;
FindK(Head, N-1, P); //Cari alamat elemen ke N-1 If P <> NULL
Temp->Next = P->Next; P->Next = Temp;
Else
Write(‘Elemen ke : ‘,N-1,’tidak ada’); Free(Temp);
D. Operasi Deleting
Sama seperti halnya operasi inserting, operasi deleting juga dibedakan dalam tiga posisi penghapusan yaitu: hapus elemen pertama (di awal list), hapus elemen terakhir, dan hapus elemen di tengah list (elemen ke N, dimana 1 < N < jumlah elemen) .
D.1 Menghapus Elemen Pertama / Di Awal List Algoritma menghapus elemen pertama pada Link List DeleteFirst(Head)
If Head != NULL
Temp=Head;
Head=Head->Next; Free(Temp);
Else
Write(‘List kosong’); EndIf
Return
D.2 Menghapus Elemen Terakhir Algoritma menghapus elemen terakhir
DeleteLast(Head)
//Mencari alamat elemen terakhir dan sebelum terakhir P = Head;
R = Head;
While (R->Next != NULL) P = R;
R = R->Next; End;
//Elemen terakhir = R, Elelem sebelum terakhir = P
P->Next = NULL; Free(R);
Return
D.3 Menghapus Elemen Ke-N, (1 < N < Jumlah Elemen) Algoritma Menyisipkan di tengah Link List
DeleteN(Head, N)
FindK(Head, N-1, P); {Cari alamat elemen ke N-1} R = P->Next;
If R->Next != NULL Then P->Next = R->Next; Free(R);
Else
Write(‘Tidak memenuhi syarat penghapusan’); Endif