SUMMARY SEMESTER 2
- michael kurniawan
- Apr 5, 2020
- 4 min read
POINTER
Pointer sebenarnya sudah dipelajari pada saat semester 1 yaitu pada matakuliah algorithm. Pointer sendiri adalah penunjuk suatu variabel. Pointer wajib memiliki alamat dari variabel yang ditunjuknya.
cara deklarasi pointer seperti ini
tipe_data *nama_pointer;
jika ingin membuat 2 pointer yang berbeda bisa menambahkan 1 bintang lagi atau membuat dengan nama pointer yang berbeda
tipe_data **nama_pointer;
ARRAY
Array merupakan kumpulan variabel yang bertipe data sama. array biasa digunakan untuk menyimpan sebuah nilai.
cara deklarasi array seperti ini
misalnya kita ingin membuat data angka yang dapat menyimpan angka 1-3
maka
int angka[4];
perlu diketahui bahwa setiap kali membuat array banyaknya data harus +1 karena array selalu mulai dari angka 0.
LINKED LIST
Linked list adalah salah satu data structure yang terdiri dari urutan record data dimana setiap record punya field yang berisikan alamat/referensi ke record data berikutnya dalam sebuah urutan.
dalam melakukan deklarasi linked list perlu diketahui kita harus membuat struct datanya terlebih dahulu caranya seperti ini
struct data{
char name[51];
int score; struct data *next;
}*head=NULL, *tail=NULL;
struct data* newNode(char name[], int score){ //1. reserve memory struct data *node = (struct data*)malloc(sizeof(struct data)); //2. assign value strcpy(node->name, name); (*node).score = score; node->next = NULL; return node; }
setelah membuat struct maka kita bisa membuat function dari linked list seperti push dan pop
sebagai contoh kita mau membuat push dan pop function disini yang saya akan contohkan adalah push depan dan pop depan.
Push Depan
void pushHead(struct data **head, struct data **tail, char name[], int score){ //1. reserve memory & 2. assign value struct data *node = newNode(name, score); //3. connect if(*head == NULL) //list masih kosong *head = *tail = node; else{ node->next = *head; *head = node; } }
Pop Depan
void popHead(struct data **head, struct data **tail){ if(*head == NULL) printf("No Data to Delete\n"); else if(*head == *tail){ free(*head); *head = *tail = NULL; } else{ struct data *curr = *head; *head = (*head)->next; free(curr); } }
sebenarnya function ini masih banyak lagi seperti push belakang, push tengah, pop belakang, pop tengah, dan pop all.
dari hasil coding diatas bisa dideklarasikan seperti ini
int main(){ struct data *head=NULL; struct data *tail=NULL; //lalu masukkan function push yang diinginkan misal push middle atau pop pushhead(&head, &tail, "michael", 19);
//perlu diingat function pop tidak akan berjalan jika data yang tersisa tinggal 1 }
CIRCULAR LINKED LIST
Circular Single Linked List adalah sebuah Linked List dimana semua node terhubung untuk membentuk sebuah loop.
Pada Circular Single Linked List tidak memiliki NULL pada bagian akhirnya.
Cara deklarasi Circular Linked List
typedef struct TNode{ int data; TNode *next; };
DOUBLY LINKED LIST
Doubly Linked List adalah Linked List dua arah dimana yang satu berisi refrensi kedata berikutnya dan yang satunya lagi berisi data refrensi berikutnya.
Cara deklarasi Doubly Linked List
struct tnode {
int value;
struct tnode *next;
struct tnode *prev;
};
struct tnode *head = 0;
struct tnode *tail = 0;
HASHING TABLE
Hashing adalah teknik yang digunakan untuk menyimpan dan mengambil key dengan cepat.
Dalam Hashing character string dapat ditransform menjadi sebuah nilai yang datanya pendek atau sebuah key yang mewakili string asli.
hashing function ada beragam contohnya seperti mid-square, division, folding, digit extraction, rotating hash.
dalam hashing table juga ada yang namanya collision
untuk menyelesaikan collision bisa menggunakan 2 cara yaitu
1. Linear Probing
Cari slot kosong berikutnya dan letakkan string tersebut di sana.
2. Chaining
Masukkan string ke dalam slot sebagai chained list(linked list).
TREE & BINARY TREE
Tree adalah struktur data non-linear yang mewakili hubungan hierarkis di antara objek data.
Binary tree adalah struktur data rooted tree di mana setiap node memiliki paling banyak dua anak.
Kedua anak itu biasanya dibedakan sebagai anak kiri dan anak kanan.
Node yang tidak memiliki anak disebut leaf.
tipe-tipe binary tree juga beragam yaitu
1. PERFECT binary tree adalah binary tree di mana setiap level berada pada kedalaman yang sama.
2. Complete Binary Tree adalah binary tree di mana setiap level, kecuali mungkin yang terakhir, terisi penuh, dan semua node sejauh mungkin dibiarkan. Perfect Binary Tree adalah Complete Binary Tree. 3. Skewed Binary Tree adalah binary tree di mana setiap node memiliki paling banyak satu anak.
4. Balanced Binary Tree adalah binary tree di mana tidak ada daun yang jauh lebih jauh dari root daripada leaf lainnya (skema penyeimbangan yang berbeda memungkinkan definisi yang berbeda dari "jauh lebih jauh").
TRANSVERSAL
misal ekspresi pada tree concept
struct tnode {
char chr;
struct tnode *left;
struct tnode *right;
};
lalu buat ekspresi pada tree dari prefix
Bisa dideklarasikan dengan cara rekursif
char s[MAXN];
int p = 0;
void f(struct tnode *curr) {
if(is_operator(s[p])) {
p++; curr->left = newnode(s[p]);
f(curr->left);
p++; curr->right = newnode(s[p]);
f(curr->right);
}
}
Prefix transversal
void prefix(struct tnode *curr){
printf( “%c “, curr->chr );
if ( curr->left != 0 ) prefix(curr->left);
if ( curr->right != 0 ) prefix(curr->right);
}
Postfix transversal
void postfix(struct tnode *curr) {
if ( curr->left != 0 ) postfix(curr->left);
if ( curr->right != 0 ) postfix(curr->right);
printf( “%c“, curr->chr );
}
Infix transversal
void infix(struct tnode *curr) {
if ( curr->left != 0 ) infix(curr->left);
printf( “%c“, curr->chr );
if ( curr->right != 0 ) infix(curr->right);
}
BINARY SEARCH TREE
Binary search tree adalah salah satu struktur data yang faster searching, rapid sorting, and easy insertion and deletion. Binary search tree juga dikenal sebagai versi binary tree yang disort.
binary search tree memiliki 2 operation yaitu insert dan delete
TUGAS MEMBUAT SEBUAH PROGRAM TOKO DENGAN DOUBLE LINKED LIST
Tugas program toko
CPP bisa didownload pada link google drive disini
Nama: Antonio Michael Kurniawan
NIM : 2301924063
댓글