Jumat, 21 Maret 2014

Review Link List

Link List adalah kumpulan data record yang menyimpan alamat data record lainnya dan saling terbuhung.
Data pertama biasa disebut head dan data terakhir biasa disebut tail.

Terdapat beberapa jenis Link List :
  1. Single Link List (SLL)
  2. Double / Doubly Link List (DLL)
  3. Cirucular Link List (CLL)
  4.  Multiple Link List (MLL)
Perbedaan antara Single Link List dan Double Link List
 SLL : Menyimpan alamat data selanjutnya yang biasa disebut/didefinisikan dengan next.
 DLL: Menyimpan alamat data selanjutnya yang biasa disebut dengan next dan alamat data sebelumnya,     
          yang biasa disebut dengan prev.

Perbedaan Single Link List/ Double Link List dan Circular Link List
 SLL/DLL : Antara head dan tail tidak saling terhubung, sehingga tail menyimpan alamat dari head.
 CLL : Antara head dan tail saling terhubung, sehingga tail menyimpan alamat dari head pada Single Link 
           List. atau juga head menyimpan alamat tail pada Double Link List

 Circular Link List sendiri juga terdapat 2 jenis yaitu:
  • Circular Single Link List
  • Circular Double Link List
Perbedaannya sama seperti SLL dengan DLL, namun karena ini adalah Ciruclar, maka pada Circular Single Link List, hanya tail yang menyimpan alamat head. Sedangkan pada Double Link List, tail menyimpan alamat head dan sebaliknya head menyimpan alamat tail.

Terdapat beberapa istilah didalam Link List:
  1. Push: Untuk memasukkan data/membuat data baru
  2. Pop : Untuk menghapus data yang sudah ada
  3. Pop All : Untuk menghapus semua data yang ada
  4. Print/Cetar : Dapat dipakai untuk mencetak nilai data yang ada
Stack (Tumpukkan) : Menggunakan metode Last In, First Out
Terdapat beberapa istilah didalam Stack:
  1. Push: Untuk memasukkan data/membuat data baru
  2. Pop : Untuk menghapus data yang sudah ada
  3. Top / Peek : Untuk mengambil nilai paling atas dari tumpukan
Queue (Barisa) : Menggunakan metode First In, First
Terdapat beberapa istilah dalam Queue:

  1. Push: Untuk memasukkan data/membuat data baru
  2. Pop : Untuk menghapus data yang sudah ada
  3. Front / Peek : Untuk mengambil nilai paling atas dari tumpukan
  4. Rear : Untuk mengambil / menunjukkan nilai paling akhir
  5. Primary Queue : Untuk memasukkan data berdasarkan prioritas
Bina Nusantara University                              skyconnectiva
 =============================End================================

Sabtu, 15 Maret 2014

Link List

Sebelum ini saya telah sedikit membahas sedikit mengenai Array dan Link List. Pada kesempatan kali ini saya akan membahas lebih detail mengenai Link List.

Perbedaan Link List dan Array

LINK LIST

Keunggulan Link List: 
    1. Link List akan lebih efektif dan efisien dalam hal besarnya memory yang terpakai dari suatu
        program. Terutama pada jumlah input yang besar dan tidak diketahui dengan pasti.
Kerugian Link List:
    2. Link List harus diakses secara traversal (berurutan dari HEAD atau TAIL). Sehingga butuh waktu
        yang lebih lama dalam mengakses datanya.

ARRAY

Keunggulan Array:
    1. Array dapat diakses secara acak tanpa perlu mengakses dari awal maupun akhir. Pada array hanya
        perlu tuliskan [index] dari array.
Kerugian Array:
    2. Array kurang efektif dan efisien dalam hal besarnya memory yang terpakai, terutama pada data yang
        tidak diketahui jumlahnya. Karena pada deklarasi array, kita harus menuliskan jumlah maksimal
        [index] atau data yang ingin kita masukkan.

Link List

Terdapat beberapa jenis link list:
     1. Single Link List
     2. Double/doubly Link List
     3. Circular Single Link List
     4. Curcular Doubly Link List
     5. Polynomial Representation
     6. Header Link List

Single Link List 

       Single List List adalah sebuah Link List yang hanya punya satu arah penunjuk ke alamat data selanjutnya dan biasa sebut (NEXT). Data awal biasa disebut HEAD, dan data terakhir biasa disebut TAIL. Setiap satu data diwakili dengan NODE, dan node ini mempunyai kotak nilai/isi  dari data tersebut dan alamat data selanjutnya. Sehingga NODE-NODE akan saling terhubung satu sama lain, yang dimulai dari HEAD dan diakhiri dengan TAIL.

Ilustrasi dari SINGLE LINK LIST.
11

Doubly Link List

