Selasa, 27 Februari 2018

Pertemuan ke - 2 - Introduction To Linked List (L) + Linked List Implementation 1 (L) - 2101691676 - Handi Putra Tjioe



Introduction To Linked List (L) +Linked List Implementation 1 (L)



Sub Topic


   Introduction to Linked List :


   -1. Structure Declaration


   -2. Structure Assignments


   -3. Nested Structure 


   -4. Array of Structure 


   -5. Memory Allocation 


   -6. Linked List Introduction 


   -7. Linked List versus Array





1. Structure Declaration (Deklarasi Struktur)

=> Struktur pada dasarnya adalah tipe data yang ditentukan pengguna yang dapat menyimpan informasi terkait (bahkan dari tipe data yang berbeda) bersama-sama, sementara array hanya dapat menyimpan entitas dari tipe data yang sama. Ini adalah kumpulan variabel dengan satu nama.



      Variabel dalam struktur adalah tipe data yang berbeda dan masing-masing memiliki nama yang digunakan untuk memilihnya dari struktur.












2. Structure Assignment


Sebagai Contoh :


tdata x;
• You can use operator . (dot) to access member of x 
x.age = 17;
strcpy(x.name, “andi”);
x.score = 82.5;



3. Nested Structure

Anda juga bisa memiliki struktur sebagai anggota struktur lain




4. Array Of Structure

Anda juga bisa memiliki susunan struktur.



5. Memory Allocation (Alokasi Memori)

=> Jika Anda perlu mengalokasikan memori secara dinamis (dalam runtime), Anda bisa gunakan malloc di C / C ++. Untuk de-mengalokasikan Anda bisa menggunakan gratis.




6. Linked List Introduction

=>  suatu struktur data linier. Berbeda dengan array yang juga merupakan struktur data linier dan tipe data komposit, linked list dibentuk secara dinamik. Pada saat awal program dijalankan elemen linked list belum data. Elemenlinked list (disebut node) dibentuk sambil jalan sesuai instruksi.



Example of a list whose nodes contain two fields:

nilai integer dan link ke node berikutnya. Linked list
node mana yang hanya berisi satu link ke node lain 
disebut single linked list.


7. Linked List Versus Array

Array:
  • Kumpulan data elemen linier
  • Simpan nilai di lokasi memori berurutan
  • Bisa acak dalam mengakses data


Daftar Linked:
  • Linear koleksi dari node
  • Tidak menyimpan simpulnya di lokasi memori berturut-turut
  • Dapat diakses hanya secara berurutan




Linked List Implementation 1 (L)



SUB TOPIC

          Linked List:
          - 1. Single Linked List
          - 2. Polynomial Representation
          - 3. Circular Single Linked List
          - 4. Doubly Linked List
          - 5. Circular Doubly Linked List
          - 6. Header Linked List



1. Single Linked List

=>  Untuk membuat daftar, pertama kita perlu mendefinisikan struktur simpul untuk daftar. Seharusnya kita ingin membuat daftar bilangan bulat.


Sebagai Contoh :

struct tnode {
  int value;
  struct tnode *next;
};
struct tnode *head = 0;

Head adalah pointer ke elemen pertama dalam
linked list kami.


2. Single Linked List : Insert

=>  Untuk menyisipkan nilai baru, pertama kita harus mengalokasikan node baru secara dinamis dan  memberikan nilai padanya dan kemudian menghubungkannya dengan linked list yang ada. Seharusnya kita ingin menambahkan simpul baru di depan kepala.


Sebagai Contoh :

struct tnode *node =
  (struct tnode*) malloc(sizeof(struct tnode));
node->value = x;
node->next  = head;
head = node;

Operator -> memiliki arti yang sama dengan:
(*node).value = x;
(*node).next  = head;




Tambahkan simpul baru di depan kepala. Dengan asumsi sudah ada linked list
mengandung 10, 35, 27.




3. Single Linked List : Delete

=> Untuk menghapus sebuah nilai, pertama kita harus mencari lokasi node yang menyimpan nilai yang ingin kita hapus, keluarkan, dan hubungkan sisa linked list.

