Linked List atau Senarai Berantai merupakan salah satu struktur data. Link List memiliki sekumpulan node / data yang tersusun secara sekuensial,  saling menyambung dan dinamis. Sekumpulan Node tersebut dihubungkan dengan pointer. Oleh karena itu anda harus mengerti benar tentang pointer terlebih dahulu.   Keunggulan linked list yaitu dapat menggunakan memory sesuai kebutuhan d...

Tutorial - Single Linked List

Linked List atau Senarai Berantai merupakan salah satu struktur data. Link List memiliki sekumpulan node / data yang tersusun secara sekuensial,  saling menyambung dan dinamis. Sekumpulan Node tersebut dihubungkan dengan pointer. Oleh karena itu anda harus mengerti benar tentang pointer terlebih dahulu.

Keunggulan linked list yaitu dapat menggunakan memory sesuai kebutuhan dan tidak dapat overflow kecuali jika memory komputer habis. Beda halnya dengan jika kita mendeklarasikan sebuah array, pada array memory baik kita gunakan atau tidak sejumlah blok yang telah dipesan melalui deklarasi tersebut tidak dapat digunakan, dan jika data yang kita masukkan lebih besar dari jumlah data yang di deklarasikan akan terjadi overflow (runningtime error).

Terdapat 3 implementasi penggunaan linked list:

1. Singly linked list

2. Doubly linked list

3. Circular linked list

Namun kali ini saya hanya membahas singly linked list sbb:

Singly Linked List

•Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir node, pointernya menunjuk NULL
•Linked List : artinya node-node tersebut saling terhubung satu sama lain.
•Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data.
•Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.
•Pointer pokok yang digunakan yaitu head (menunjuk pada node awal) dan tail (menunjuk pada node terakhir)
singly linked list
*pointer head menunjuk pada node berisi data 12 dan tail menunjuk pada node berisi data 37
Di dalam linked list terdapat properties yang umum yaitu: insert node dan delete node.
Untuk memulai deklarasikan terlebih dahulu struct anda.
 
typedef struct node {
int data;
struct node *next;
}node;
dan pada main
int main(){
node *head=NULL;
node *tail=NULL;
….
ins_h(&head,&tail,data); //insert head
ins_t(&head,&tail,data);//insert tail
ins_s(&head,&tail,data,posisi);//insert sembarang node
del_h(&head,&tail,data);//delete head
del_t(&head,&tail,data);//delete tail
delh_s(&head,&tail,data,posisi);//delete sembarang node
return 0;
}
• Insert node
Pada Insert node terdapat 3 metode dalam memasukkan data yaitu
1. sebelum Head  (LIFO, prinsip Stack)
2. setelah Tail (FIFO, prinsip Queue)
3. sembarang Node (sesuai input)
fungsi InsertHead
void ins_h(node **head, node **tail, int data){
node *temp=(node*)malloc(sizeof(node));  //alokasi memori
temp->next=NULL;
temp->data=data;
if(*head==NULL){    //jika data masih kosong , head==null
*head=*tail=temp;
}else{
temp->next=*head; //jika tidak maka diletakan di depan
*head=temp;
}
}
fungsi Insert Tail
void ins_t(node **head, node **tail,int data){
node *temp=(node *)malloc(sizeof(node));
temp->next=NULL;
temp->data=data;
if(*head==NULL){
*head=*tail=temp;
}else{
(*tail)->next = temp; //menempatkan pada posisi akhir
*tail=temp;
}
}
fungsi insert sembarang node
void ins_s(node **head,node **tail, int data, int posisi){
node *temp=(node*)malloc(sizeof(node));
node *cari=*head;
temp->next=NULL;
temp->data=data;
if(*head==NULL){

*head=*tail=temp;

}else{
while (posisi– && cari->next!=NULL) cari=cari->next; //mencari posisi sesuai input
temp->next=cari->next;
cari->next=temp;
if(cari==*tail) *tail=cari->next; //jika posisi == tail maka tail perlu diatur
}
}
• delete node
properti pada delete node juga sama dengan insert. bedanya kalau delete berarti menghapus :D
fungsi hapus head:
void del_h(node **head, node**tail){
node *temp=*head;
if(*head==*tail){ //delete jika hanya ada 1 node
*head=*tail=NULL;
free(temp);
}else{ //delete jika lebih dari 1 node
*head=temp->next; //memindah pointer head
free(temp);
}
}
fungsi hapus tail:
void del_t(node **head, node**tail){
node *temp=*tail;
node *bantu=*head;
if(*head==*tail){
*head=*tail=NULL;
free(temp);
}else{
while(bantu->next!=*tail) bantu=bantu->next; //untuk mencari letak tail
bantu->next=NULL;
*tail=bantu; //memindahkan tail ke node sebelumnya
free(temp);
}
}
fungsi hapus sembarang node:
void del_t(node **head, node**tail,int posisi){
node *temp, *bantu=*head;
if(*head==*tail){
*head=*tail=NULL;
free(temp);
}else{
while(bantu->next!=NULL && posisi–) { //untuk mencari posisi tetapi juga jika posisi tidak melebihi jumlah data
temp=bantu;
bantu=bantu->next;
}
temp->next=bantu->next;
if(bantu==*tail) *tail=temp; //jika data sama dengan tail, tail perlu dipindahkan
free(bantu);
}
}
Nah Diatas merupakan source code dan penjelasannya.
Untuk pertanyaan lebih lanjut silakan komentar dibawah ini.
terima kasih :D

About Author

(:)

no comment


Comment & Discussions

  • Kak, perbedaannya dari c++ ke java gimana ya?

  • Cah OndalOndol
    kak, perbedaan pointer ke struct di dalam struct sama pointer ke struct di dalam fungsi itu apa ya? contoh

    struct node
    {
    int data;
    node *next;
    }

    int main()
    {
    node *sample;
    }

  • Please LOGIN before if you want to give the comment.