Sesuai dengan namanya Doubly Link List berarti menunjuk secara 2 arah. Ada sedikit perbedaan anatara Single Link List dan Doubly Link List, yaitu terdapat penunjuk ke alamat data sebelumnya.atau biasa disebut (PREV).

Contoh Ilustrasi Doubly Link List:

http://2.bp.blogspot.com/-9b36kelUT90/TcVRRh_dtuI/AAAAAAAAAIc/Po536lt86pg/s1600/evans-blog-praktikum-struktur-data-bahasa-java-double-linked-list.jpg 

Cirular Single Link List dan Circular Doubly Link List

Pada Circular Single Link List terdapat sedikit perbedaan dengan Single Link List. Pada Link List, antara HEAD dan TAIL tidak saling terhubung. Sedangkan pada Circular Single Link List, antara HEAD dan TAIL saling terhubung.

Perbedaannya dengan Cirucular Doubly Link List adalah, kita dapat dapat mengakses dari Tail ke Head, atau Head ke Tail. Sedangkan pada Ciruculan Single Link List, kita hanya dapat mengakses dari Tail kembali ke Head. Lalu bila kita ingin mengakses Head ke Tail, maka kita harus mengakses satu-satu data selanjutnya baru dapat kembali ke TAIL.

Ilustrasi Circular Single Link List

 http://2.bp.blogspot.com/-lTaDxUvl3Bg/UAa0YZpTgMI/AAAAAAAAABw/gG6v1Ilfqhs/s1600/Untitled5.png 

Ilustrasi Circular Doubly Link List
http://2.bp.blogspot.com/-v41cNVvaDJw/UAayuZzaf3I/AAAAAAAAABo/3WwD8X-Xegg/s1600/Untitled4.png 

 
Bina Nusantara University                          skyconnectiva
=============================End================================

Jumat, 07 Maret 2014

Array, Pointer dan Link List

Apakah itu Array?


Array adalah kumpulan data yang memiliki tipe data yang sama (misalkan : int, char float). Karena itu array bersifat homogen. Untuk meinisialisasikan array, kita harus menuliskan jumlah index dari array tersebut.
Contoh: int Array[10]   <~~ Dalam hal ini kita membuat 10 kotak yang dapat diisi dengan tipe data integer.
            char Array2[10]   <~~ Dalam hal ini kita membuat 10 kotak yang dapat diisi dengan tipe data char.

Bagaimana cara mengakses nilai dalam array?


Seperti yang sudah kita tahu bahwa Array memiliki index yang menunjukkan berapa kotak yang tersedia dari array tersebut. Untuk index pertama / data pertama dari suatu array dimulai dengan [0]. Sehingga untuk menggakses nilai pertamanya, perlu dituliskan array[0]. Batas indexnya adalah (n-1) dengan n adalah jumlah kotak yang tersedia.

Contoh: int Array[10] <~~~ Tersedia 10 kotak yang berisi integer
             Untuk mengakses nilai pertama dari Array tersebut dapat kita tuliskan:
             Array[0] <~~~ Untuk mengakses nilai pertama dari array.
             Array[1] <~~~ Untuk mengakses nilai kedua dari array.
             Array[9] <~~~ Untuk mengakses nilai kesepuluh dari array.

Sebuah Array juga dapat memiliki 2 index, atau biasa disebut dengan array 2-D. Dalam ini, kita dapat menganggap array tersebut memiliki kotak kesamping (baris) dan kotak kebawah (kolom).
Untuk dapat menginisialisasikan array tersebut, kita hanya perlu menambahkan indexnya.
Contoh: int Array[10][5] <~~~ Array memiliki 10 kotak kebawah dan 5 kotak kesamping.

Untuk dapat mengakses nilainya pun sama seperti array 1-D, kita hanya perlu menuliskan indexnya. Index pertama juga dimulai dari 0, dan diakhiri dengan (n-1) dari jumlah kotak.
Selain itu array juga dapat memiliki 3 index dan selanjutnya.

Apakah itu Pointer?


Sesuai dengan namanya yang berarti penunjuk, pointer akan menunjuk ke suatu hal. Apakah yang ditunjuk oleh pointer? jawabannya adalah alamat dari suatu variabel / memory pada komputer.
Untuk menuliskan pointer kita akan menggunakan lambang (*) dan untuk menuliskan alamat yang variabel yang ditunjuk kita akan menggunakan lambang (&).

Contoh: void main(){
                   int *penunjuk;  <~~~ inisialisasi pointer
                   int angka = 10; <~~~ kita memiliki variabel "angka" yang mempunyai alamat
                                                    pada memory dan nilai angka adalah 10.
                   penunjuk = &angka; <~~~ penunjuk akan menunjuk / mengambil alamat dari angka
             }
