Data Structure GSCL (Insert & Delete)
PERBEDAAN LINKED LIST & ARRAY
-array merupakan kumpulan dari sejenis data, sedangkan linked list kumpulan dari berbagai macam data yang saling terkait.
-memori pada linked list lebih fleksibel, sedangkan memori pada array sejumlah yang telah ditentukan, tidak dapat dikurangi.
-dalam linked list sering menggunakan pointer, dalam array sedikit menggunakan pointer bahkan tidak dibutuhkan.
SINGLE LINKED LIST
single linked list hanya mempunyai satu penghubung antar node.
DOUBLE LINKED LIST
mempunyai penghubung 2 arah antar node, jika ke selanjutnya maka bisa kembali.
INSERTION (FRONT)
struct tnode{
int value; //buat masukin nilai
struct tnode *next; //buat nunjuk selanjutnya
};
struct tnode *node = (struct tnode*)malloc(sizeof(struct tnode)); //buat alokasi memori sesuai struct
node->value = x; //masukin inputan x ke node
node->next = head; //pindahin headnya dulu ke selanjutnya
head = node; //pindahin head lagi ke depan
INSERTION (MIDDLE)
void insertAfter(struct tnode *prev_node, int new_value){
if(prev_node == NULL){ //angka sebelumnya tidak boleh kosong karena dia middle
printf("Angka sebelumnya tidak boleh kosong");
return;
}
struct tnode *baru = (struct tnode*)malloc(sizeof(struct tnode));
baru->value = new_value; //buat masukin nilai ke dalem node
baru->next = prev_node->next; //hubungin kalau next dari node sebelumnya sama dengan next dari node baru
prev_node->next = baru; //buat ngehubungin dan posisiin node baru di depan prev node
}
INSERTION (LAST)
void insertLast(struct tnode *head, struct tnode *last, int input){
struct tnode baru=(struct tnoe *)malloc(sizeof(struct tnode));
baru->value=input; //buat masukin nilai ke dalam node
baru->next=NULL; //karena dia last, next nya adalah kosong
if(head==NULL){ //penanda kalau di list masih kosong, maka inputan menjadi head dan last sekaligus
head=baru;
last=baru;
}
else{
last->next=baru; //menghubungkan last lama dengan last baru
last=baru; //node baru menjadi last
}
}
DELETE
void del(){
int input;
temp=head;
if(head==NULL){
printf("list is empty");
}
else{
printf("enter the value to be delete\n");
scanf("%d",&input);
if(head->data==input){
head = head->next; //kalau dia di posisi head, head di pindahin ke selanjutnya
}
else{
while(head->next->data!=input){
head = head->next; //head pindah ke selanjutnya
}
if(head->next==NULL) printf("the element not present\n");
else if(head->next->next==NULL){
last = head;
head->next = head->next->next;
printf("the element is deleted\n");
head = temp;
}
}
}
}
sumber:
https://forgetcode.com/C/273-Single-linked-list
https://socs.binus.ac.id/2017/03/15/single-linked-list/
-array merupakan kumpulan dari sejenis data, sedangkan linked list kumpulan dari berbagai macam data yang saling terkait.
-memori pada linked list lebih fleksibel, sedangkan memori pada array sejumlah yang telah ditentukan, tidak dapat dikurangi.
-dalam linked list sering menggunakan pointer, dalam array sedikit menggunakan pointer bahkan tidak dibutuhkan.
SINGLE LINKED LIST
single linked list hanya mempunyai satu penghubung antar node.
DOUBLE LINKED LIST
mempunyai penghubung 2 arah antar node, jika ke selanjutnya maka bisa kembali.
INSERTION (FRONT)
struct tnode{
int value; //buat masukin nilai
struct tnode *next; //buat nunjuk selanjutnya
};
struct tnode *node = (struct tnode*)malloc(sizeof(struct tnode)); //buat alokasi memori sesuai struct
node->value = x; //masukin inputan x ke node
node->next = head; //pindahin headnya dulu ke selanjutnya
head = node; //pindahin head lagi ke depan
INSERTION (MIDDLE)
void insertAfter(struct tnode *prev_node, int new_value){
if(prev_node == NULL){ //angka sebelumnya tidak boleh kosong karena dia middle
printf("Angka sebelumnya tidak boleh kosong");
return;
}
struct tnode *baru = (struct tnode*)malloc(sizeof(struct tnode));
baru->value = new_value; //buat masukin nilai ke dalem node
baru->next = prev_node->next; //hubungin kalau next dari node sebelumnya sama dengan next dari node baru
prev_node->next = baru; //buat ngehubungin dan posisiin node baru di depan prev node
}
INSERTION (LAST)
void insertLast(struct tnode *head, struct tnode *last, int input){
struct tnode baru=(struct tnoe *)malloc(sizeof(struct tnode));
baru->value=input; //buat masukin nilai ke dalam node
baru->next=NULL; //karena dia last, next nya adalah kosong
if(head==NULL){ //penanda kalau di list masih kosong, maka inputan menjadi head dan last sekaligus
head=baru;
last=baru;
}
else{
last->next=baru; //menghubungkan last lama dengan last baru
last=baru; //node baru menjadi last
}
}
DELETE
void del(){
int input;
temp=head;
if(head==NULL){
printf("list is empty");
}
else{
printf("enter the value to be delete\n");
scanf("%d",&input);
if(head->data==input){
head = head->next; //kalau dia di posisi head, head di pindahin ke selanjutnya
}
else{
while(head->next->data!=input){
head = head->next; //head pindah ke selanjutnya
}
if(head->next==NULL) printf("the element not present\n");
else if(head->next->next==NULL){
last = head;
head->next = head->next->next;
printf("the element is deleted\n");
head = temp;
}
}
}
}
sumber:
https://forgetcode.com/C/273-Single-linked-list
https://socs.binus.ac.id/2017/03/15/single-linked-list/
Komentar
Posting Komentar