Selasa, 13 Maret 2018
Selasa, 27 Februari 2018
02 - Implementasi Linked List - 2101686234 - Fandy Shobryanto
Hari ini saya akan membahas tentang implementasi terhadap linked list. Implementasi pada linked list dapat berupa :
void popBelakang(){
if(head){
struct kelas*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");
}
}
- Polynomial Representation
Polynomial Representation adalah sebuah persamaan pangkat tiga seperti 6x3 + 9x2 + 7x + 10
setiap term yang ada pada polynomial seperti diatas dapat di representasikan sebagai node dari linked list.
persamaan diatas nilainya adalah 6, 9, 7, 1 dan koefesiennya adalah 3, 2, 1, 0. Maksudnya adalah
x pangkat tiga sebagai 3,
x pangkat dua sebagai 2,
dan x pangkat 1 sebagai 1,
serta x pangkat 0 sebagai 0
- Header Linked List
- Single Linked List
- Polynomial Representation
- Cicular Single Linked List
- Doubly Linked List
- Circular Doubly Linked List
- Header Linked List
Single Linked List adalah sebuah Linked List yang menggunakan sebuah variabel pointer saja untuk menyimpan banyak data. Single Linked List juga hanya mempunyai satu arah penunjuk ke alamat data selanjutnya (NEXT). Setiap data diwakili dengan NODE dan node ini memiliki nilai nya masing - masing serta memiliki alamat data selanjutnya. Node - Node yang saling terhubung satu sama lain yang diawali dari HEAD dan diakhiri dengan TAIL.
Untuk membuat List,pertama - tama kita perlu mendefinisikan struktur Node terlebih dahulu.
struct tnode {
int nilai;
struct tnode *next;
};
struct tnode *head = 0
*head adalah pointer untuk menuju ke elemen pertama pada Linked List.
- Push
Push adalah sebuah operasi insert. Pada Linked List terdapat 2 kemungkinan insert,yaitu melalui depan (pushDepan) ataupun belakang (pushBelakang). PushDepan berarti data yang terakhir dimasukkan akan berada di depan data lainnya, begitu juga sebaliknya pushBelakang berarti data yang terakhir dimasukan akan berada di belakang data lainnya. Contohnya seperti berikut :
pushDepan : 1, 3, 5, 7, 10 maka hasilnya akan 10 => 7 => 5 => 3 => 1 => NULL
pushBelakang : 1, 3, 5, 7, 10 maka hasilnya akan 1 => 3 => 5 => 7 => 10 => NULL
contoh pushDepan :
struct kelas{
char nama_Mhs[25];
int nilai;
struct kelas *next;
}*head, *tail;
char nama_Mhs[25];
int nilai;
struct kelas *next;
}*head, *tail;
void pushDepan(char nama_Mhs[],int nilai){
struct kelas *curr = (struct kelas*) malloc(sizeof(struct kelas));
strcpy(curr->nama_Mhs , nama_Mhs);
curr->nilai = nilai;
if(head == NULL)
strcpy(curr->nama_Mhs , nama_Mhs);
curr->nilai = nilai;
if(head == NULL)
{
head = tail = curr;
tail->next = NULL;
}else{
curr->next = head;
head = curr;
}
}
head = tail = curr;
tail->next = NULL;
}else{
curr->next = head;
head = curr;
}
}
- Pop
Pop adalah kebalikannya dari push yaitu operasi delete. Pada operasi ini juga sama seperti operasi insert yaitu memili 2 kemungkinan,yaitu popDepan ataupun popBelakang. PopDepan berarti data yang ingin dihapus adalah data yang paling depan dan popBelakang berarti data yang ingin dihapus adalah data yang paling belakang(akhir).
Contoh popDepan
if(head){
struct kelas*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");
}
}
Polynomial Representation adalah sebuah persamaan pangkat tiga seperti 6x3 + 9x2 + 7x + 10
setiap term yang ada pada polynomial seperti diatas dapat di representasikan sebagai node dari linked list.
persamaan diatas nilainya adalah 6, 9, 7, 1 dan koefesiennya adalah 3, 2, 1, 0. Maksudnya adalah
x pangkat tiga sebagai 3,
x pangkat dua sebagai 2,
dan x pangkat 1 sebagai 1,
serta x pangkat 0 sebagai 0
-Circular Single Linked List
Dalam circular, node terakhir berisi pointer untuk node pertama. Kita dapat memiliki Circular Single Linked List dan juga Circular Double Linked List. kita tidak dapat memasukkan nilai NULL pada list.
- Doubly Linked List
Double Linked List hampir sama seperti Single Linked List, tetapi hanya memiliki NEXT saja.Contohnya seperti berikut :
struct kelas{
char nama_Mhs[25];
int nilai;
struct kelas *next;
char nama_Mhs[25];
int nilai;
struct kelas *next;
struct kelas *prev;
};
};
struct tnode *head = 0;
struct tnode *tail = 0;
struct tnode *tail = 0;
Cara pushBelakang :
struct kelas *curr = (struct kelas*) malloc(sizeof(struct kelas));
node->value = x;
node->next = NULL;
node->prev = tail;
tail->next = node;
tail = node;
node->next = NULL;
node->prev = tail;
tail->next = node;
tail = node;
- Circular Doubly Linked List
Hal ini sangat mirip dengan circular single linked list,tapi total pointer yang berada pada masing - masing node adalah 2 pointer.
Selain macam - macam jenis Linked List diatas, ada juga jenis lain yaitu Header Linked List. Header Linked List adalah header spesial yang terdiri dari node headernya. Linked List ini tidak menunjuk pada node pertama(head) namun hanya menyimpan alamat node dari headernya.
2101686234 - Fandy Shobryanto
Selasa, 20 Februari 2018
01 - Pointer, Array and Introduction to Data Structure - 2101686234 - Fandy Shobryanto
- Array
Array adalah sekumpulan data yang memiliki tipe data yang sama (homogen). Jadi dapat dikatakan bahwa array merupakan kumpulan dari data-data tunggal yang dijadikan dalam 1 variabel yang alamat memori nya berbeda. Misalnya kita mempunyai 5 buah data dengan nilai 7, 10, 13, 14 dan 18. Contoh :
//deklarasi
int nilai[5];
//inisialisasi
nilai[0]=7;
nilai[1]=[10];
nilai[2]=[13];
nilai[3]=[14];
nilai[4]=[18];
Dalam contoh diatas kita sudah menyimpan suatu data yaitu sebuah nilai. Suatu array hanya dapat menyimpan tipe data yang sama. Array mempunyai dimensi lebih dari satu, disebut dengan array multi dimensi.Pada contoh diatas saya menggunakan array berdimensi satu. Maksudnya berdimensi satu yaitu data-data akan disimpan dalam satu baris array, sehingga hanya dibutuhkan satu pernomoran indeks. Secara teori bahwa dimensi pada array tidak ada batasnya,tergantung kapasitas memori dan compilernya.
- Pointer
Pointer adalah suatu variable yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain di dalam memori.
Deklarasi Pointer
TipeData*namapointer;
Contoh penulisan
int y = 5;
int *yPtr;
Maka pernyataannya
yPtr = &y;
lalu &y kembali ke alamat y dan menetapkan nilai yPtr untuk menetapkan nilai y saat dikatakan
y = 5;
atau
*yPtr = 5;
Deklarasi Pointer
TipeData*namapointer;
Contoh penulisan
int y = 5;
int *yPtr;
Maka pernyataannya
yPtr = &y;
lalu &y kembali ke alamat y dan menetapkan nilai yPtr untuk menetapkan nilai y saat dikatakan
y = 5;
atau
*yPtr = 5;
- Data Structure
Data Structure(struktur data) adalah suatu pengelolaan data yang dapat dipergunakan secara efisien dan efektif pada bahasa pemrograman.Beberapa contoh dari Data Structure :
- Array
- Linked List
- Queue
- Stack
- Binary Tree
- Hash Table
1. Array
Array adalah sekumpulan data yang memiliki tipe data yang sama (homogen) yang dibedakan oleh indeks.
2. Linked List
Linked list adalah truktur data yang dinamis sehingga setiap element dapat ditambahkan,dihapus atau diupdate dimana saja.Pada Linked List setiap node menunjuk node lainnya.
3. Queue
Queue adalah struktur data yang memiliki konsep seperti antrian, dimana setiap data yang pertama masuk adalah yang pertama keluar (First In First Out).
4. Stack
Stack adalah struktur data yang berkebalikan dengan Queue yang dimana Stack memiliki konsep LIFO (Last In First Out) dan FILO (First In Last Out).Contohnya seperti tumpukan piring,yang pertama ditaruh maka akan kita ambil terakhir karena menghindari piringnya jatuh dan sebaliknya piring yang terakhir ditaruh maka akan kita ambil terlebih dahulu.
5. Binary Tree
Binary Tree adalah struktur data yang didefinisikan sebagai kumpulan elemen yang disebut node.Tiap noe berisi pointer kiri,pointer kanan dan isi elemen.
2101686234 - Fandy Shobryanto
Langganan:
Postingan (Atom)







