๐ Daftar Isi
Buatlah program dengan menggunakan double linkked list terurut menurun
Source Code
#include<stdio.h>
#include<stdlib.h>
struct node{
int value;
struct node *next;
struct node *prev;
};
typedef struct node *ptrnode;
ptrnode createNode(int nilai){
ptrnode p;
p = (ptrnode)malloc(sizeof(struct node));
p->value = nilai;
p->next = NULL ;
p->prev = NULL;
return(p);
}
ptrnode insertNode(ptrnode head, int nilai){
ptrnode new_node = createNode(nilai); //membuat node baru
//head masih dalam kondisi NULL
if (head==NULL){
head=new_node;
return(head);
}
//mencari node yang berada tepat setelah node baru
ptrnode cursor=head;
ptrnode precursor;
/*while (cursor->next != NULL)
{
cursor=cursor->next;
}
cursor->next=new_node;
new_node->prev=cursor;*/
if (cursor->value<=nilai) {
//input node di depan
new_node->next=head;
head->prev=new_node;
head=new_node;
}
else{
while (cursor->next!=NULL){
if (cursor->value>nilai){
precursor=cursor;
cursor=cursor->next;
}
else break;
}
if (cursor->value>nilai){
//node baru menjadi tail
cursor->next=new_node;
new_node->prev=cursor;
}
else if (cursor->value<=nilai){
precursor->next=new_node;
new_node->prev=precursor;
cursor->prev=new_node;
new_node->next=cursor;
}
}
return(head);
}
ptrnode removeNode(ptrnode head, int nilai){
ptrnode cursor = head;
if (head==NULL)
{
printf("List masih kosong");
return(head);
}
if (cursor->value==nilai){
if (head->next==NULL){
head=NULL;
return(head);
}
head=head->next;
cursor->next=NULL;
head->prev=NULL;
free(cursor);
}
else{
while (cursor->value>nilai){
if (cursor->next!=NULL)
cursor = cursor->next;
else break;
}
if (cursor->value==nilai)
{
//node yang dihapus adalah tail
if (cursor->next==NULL){
ptrnode tail=cursor->prev;
tail->next=NULL;
cursor->prev=NULL;
free(cursor);
}
//node yang dihapus ada diantara node
else {
cursor->prev->next=cursor->next;
cursor->next->prev=cursor->prev;
cursor->prev=NULL;
cursor->next=NULL;
free(cursor);
}
}
}
return(head);
}
void tampilNode(ptrnode head){
int i=1;
ptrnode n=head;
if (n==NULL) {
printf("Daftar masih kosong\n");
}
else {
printf("Daftar Nilai: \n");
while (n!=NULL){
printf("Node ke %d: %d \n",i,n->value);
n=n->next;
i++;
}
}
printf("\n");
}
void menu(){
printf("\n\n Silahkan pilih menu:\n");
printf(" 1. Insert Node\n");
printf(" 2. Remove Node\n");
printf(" 3. show List\n");
printf(" 4. Exit\n\n");
}
void main(){
int pilih,value;
ptrnode head=NULL;
do {
menu();
do{
printf("Pilihan Anda: ");
scanf("%d",&pilih);
} while ((pilih<1)||(pilih>4));
switch (pilih){
case 1:
printf("Nilai yang diinput= ");
scanf("%d",&value);
head=insertNode(head,value);
break;
case 2:
printf("Nilai yang ingin di hapus: ");
scanf("%d",&value);
head=removeNode(head,value);
break;
case 3:
tampilNode(head);
}
} while (pilih != 4);
}
Output
Materi Lengkap
Silakan baca juga beberapa artikel menarik kami tentang Double Linked List, daftar lengkapnya adalah sebagai berikut.