Tuesday, February 27, 2018

Pertemuan 2-Linked List Implementation I-2101655475-Daniel Yuan Markus

LINKED LIST

Linked List adalah struktur data yang terdiri dari urutan record data dimana setiap record memiliki field yang menyimpan alamat dari record selanjutnya.

- Linked List lebih efisien dalam penggunaan memori, karena ketika kita hendak menyimpan data, baru kemudian dia akan meminta memorinya.
- Linked List akan mendukung bentuk struktur data yang lain

Ada beberapa macam Linked List yaitu :
1. Single Linked List
2.  Circular Single Linked List
3. Double Linked List
4. Circular Double Linked List
5.  Header Linked List


Single Linked List

Single Linked List = Menggunakan sebuah variabel  pointer   dan Pointer next nya menunjuk ke
node selanjutnya.
Nodes = Objek yang mereferensikan dirinya sendiri

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

- Single Linked List : Insert
Untuk insert ada 4 macam cara :
1. Didepan (head)
Syntax :
struct tnode * node =
   (struct tnode*) malloc (sizeof(struct tnode) );
node -> value = x; //Berarti kita isi variable value yang ada di node yang baru
node -> next = head;
head = node;

2. Dibelakang (tail)
3. Ditengah (Setelah node yang kita tentukan)
4. Ditengah (Sebelum node yang kita tentukan)
- Single Linked List : Delete
   Ada 2 kondisi yang harus kita perhatikan : Jika x ada didepan node / x tidak ada didepan node
Syntax :
struct tnode *curr = head;

//Jika x ada dibagian depan node
if(head -> value == x){
   head = head -> next; //Maka head akan pindah ke sebelahnya
   free(curr);
}

//Jika x ada dibagian belakang node
else if(tail -> value == x ){
   while (curr -> next !=tail) curr = curr-> next;
   free(tail); tail = curr;
   tail -> next = NULL;
}

//Jika x tidak ada di depan node, cari lokasinya
else{
   while(curr -> next -> value != x) curr = curr -> next;
   struct tnode *del = curr -> next;
   curr -> next = del -> next;
   free(del);
}

Polynomial Representation

Contoh :
Polynomial p(x) = p(x) = 8x5 + 7x6 + 4x2  + 8. Secara khusus, polynomial dibagi menjadi 2 bagian
yaitu Koefisien dan Eksponen dari suku yang bersangkutan. Maka dapat direpresentasikan seperti
berikut :
| 8 | 5 |   | -> | 7 | 6 |   | -> | 4 | 2 |   | -> | 8| 0 | x |


Circular Single Linked List

Circular Single Linked List =  Single Linked List yang pointer nextnya menunjuk pada dirinya
sendiri. 
- Jika terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke node
  terdepannya sehingga Linked List tersebut berputar. 
- Node terakhir akan menunjuk lagi ke head.


Double Linked List

Double Linked List  = Memiliki 2 variabel pointer yaitu pointer yang menunjuk ke node selanjutnya
dan pointer yang menunjuk ke node sebelumnya 

Syntax :
struct tnode{
   int value;
   struct tnode *next;
   strcut tnode *prev;
};

struct tnode *head = 0;
struct tnode *tail = 0;


- Double Linked List : Insert
   Pertama, kita harus mengalokasi node baru  dan memberikan nilai kepadanya. Lalu kita hubungkan
   node tersebut dengan Linked List yang sudah ada
Syntax :
struct tnode *node =
   (struct tnode*) malloc (sizeof(struct tnode) );
 node -> value = x;
 node -> next = NULL;
 node -> prev = tail
 tail -> next = node;
 tail = node;



- Double Linked List : Delete
   Ada 4 kondisi yang perlu diperhatikan ketika "Delete":
  1. Kondisi jika Node tersebut hanya satu - satunya di Linked List
Syntax :
free(head);
head = NULL;
tail = NULL;
  2. Kondisi jika Node ada di Head
Syntax :
head = head -> next;
free (head -> prev);
head -> prev = NULL;
  3. Kondisi jika Node ada di Tail
Syntax :
tail = tail -> prev;
free (tail -> next);
tail -> next = NULL;
  4. Kondisi jika Node tidak di Head / Tail
Syntax :
struct tnode *curr = head;
while(curr -> next -> value != x) curr = curr -> next;
struct tnode *a = curr;
struct tnode *del = curr -> next;
a -> next = b;
b -> prev = a;
free(del);

Circular Double Linked List

Circular Double Linked List = Terdapat node yang memiliki 3 field, yaitu 1 field pointer yang
menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field
yang berisi data untuk node tersebut.


Header Linked List

Header Linked List = Header spesial yang terdiri dari node headernya. Jadi Linked List tersebut
tidak menunjuk pada node pertama (head) namun hanya menyimpan alamat dari node headernya.
Contoh Tanpa Header Node:
L : |   |  ->  |  ant |   |  ->  |  bat  |   |  -> | cat |  \  |

Contoh dengan Header Node : 
L : |   |  ->   |       |     |  ->  |  ant |   |  ->  |  bat  |   |  -> | cat |  \  |

Tuesday, February 20, 2018

Pertemuan 1-Array & Linked List-2101655475-Daniel Yuan Markus

ARRAY 

Pengertian
Set item data yang disusun secara baik menjadi rangkaian dan diacu / ditunjuk oleh 1 identifier. Array harus homogen, nilainya terbatas, harus ditentukan sebelumnya dan dimulai dari index ke 0.

