Dalam pelajaran kelas CB01 Data Structure hari ini, kita belajar mengenai Single Linked List.
Single Linked List adalah banyaknya data yang saling berhubungan satu dengan yang lain dimana setiap node memiliki alamat node yang lain dan bersifat satu arah dimana node hanya mengetahui alamat node yang lain, bukan alamat node yang ditanya. Kita bisa meng-analogikan seperti aku menanyakan kepada John alamat Bill dan John yang mengetahui alamat Bill bisa memberitahukan kita alamat Bill tetapi John tidak tahu alamat kita. Jika dalam analogi ini JOhn mengetahui alamat aku maka itu bisa disebut dengan Double Linked List.
Single Linked List memiliki beberapa bagian :
1. Head = bagian awal dari rantai Linked List.
2. Tail = bagian akhir dari rantai Linked List.
3. NULL = bagiam setelah Tail yang bernilai NULL/0
Dalam mengerjakan Single Linked List, ada beberapa metode dalam mengupdate sebuah Linked List.ada beberapa seperti :
1. Insert/Push : kata-kata ini biasanya dipakai untuk menambahkan sebuah node yang belum berada dalam sebuah linked list ke dalam rantai linked list.
2. Delete/Pop: kegunaannya adalah untuk menghapus node yang berada dalam sebuah rantai Linked List
Ada beberapa metode yang bisa dilakukan dalam melakukan insert/ push maupun delete/pop seperti:
a. Depan/Head : menambah/menghapus node kedepan sebuah rangkai Linked List.
b. Belakang/Tail : menambah/menghapus node ke bagian paling belakang sebuah rantai Linked List.
c. Mid : menambah/menghapus node yang berada di tengah Tail dan Head.
Contoh code untuk Linked List:
#include <stdio.h>
#include<stdlib.h>
struct data{
int value;
struct data *next;
}*head,*tail,*curr;
void insertFront(int x){
struct data *node = (struct data*)malloc(sizeof(struct data));
node->value = x;
if(head == NULL){
head = tail = node;
tail->next;
}
else{
node->next = head;
head = node;
}
}
void insertBack(int x){
struct data *node = (struct data*)malloc(sizeof(struct data));
node->value = x;
if(tail == NULL){
head = tail = node;
tail->next;
}
else{
tail->next=node;
tail=node;
tail->next=NULL;
}
}
void delHead(){
curr = head;
head = curr->next;
free(curr);
}
void delTail(){
curr = head;
while(curr!=NULL){
if(curr->next==tail) break;
else curr = curr->next;
}
tail = curr;
free(tail->next);
tail->next = NULL;
}
void insertBefore(int x, int p){
struct data *node = (struct data*)malloc(sizeof(struct data));
node->value = x;
curr=head;
while(curr->next->value!=p) curr=curr->next;
node->next = curr->next;
curr->next = node;
}
void view(){
curr=head;
while(curr!=NULL){
printf("%d",curr->value);
if(curr->next!=NULL) printf(" ");
else printf("\n");
curr = curr->next;
}
}
int main (){
insertFront(5);
insertFront(6);
insertFront(1);
insertBack(9);
insertBack(7);
view();
insertBefore(3,6);
view();
return 0;
}
Tidak ada komentar:
Posting Komentar