Dari contoh diatas, maka penunjuk akan menunjuk alamat dari angka, sehingga nilai penunjuk akan mengikuti angka. Begitu juga bila penunjuk sudah menunjuk alamat angka, dan kita mengganti nilai angka maupun penunjuk, maka nilainya akan sama-sama berubah.

Apa itu Link List?


Sebelum mengetahui apa itu Link List, saya akan memberitahu sedikit mengenai Struct.
Struct adalah tipe data abstrak yang dapat menyimpan lebih dari satu tipe data (dapat di sebut heterogen).

Setelah mengetahui sedikit mengenai struct, kita akan membahas dasar mengenai Link List.
Link List merupakan beberapa struct yang saling terhubung. Sama seperti array, link list berguna agar kita dapat mengakses data kita yang ada didalam list.
Pada Link List terdapat struct yang menyimpan data berupa int, char, dan lainnya sesuai yang kita butuhkan.
selain itu link list juga terdapat (next) yang menyimpan alamat dari data selanjutnya. Setiap kumpulan data/nilai dan next tersebut (node). Sehingga setiap node akan menyimpan kumpulan nilai maupun character dan alamat node selanjutnya. Nantinya node pertama akan terhubung dengan node kedua dan seterusnya.
Node pertama disebut dengan head. Ketika kita ingin mengakses node-node tersebut, kita akan mulai mengaksesnya dari head dan seterusnya. Node terakhir disebut juga tail.

Keuntungan dan Kerugian Link List vs Array
Namun sedikit perbedaan link list dan array, pada array kita dapat mengakses secara langsung dengan menyebutkan indexnya. Namun pada link list kita harus mengakses secara sequence (satu persatu) dari head ke tail (awal ke akhir). Lalu apa keunggulan link list? Keuntungan dari link list adalah jumlah memory yang terpakai dapat dibuat lebih kecil dari array.

Pada array kita menginisialisasikan index, yang artinya memory pada komputer akan menyediakan memory sebanyak jumlah index tersebut. Walaupun setiap index/kotak pada array tersebut tidak terpakai, komputer akan tetap menyediakan memory tersebut. Sehingga memory yang dibutuhkan tidak efesien.

Sedangkan pada Link List, komputer hanya akan memesan memori pada komputer sejumlah struct / semua isi dari struct tersebut.
Contoh Kode untuk membuat Link List, yang di dalam structnya terdapat (nama barang, harga).
Lalu ada 3 fungsi, yaitu mengisi nama barang & harga, mengambil nama barang & harga, :serta menghapus node berserta isinya.
Inisialisasi node:

struct Toko{
    char nama_barang[25];
    int harga;
    struct Toko *next;
}*head, *tail;

2 Cara memasukkan nilai:

1. void pushDepan(char nama_barang[],int harga){
    struct Toko *curr = (struct Toko*) malloc(sizeof(struct Toko));
    strcpy(curr->nama_barang , nama_barang);
    curr->harga = harga;
    if(head == NULL){
        head = tail = curr;
        tail->next = NULL;
    }else{
        curr->next = head;
        head = curr;
    }
}

2. void pushBelakang(char nama_barang[], int harga){
    struct Toko *curr = (struct Toko*) malloc(sizeof(struct Toko));
    strcpy(curr->nama_barang, nama_barang);
    curr->harga = harga;
    if(head == NULL){
        head = tail = curr;
    }else{
        tail->next = curr;
        tail = curr;       
    }
    tail->next = NULL;
}

2 Cara untuk menghapus node:


1. void popDepan(){
    if(head){
        struct Toko *curr = head;
        if(head == tail){
            //1
            head = tail = NULL;
            free(curr);
        }else{
            //>1
            head = head->next;
            free(curr);
        }
    }else{
        printf("No more data to be deleted..\n\n");
    }
}

2. void popBelakang(){
    if(head){
        struct Toko *curr = head;
        if(head == tail){
            //1
            head = tail = NULL;
            free(curr);
        }else{
            //>1
            while(curr->next != tail){
                curr=curr->next;
            }
            tail = curr;
            free(curr->next);
            tail->next = NULL;
        }
    }else{
        printf("No more data to be deleted..\n\n");
    }
}

Cara untuk mencetak nama barang & harga: 


void print(){
    struct Toko *curr;
    printf("=====================================================\n");
    printf("| %-23s | %-23s |\n","Nama Barang","Harga");
    printf("=====================================================\n");
    for(curr=head;curr!=NULL;curr=curr->next){
        printf("| %-23s | %-23d |\n",curr->nama_barang,curr->harga);
    }

    /*
        curr = head;
        while(curr){
            printf("| %-23s | %-23d |\n",curr->nama_barang,curr->harga);
            curr=curr->next;
        }
    */
    printf("=====================================================\n");
}

Bina Nusantara University                     skyconnectiva
=============================End================================