Array  Declaration & Accessing Array :
 a. One dimensional array (Syntax : type name[size]; )
 b. Two dimensional array (Syntax : type name[size1] [size2]; )
 c. Multi dimensional array (Syntax : type name[size1] [size2] [...]; )
    Mempunyai elemen - elemen yang disusun kedalam baris dan kolom           dan digunakan sebagai      tabel data

Tujuan dari Storing Array Value :
 a. Inisialisasi nilai dari elemen (Initilization of Arrays)
  
  Contoh : 
  int marks[5] = {90,82,77,95,88}
  Berapa maksimal index ke 3 ? 
  Jawaban : 95

 b. Masukkan value ke tiap elemen (Inputting Values)

  Contoh :
  int i, marks[10];
  for(i=0;i<10;i++)
  scanf("%d", &marks[i]);

 c. Menentukan nilai (Assigning Values)
  
  Contoh :
  int i, arr1[10], arr2[10];
  for(i=0;i<10;i++)
  arr2[i] = arr1[i];


Operation in Array :
 a. Transversal
 b. Insertion
 c. Searching
 d. Merging
 e. Sorting


Berapa banyak max dimensi array dari multidimensi ?
Jawaban :  Tidak ada batas max, karena tergantung pada kapasitas memori yang ada.

Penaganan Array :
1. Metode dasar penanganan array 
 a. Mencari nilai terbesar
 b. Mencari nilai terkecil
 c. Menghitung nilai rata - rata
 d. Menghitung nilai total
 e. Menghitung jumlah nilai di bawah rata - rata

2.  Menyortir array (sort)
 a. Bubble sort
 b. Straight selection sort

3. Mencari / Meneliti array (search)
 a. Linear search 


POINTER 

Pengertian 
Sebuah variabel yang menunjuk pada alamat memori lain.
Suatu pointer dimaksudkan untuk menunjukkan ke suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah.

2 Operator dalam pointer :
 a. Operator & = Untuk mengambil alamat
 b. Operator * = Untuk mengambi isi

Contoh :
int a = 10;
int *p = &a;
printf("%d", *p);
Berapa nilai dari *p ? Jawaban : Alamat dari a

Apa perbedaan dari single pointer & double pointer ?
Jawaban : 
Single pointer (*) = Untuk menunjuk pada variabel
Double pointer (**) = Untuk menunjuk single pointer

Berapa max pointer ?
Jawaban : 
Tidak ada batasan, tergantung pada memori yang ada 






DATA STRUCTURE

Pengertian
Cara menyimpan / mempresentasikan data didalam komputer agar bisa dipakai secara efisien.

Some common examples of data structures include :
 a. Arrays = Sebuah variabel yang menyimpan lebih dari 1 buah data yang memiliki tipe data yang          sama 
 b. Linked List(dynamic allocation) = Koleksi data item yang tersusun dalam sebuah barisan secara         linear dengan penyisipan dan pemindahan dapat dilakukan dalam semua tempat di Linked List           tersebut. (Pada saat berjalan, memori baru bertambah)
 c. Queues (First in, First Out)
 d. Stacks (First in, Last Out)
 e. Binary Trees (Biasa dipakai di Multilevel)
 f. Hash tables = Sebuah struktur data yang terdiri atas sebuah tabel dan fungsi yang bertujuan untuk      memetakan nilai kunci yang unik untuk setiap record(baris) menadi angka (hash) lokasi record            tersebut dalam sebuah tabel.

Perbedaan Array dengan Linked List
 a. Array 
  - Elemen data bisa menggunakan record
  - Bersifat statis
  - Alokasi memori dilakukan pada saat array didefinisikan
  - Cara akses bersifat random dengan menggunakan nomor index

 b. Linked List
  - Elemen data selalu menggunakan record
  -  Bersifat dinamis
  - Alokasi memori dilakukan setiap ada penghapusan data
  - Cara akses ke masing - masing class data dilakukan secara linier(selalu dimulai dari elemen                pertama)




STRING

Pengertian
- Rangkaian karakter yang ditangani sebagai unit data tunggal
- Berada dalam bentuk array karakter 1 dimensi

  • Fixed-length string = String yang panjangnya tetap
  • Vanable-length string 
  • Substring = Mengambil bagian dari suatu string

LIST

Pengertian
Memberikan cara yang fleksibel untuk penanganan item data secara urut

Operasi pada list :
 a. Deletion = Penghapusan elemen suatu list
 b. Insertion = Penyisipan elemen ke dalam suatu list
 c. Search = Pencarian elemen dalam suatu list


TREE

Pengertian 
- Struktur data hirarki
- Dikonstruksi menggunakan aturan preseden untuk item data (misal : menggunakan rangkaian alfabet / numerik)

Beberapa istilah :
 a. Node = Elemen dari suatu tree
 b. Root node = Datum pertama yang ditempatkan dalam tree
 c. Parent node = Node yang memiliki node dibawahnya (sub-node) 
 d. Child node = Node yang berada dibawah parent
 e. Leaf node = Node yang tidak mempunyai child



DIGITAL MARKETING

Apa itu digital marketing ?
Digital Marketing adalah suatu usaha untuk melakukan pemasaran sebuah brand / produk melalui dunia digital / internet

Bentuk digital marketing :
Text, video, image, audio

Ilmu digital marketing :
 a. SEO = Usaha - usaha mengoptimasi website untuk mesin pencari agar mendapatkan peringkat            yang lebih baik dari hasil pencarian
    Jenis SEO : On page SEO, Off page SEO
 b. Google Adwords 
     Jenis iklan google adwords : Google search, google display network, youtube ads, email ads
 c. Facebook Ads