CA01-002


Rangkuman Pertemuan 2 CA01
Linked List

Butuh malloc untuk alokasi value ke memory yang berbeda

Pointer next dibuat untuk menyimpan data setelahnya, struct data untuk recursive

Indikator posisi awal dengan if head==NULL

Pergeseran dilakukan dengan next->curr

Tail->Next==NULL Sebagai penanda akhir list

Next adalah alamat curr setelah bergeser

Menghapus/pop dengan menggeser curr/tail ke alamat sebelumnya

struct node{
                int value;
                struct node* next;
} *head = NULL, *tail = NULL, *curr;
void push_head(int x){
                curr = (struct node*)malloc(sizeof(struct node));
                curr->value = x;
                curr->next = NULL;
               
                if(head == NULL){
                                head = tail = curr;
                }else{
                                curr->next = head;
                                head = curr;
                }
}
void pop_head(){
                if(head == NULL){ // no data
                                puts("FAILED, NO DATA");
                }else if(head == tail){ // 1 data
                                curr = head;
                                free(curr);
                                head = tail = NULL;
                }else{ // >1 data
                                curr = head;
                                head = head->next;
                                free(curr);
                }
}
void print(){
                curr = head;
                while(curr != NULL){
                                printf("%d\n", curr->value);
                                curr = curr->next;
                }
               
}

STACK & QUEUE
Perbedaan Dasar Stack dan Queue

Stack/tumpuk merupakan LIFO (Last In First Out) karena hanya memiliki head/kepala. Jika digambarkan, seperti tumpukan piring.
Jika ditambah, piring paling baru ada di paling atas, dan saat diambil, piring paling atas lah yang terambil terlebih dahulu. Jika diasumsikan hanya dapat mengambil/menambah satu piring secara berurutan, maka Stack hanya mengenal kepala/Top/Head, dan piring-piring setelahnya.

Di sisi lain, Queue merupakan FIFO (First In, First Out), karena memiliki head dan tail, jika digambarkan, seperti barisan piring

Jika ditambah, maka piring paling baru ada di paling belakang, sedangkan ketika diambil, piring paling depan yang diambil terlebih dahulu. Jika diasumsikan hanya dapat mengambil/menambah satu piring secara berurutan, maka Queue mengenal kepala/Top/Head barisan, ekor/tail/belakang barisan, dan piring-piring setelah ekor/sebelum kepala.

Stack
Stack dalam Data Structure merupakan struktur yang cara penambahan/penghapusan melalui satu end saja, yaitu kepala/head. Seperti penjelasan awal, Push/Insert data dimasukkan dari depan, begitu juga Pop/Delete

Kegunaan Stack
konsep Stack dalam aplikasi adalah undo/redo browser. Ketika halaman baru dibuka, maka dilakukan insert, dan ketika undo, maka akan dilakukan pop dari halaman sekarang/head. Konsep Stack untuk undo/redo juga diaplikasikan di beberapa text editor.

Notasi Postfix, infix, dan prefix
Postfix, infix dan prefix adalah cara penulisan operasi matematika. Postfix berarti operator ditulis setelah angka/operand, prefix berarti operator ditulis sebelum operand, dan infix berarti ditulis diantara operand. Adannya prefix/postfix karena kecepatan algoritma untuk menyelesaikan proses tersebut memiliki Big-O Notation berupa O(N), tidak seperti infix yang memiliki Big-O Notation berupa o(N)^2. Hal ini disebabkan komputer tidak perlu memperhatikan tanda kurung/prioritas operand terlebih dahulu untuk melakukan perhitungan.
 
Postfix






Prefix






Stack digunakan dalam melakuak perhitungan postfix/prefix, juga mengubah infix ke profix/prefix.

perhitungan dengan postfix

Stack digunakan sebagai tempat penyimpanan angka-angka yang akan dihitung.  Setiap kali ada operasi yang dilakuka, operand akan di pop, dan hasil perhitungan akan di insert ke stack.


hal yang sama dilakukan dengan perhitungan prefix. Berdasarkan operasi tersebut, maka langkah-langkah yang dilakukan adalah:
1.       Push (2)
2.       Push (3)
3.       Pop (3) dan (2), push (3^2)
4.       Push (5)
5.       Push (6)
6.       Pop (6) dan (5), push (6*5)
7.       Pop (30) dan (9), push (30-9)
8.       Push (7)
9.       Pop (21) dan (7), push (21+7)

Stack juga digunakan untuk konversi infix ke prefix/postfix.
Expression
Stack
Output
Comment
5^E+D*(C^B+A)
Empty
-
Initial
^E+D*(C^B+A)
Empty
5
Print
E+D*(C^B+A)
^
5
Push
+D*(C^B+A)
^
5E
Push
D*(C^B+A)
+
5E^
Pop And Push
*(C^B+A)
+
5E^D
Print
(C^B+A)
+*
5E^D
Push
C^B+A)
+*(
5E^D
Push
^B+A)
+*(
5E^DC
Print
B+A)
+*(^
5E^DC
Push
+A)
+*(^
5E^DCB
Print
A)
+*(+
5E^DCB^
Pop And Push
)
+*(+
5E^DCB^A
Print
End
+*
5E^DCB^A+
Pop Until '('
End
Empty
5E^DCB^A+*+
Pop Every element
Konversi Infix ke Prefix
Hasil konversi itu dibalik, sehingga hasil akhirnya adalah  +*+A^BCD^E5
DFS/Depth First Search
DFS adalah sebuah algoritma untuk mencari/berpindah dalah sebuah graf/tree. Jika memungkinkan, DFS akan bergeser tanpa melewati garis yang sama. DFS digunakan untuk menentukan graf Acyllic, topology sorting dll.








Queue
Queue dalam Data Structure merupakan struktur yang cara penambahan/penghapusan melalui dua end, yaitu kepala/head dan ekor/tail.  Push/Insert data dilakukan di head/kepala, dan penghapusan dilakukan di ekor/tail.
Kegunaan Queue
Penggunaan Queue ada dalam CPU Scheduling, Multiprogramming, dan asynchronous data transfer. Dalam sehari-hari, seperti urutan panggilan di call center, dan antrian kasir.
Variasi Queue
Queue memiliki variasi lain yaitu Circular Queue, dimana head dan tail tersambung, membentuk sebuah lingkaran

Deque
Deque, atau Deck. Deck adalah sebuah queue yang dapat di insert/delete dari head, juga dari tail.

Ada dua jenis Deque, yaitu Input Restricted Deque, dan Output Restricted Deque. Sesuai Namanya, Input restricted berarti insert hanya dapat dilakukan di satu end, tetapi penghapusan data dapat dilakukan dari kedua end, begitu juga kebalikannya dengan Output Restricted.
Priority Queue
Priority Queue adalah perkembangan lebih lanjut dari queue. Priority Queue memiliki urutan dequeue dan enqueue sesuai dengan nilai yang paling dicari. Semakin mendekati hasil, maka nilai itulahy yang akan dikeluarkan terlebih dahulu

BFS/Breadth First Search
BFS adalah sebuah cara untuk menempuh graf/tree. Perbedaan BFS dan DFS selain dari stack dan queue yang menjadi dasar, adalah cara menempuh. DFS bergeser secara jalur, sedangakn BFS bergerak secara tingkatan. BFS digunakan untuk menggunakan graf bipartite, jalur tempuh paling singkat, P2P networks, dll.


Komentar

Postingan populer dari blog ini

CA01-011 Heap & Tries

CA01-006

CA01-004