fbpx

Struktur Data : Program Double Linked List Lengkap dalam Bahasa C

๐Ÿ“‹ 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.


Tonton juga video pilihan dari kami berikut ini

Bagikan ke teman-teman Anda

Contact Us

How to whitelist website on AdBlocker?

How to whitelist website on AdBlocker?

  1. 1 Click on the AdBlock Plus icon on the top right corner of your browser
  2. 2 Click on "Enabled on this site" from the AdBlock Plus option
  3. 3 Refresh the page and start browsing the site
error: Content is protected !!