Senin, 17 Maret 2014

Linked list beserta contoh coding program

Linked List

Linked List adalah Struktur data yang digunakan untuk menyimpan sebuah objek data secara terurut yang dapat di tambah atau di hapus dan juga dapat mencari elemen - elemen data yang tersimpan.

Linked List ada 3 macam, yaitu :

1. Single Linked List (SLL)

SLL adalah Suatu bentuk stuktur data yang dimana berisi kumpulan data / node yang tersusun secara sekuensial(sequential) yang saling berhubung, terbatas dan bersifat dinamis.



Sifat-Sifat SLL :
a. Linked List sering disebut sebagai "Senarai Berantai".
b. Data pada Linked List adalah node / simpul yang menempati alokasi pada memory secara dinamis.
c. Biasanya Linked List berupa struct yang terdiri dari beberapa field.
d. Linked List biasanya saling terhubung antara node dengan node lainnya dengan bantuan variabel pointer.
e. Linked List bersifat satu arah dan  terdapat pointer next (*next).
f.  Kode pada LL  yaitu next --> || <-- prev

Contoh kode :

struct Mahasiswa
{
    char nama[25];
    struct Mahasiswa *next;
};

Contoh gambar :



Single Linked List ada 3 macam bagian, yaitu :


a. Push Depan
Rumus push depan :

head  = curr = tail = null

Contoh coding : 

head = curr = tail = NULL
if(head == NULL)
}
   head = tail = curr;
   tail  --> next = NULL;
}else{
   curr --> next = headl
   head = curr;
}


b. Push Belakang
Rumus push belakang :

head = tail = curr = NULL
if(head == NULL)
{
    head = tail = curr;
}else{
   tail --> next = curr;
   tail = curr;
}
tail --> next = NULL

c. Push Tengah


2. Double Linked List(DLL)

DLL adalah elemen - elemen yang berhubungan dengan dua pointer dalam satu elemen dan list dapat melintas ke depan atau ke belakang.

Sifat-Sifat DLL :
a. Berguna untuk bagian data informasi.
b. Pointer next yang menunjuk ke arah elemen berikutnya.
c. Pointer prev yang menunjuk ke arah elemen sebelumnya.

Contoh coding :

struct tnode
{
    int value;
   struct tnode *next
   struct tnode *prev
};

Contoh gambar :


3. Multiple Linked List(MLL)

MLL adalah Sekumpulan list yang dimana list tersebut tidak terkait langsung dan setiap node berisi beberapa
link yang digunakan untuk beberapa rantai dalam koleksi yang sama dari node.

Sifat-Sifat Multiple Linke List :
a. Mempunyai dua rantai untuk melalui pengumpulan node.
b. Masing-masing menggunkan field untuk membuka rantai.
c. Ada 2 macam Multiple Linked List : a. after dan b. before.
c. Biasanya dalam 1 variabel ada 2 perintah untuk menjalankannya.
d. Pertama untuk memerintahkan selanjutnya --> next.
e. Kedua untuk memerintahkan sebelumnya <-- prev.

Contoh coding :

struct Mahasiswa
{
     char nama_depan[25];
     char nama_belakang[25];

     struct Mahasiswa *nd_next;
     struct Mahasiswa *nd_prev;
     struct Mahasiswa *nb_next;
     struct Mahasiswa *nb_prev;
};

Contoh gambar multiple linked list after :


Contoh gambar multiple linked list before :





Berikut contoh coding program:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct data
{
       char type[50];
       int qty;
       struct data *next;
       struct data *prev;
}*curr, *head, *tail;

void push_depan(char type[], int qty)
{
       curr = (struct data*)malloc(sizeof(struct data));
       strcpy(curr->type, type);
       curr->qty = qty;

       if(head == NULL) //data masih belum ada
       {
              head = tail = curr;
       }
       else
       {
              curr->next = head;
              head->prev = curr;
              head = curr;
       }
       tail->next = NULL;
       head->prev = NULL;
}

int view()
{
       int idx = 0;
       puts("                 --- ORDER LIST ---\n");
       puts("-------+--------------------------------+-----------");
       puts("| No.  | Nama sparepart                  | jumlah |");
       puts("-------+--------------------------------+-----------");
       //isi
       if(head != NULL) //ada data
       {
              curr = head;
              while(curr != NULL)
              {
                     printf("| %d | %s | %d |\n", idx+1, curr->type, curr->qty);
                     curr = curr->next;
                     idx++;
              }
       }
       puts("-------+--------------------------------+-----------");
       getchar();
       return idx;
}

void take_order()
{
       if(curr == head)
       {
              head = head->next;
              free(curr);
              if(head != NULL)
              {
                     head->prev = NULL;
              }
       }
       else if(curr == tail)
       {
              curr = tail;
              tail = tail->prev;
              free(curr);
              tail->next = NULL;
       }
       else
       {
              struct data *temp;
              temp = head;
              while(temp->next != curr)
              {
                     temp = temp->next;
              }

              curr->next->prev = curr->prev;
              temp->next = curr->next;
              free(curr);
       }
}

int main()
{
       int pilih;

       do
       {
              do
              {
                     system("cls");
                     puts(" toko onderdil");
                     puts(" .....................\n");
                     puts(" 1. Lihat List order");
                     puts(" 2. Tambah Order");
                     puts(" 3. Ambil Order");
                     puts(" 4. keluar");
                     printf(" >> Masukkan pilihan: ");
                     scanf("%d", &pilih); fflush(stdin);
              }
              while(pilih < 1 || pilih > 4);
             
              system("cls");

              switch(pilih)
              {
              case 1:
                     //view data
                     view();
                     break;

              case 2:
                     char type[50];
                     int qty;

                     //add data
                     do
                     {
                           printf(" Input Name of Motorcycle's Part [3..30]: ");
                           scanf("%[^\n]", type); fflush(stdin);
                     }
                     while(strlen(type) < 3 || strlen(type) > 30);

                     do
                     {
                           printf(" Input Quantity of The Motorcycle's Part [1..20]: ");
                           scanf("%d", &qty); fflush(stdin);
                     }
                     while(qty < 1 || qty > 20);
                     printf("Sukses Add");
                     push_depan(type, qty);
                     getchar();
                     break;

              case 3:
                     int posisi;
                     int total = view();

                     do
                     {
                           printf("Input Number of The Order [1..%d]: ", total);
                           scanf("%d", &posisi); fflush(stdin);
                     }
                     while(posisi < 1 || posisi > total);

                     curr = head;
                     for(int i = 1 ; i < posisi ; i++)
                     {
                           curr = curr->next;
                     }

                     take_order();
                     printf("sukses take order");
                     getchar();
                     break;
              }
       }while(pilih != 4);
       return 0;
}

www.binus.ac.id

Tidak ada komentar:

Posting Komentar