Tutorial - Single Linked List Oleh: (:)
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...
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)
*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 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
Tentang Penulis (:) no comment