Seharusnya nilai yang ingin kita hapus adalah x dan dengan asumsi x ada dalam linked list dan unik.

Ada dua kondisi yang harus kita perhatikan: Jika x berada dalam head node atau x tidak berada dalam head node.




Menghapus 31 (terletak di kepala [Head])






4. Polynomial Representation 

=> Polinomial diberikan sebagai 6x3 + 9x2 + 1 Setiap istilah individu dalam polinom terdiri dari dua bagian, koefisien dan kekuatan Di sini, 6, 9, 7, dan 1 adalah koefisien dari persyaratan yang masing-masing memiliki 3, 2, 1, dan 0 sebagai kekuatan masing-masing. Setiap istilah polinomial dapat direpresentasikan sebagai simpul dari linked list.




5. Circular Single Linked List

  • Secara sirkuler, node terakhir berisi pointer ke node pertama
  • Kita bisa memiliki daftar terkait melingkar dan juga daftar ganda yang saling terkait.
  • Tidak ada penyimpanan nilai NULL dalam daftar




6. Doubly Linked List

=> Daftar ganda atau linked list dua arah adalah data daftar tertaut struktur dengan dua link, satu yang berisi referensi ke data berikutnya dan satu yang berisi referensi ke data sebelumnya.

Sebagai Contoh :


struct tnode {
  int value;
  struct tnode *next;
  struct tnode *prev;
};
struct tnode *head = 0;
struct tnode *tail = 0;




7. Doubly Linked List: Insert

=>Sama seperti dalam satu linked list, pertama kita harus mengalokasikan simpul baru dan tetapkan nilainya ke sana, lalu kita hubungkan node dengan linked list yang ada.

Seharusnya kita ingin menambahkan simpul baru di belakang ekor.


Sebagai Contoh :

struct tnode *node =
  (struct tnode*) malloc(sizeof(struct tnode));
node->value = x;
node->next  = NULL;
node->prev  = tail;
tail->next  = node;

tail = node;

Seharusnya kita ingin memasukkan simpul baru dalam posisi tertentu (apapun lokasi antara kepala dan ekor)

Sebagai Contoh :


struct tnode *a = ??;
struct tnode *b = ??;
// the new node will be inserted between a and b
struct tnode *node =
  (struct tnode*) malloc(sizeof(struct tnode));
node->value  = x;
node->next  = b;
node->prev  = a;
a->next  = node;
b->prev  = node;



8. Doubly Linked List: Delete

=> Ada 4 kondisi yang harus kita perhatikan saat menghapus: 

  • Node yang akan dihapus adalah satu-satunya simpul dalam linked list.
  • Simpul yang akan dihapus adalah kepala.
  • Simpul yang akan dihapus adalah ekor.
  • Simpul yang akan dihapus bukan kepala atau ekor.



1. Jika simpul yang akan dihapus adalah satu-satunya simpul:


  • bebas (kepala);
  • kepala = NULL;
  • ekor = NULL;



2.   Jika simpul yang akan dihapus adalah kepala:
  • kepala = kepala-> berikutnya;
  • bebas (kepala-> prev);
  • head-> prev = NULL;

3.   Jika simpul yang akan dihapus adalah ekor:
  • ekor = ekor-> prev;
  • bebas (ekor-> berikutnya);
  • tail-> next = NULL;



9. Circular Doubly Linked List


=> Ini mirip dengan linked list melingkar tunggal, tapi total pointer di setiap node di sini adalah 2 (dua) pointer.


10. Header Linked List

=> Sebuah header linked list adalah tipe khusus linked list yang berisi node header di awal daftar. Jadi, dalam sebuah header linked list, START (L) tidak akan mengarah ke simpul pertama dari daftar tapi START (L) akan berisi alamat simpul header.


Selasa, 20 Februari 2018

Pertemuan ke - 1 - Pointer, Array and Introduction to Data Structure - 2101691676 - Handi Putra Tjioe



Pointer, Array and
Introduction to Data Structure



