Tutorial - Single Linked List

advertisement
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
Download