1. ARRAY

=> Kumpulan Data atau Elemen-elemen yang bertipe data sama



Karakteristik Dari Array : 

     - Bersifat Homogen (Tipe data sama)

     - Bersifat Statis (Mempunyai Batasan dari pemesanan alokasi memori)

     - Dapat Diakses Secara Acak


Jenis - jenis Array :

      - 1. Array 1 Dimensi

       - 2. Array 2 Dimensi

       - 3. Array Multi Dimensi




Array 1 Dimensi : Array yang terdiri dari 1 baris serta 1 Kolom Saja



Cara Pendeklarasian Array 1 Dimensi :


tipe_data nama_array[jumlah_elemen];

Sebagai Contoh : 

int rumah[10];

int rumah = {2,1,5,3,4,5,6,8,9,0};

Penjelasan :

2 alamat memori ke-1 : index elemen Array ke 0

1 alamat memori ke-2 : index elemen array ke 1

5 alamat memori ke-3 : index elemen array ke 2

......

0 alamat memori ke - 10 : index elemen array ke 9

atau

int rumah[3];

rumah[0] = 2;

rumah[1] = 5;

rumah[2] = 9;


Contoh Program Array 1 Dimensi dari Bahasa C : 








Array 2 Dimensi : Array yang terdiri dari beberapa Baris dan kolom




Cara Pendeklarasian Array 2 Dimensi :


tipe_data  nama_var_array [banyak_baris] [banyak_kolom];

artinya :

          - tipe_data           => tipe data elemen array

          - banyak_baris    => maksimum suatu baris

          - banyak_kolom  => maksimum suatu kolom

sebagai contoh :

int rumah[3][6];

rumah[0][2] = 2;

rumah[2][1] = 9;

rumah[1][5] = 13;

rumah[2][4] = 4;

Contoh Program Array 1 Dimensi dari Bahasa C : 






Array Multi Dimensi : Array yang sama atau serupa dengan Array 2 Dimensi


Cara Pendeklarasian Array Multi Dimensi :


tipe_data nama_array [ukuran1] [ukuran2] .... [ukuran N];

Sebagai contoh :

int rumah[4][3][7][10];

rumah[0][2][2][9] = 2;

rumah[2][1][6][0] = 9;

rumah[3][0][0][6] = 13;

rumah[2][1][3][8] = 10;







Storing Array Values




Sebagai Contoh :

Initialization of Array : 

int marks[5] = {90, 82, 78, 95, 88};

Inputting Values :

inti, marks[10];

for(i=0; i<10; i++){

scanf("%d\n", &marks[i]); }


Assigning Values :

int i, arr1[10], arr2[10];

for(i=0; i<10; i++){

arr2 = arr1; }





Operation In Array

=> Ada sejumlah operasi yang bisa dilakukan pada array, seperti :


- Traversal   => proses kunjungan dalam pohon, dengan setiap node hanya dikunjungi tepat satu kali.


- Insertion => sebuah metode pengurutan data dengan menempatkan setiap elemen data pada pisisinya dengan cara melakukan perbandingan dengan data – data yang ada. 


- Searching  => mencari sebuah data dengan cara menelusuri tempat penyimpanan data tersebut. 


- Delete         => Menghapus sebuah elemen pada index tertentu.


- Merging       => Penggabungan dari Suatu array lain


- Sorting => suatu proses menyusun kembali data yang sebelumnya telah disusun dengan suatu pola tertentu, sehingga tersusun secara teratur menurut aturan tertentu ( untuk data yang bertipe numerik atau karakter).




2. POINTER

=> sebuah variabel yang digunakan sebagai penunjuk alamat dari variabel lain. Suatu pointer bukan berisi dengan suatu nilai data seperti halnya pada variabel biasa, variabel pointer berisi dengan suatu alamat. Untuk mendeklarasikan variabel pointer kita menggunakan tanda asterik / bintang (*) didepan variabel yang di deklarasikan pada tipe data tertentu. Tanda ini juga dapat dipakai untuk mengakses nilai dari variabel yang telah ditunjuk. Untuk mendapatkan alamat dari variabel pointer kita menggunakan tanda &




Ada 2 Operator yang digunakan pada Pointer, yaitu :

- &  ( Operator Alamat )

- *  ( Operator Isi )


Cara Pendeklarasian Pointer :



Jika kita memiliki deklarasi :

int x;

int *px;

maka x adalah variabel bertipe Integer dan px adalah pointer bertipe 
integer.

px = &x; => x mengembalikan alamat x dan menugaskannya sebagai nilai px

jadi x = 10; atau *px =10;

Contoh Program Pointer di Bahasa C :









3. DATA STRUCTURE

=>  cara menyimpan atau merepresentasikan data didalam komputer agar bisa dipakai secara efisien. Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol.


Contoh Umum dari Struktur Data, yaitu :


-  Array => Kumpulan Data atau Elemen-elemen yang bertipe data sama





- Linked Lists => struktur data linier. Berbeda dengan array yang juga merupakan struktur data linier dan tipe data komposit, linked list dibentuk secara dinamik.




- Queues atau antrian => sekumpulan data yang mana penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan atau front). 





- Stacks atau tumpukan => sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhir kali dimasukkan akan pertama kali keluar dari tumpukan tersebut. Tumpukan dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan tabel fix). Ciri tumpukan:
  • TOP merupakan sebutan untuk elemen paling atas dari suatu stack
  • Elemen TOP merupakan elemen yang paling akhir ditambahkan
  • Elemen TOP diketahui
  • penambahan dan penghapusan elemen selalu dilakukan di TOP
  • LIFO




- Binary Trees => tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut, maka tiap node dalam binary tree hanya boleh memiliki paling banyak dua child.




- Hash Tables => salah satu struktur data yang digunakan dalam penyimpanan data sementara. Tujuan dari hash table adalah untuk mempercepat pencarian kembali dari banyak data yang disimpan. Hash table menggunakan suatu teknik penyimpanan sehingga waktu yang dibutuhkan untuk penambahan data (insertions), penghapusan data (deletions), dan pencarian data (searching) relatif sama dibanding struktur data atau algoritma yang lain.









4. TYPE DATA

=> Suatu tipe yang digunakan untuk menginisialisasikan variabel atau kumpulan objek dan satu set operasi yang bekerja pada objek tersebut.


Macam - macam Tipe Data :


- Integer    => Tipe Data Eksak dari Hardware, tipe data dalam bentuk String of bits dengan sign dipaling kiri. ada beberapa tipe integer dalam bahasa pemrograman, diantaranya : byte, short, int, long, long int


- Float        => Tipe Data bentuk aproksimasi yang digunakan untuk menghitung, ada 2 bentuk float, yaitu Float dan double (pecahan) dan lebih banyak lagi seperti Long Float atau Long Double.


- Decimal   => Tipe Data yang menempatkan Titik Desimal tepat pada tempatnya. 


- Boolean  => Tipe Data yang paling sederhana, karena terdiri dari value True dan False. 


-  Char  => Tipe Data yang disimpan numerik, namum ditampilkan dalam format ASCII 16-bit UNICODE.






5. ABSTARCT DATA TYPE


=> Tipe Data yang dibuat oleh programmer sendiri yang memiliki suatu nama tertentu, ADT dapat berupa tipe data dasar namun diberi nama baru atau berupa kumpulan tipe data berbeda yang dberi nama baru.


C / C ++ memiliki konsep yang disebut class dan struct yang membantu programmer dalam mengimplementasikan tipe data abstrak.





PERTANYAAN

1. Berapakah Jumlah Maksimal Dimensi yang dapat dibuat dalam sebuah array ??

Jawab : Sekitar 256 Dimensi pada Array atau 12 Dimensi pada array


2. Apakah Terdapat Triple Pointer? Jika Ada Berapakah Jumlah Pointer Maksimal yang dapat dibuat dari sebuah pointer ??

Jawab :  Maksimal 3 Pada Triple Pointer