SUMMARY DATA STRUCTURES











Linked List pada umumnya adalah urutan data yang saling berhubungan seperti rantai. Pada umumnya linked list memiliki 2 elemen paling umum yaitu "Head" dan "Tail" dimana Head adalah elemen yang berada di posisi paling depan di sebuah linked list dan Tail adalah elemen di posisi terakhir. Terdapat beberapa jenis Linked List yaitu :

1. Single Linked List
Yaitu sebuah linked list yang memiliki head dan tail seperti biasa, dan setiap pointer menunjuk ke element berikutnya. Hanya saja element terakhir (Tail) pointernya akan menunjuk ke NULL.
Visualisasinya adalah sebagai berikut :
single linked list







double linked list



2. Double Linked List
Yaitu sebuah linked list yang setiap element, memiliki 2 pointer. 1 pointer untuk menunjuk ke arah element selanjutnya, dan 1 lagi pointer untuk menunjuk ke element sebelumnya. dan setiap Head dan Tail pada double linked list ini akan selalu memiliki 1 pointer yang mengarah ke NULL.

Berikut adalah visualisasinya :







3. Circular Linked List
Circular linked list adalah sebuah linked list yang tidak ada satupun pointer yang menunjuk ke arah NULL. Menagapa begitu? karena pada pointer si-Tail yang seharusnya menunjuk ke NULL, akan di arahkan ke Start sehingga akan terbentuk sebuah loop.
Visualisasinya adalah sebagai berikut :




circular single

circular double











METODE METODE PADA LINKED LIST

1. Push();
Push adalah sebuah function yang berguna untuk memasukkan data kedalam sebuah linked list. nah cara memasukkan data ini ada 2. yaitu push head dan push tail.

a. Push head 
Push head adalah memasukkan data melalui depan sehingga data di belakangnya bergerak, dan data yang dimasukkan menjadi didepan alias menjadi head dari linked list tersebut. contohnya kita punya linked list berupa = {10 , 20 , 30}, maka jika kita PushHead(60) linked list yang kita miliki akan menjadi = {60, 10, 20, 30} dan yang menjadi head adalah '60'.

b. Push tail
Push tail adalah kebalikan dari push head. Jika di push head kita memasukkan data didepan, di push tail kita memasukkan data di belakang dan menjadikan data yang baru masuk tersebut tail dari linked list yang kita punya. Contohnya kita punya list = {10, 20, 30} dan jika kita PushTail(40) maka list kita akan menjadi = {10, 20, 30, 40}.



2. pop();
pop adalah sebutan fungsi untuk menghapus linked list yang kita miliki. pop juga mempunyai 2 jenis yaitu pop head dan pop tail. cara kerjanya juga sama dengan push head dan push tail, hanya saja pop ini bukan menambah melainkan menghapus.


STACK

adalah salah satu list linear dalam struktur data yang digunakan untuk menyimpan dan mengambil data dengan konsep LIFO (Last In First Out). Dalam prosesnya, untuk memasukkan sebuah data ke dalam stack atau dengan kata lain ke bagian atas dari sebuah tumpukan digunakan perintah push. Dan untuk memindahkan data dari tempat tersebut digunakan perintah pop. Sedangkan dalam penyajiannya, stack bisa memakai array atau linked list.


QUEUE (ANTRIAN)

          Queue merupakan suatu struktur data linear. Konsepnya hampir sama dengan Stack, perbedaannya adalah operasi penambahan dan penghapusan pada ujung yang bebeda. Penghapusan dilakukan pada bagian depan (front) dan penambahan berlaku pada bagian belakang (Rear). Elemen-elemen di dalam antrian dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur. Dan Sistem pada pengaksesan pada Queue menggunakan sistem FIFO (First In First Out), artinya elemen yang pertama masuk itu yang akan pertama dikeluarkan dari Queue.
Operasi-operasi pada Queue
1. Create Queue (Q) : membuat antrian baru Q, dengan jumlah elemen kosong.
2. Make NullQ (Q) : mengosongkan antrian Q, jika ada elemen maka semua elemen dihapus.
3. EnQueue : berfungsi memasukkan data kedalam antrian.
4. DeqQueue : berfungsi mengeluarkan data terdepan dari antrian.
5. Clear : Menghapus seluruh Antrian
6. IsEmpty : memeriksa apakah antrian kosong
7. IsFull : memeriksa apakah antrian penuh.


Binary Search Tree

Sebuah Binary Search Tree atau BST singkatnya adalah suatu struktur data yang mendukung cepatnya pencarian, sorting atau peanataan beruntun dan juga masukan dan penghapusan data yang mudah. BST juga dikenal sebagai bentuk yang lebih berurutan dari Binary tree.

Pada BST terdapat juga hal-hal demikian:
  > Subtree kiri  dari suatu node biasanya hanya memiliki keys yang lebih sedikit dari pada key pada nodenya
  > Subtree kanan dari suatu node biasanya memiliki keys yang lebih banyak atau lebih besar dari pada key pada nodenya.
  > Subtree kiri dan kanan,masing-masing harus berbentuk BST dan tidak boleh ada node yang sama.

BST juga memiliki fungsi seperti, find, insert dan remove.

Pada BST biasanya juga disediakan dengan urutannya diantara keys agar dapat memudahkan operasi atau fungsi pencarian seperti mencari nilai minimum dan nilai maksimum. jika tidak ada urutan tersebut maka saat mencari akan dibutuhkan untuk setiap key dicari untuk menemukan kunci yang diperlukan.

Contoh dari BST =
>>


A. Find
Dengan fungsi ini pertama akan dibandingkan key dengan akar dari nodenya, jika key nya terdapat pada akar yang sesuai maka, return akarnya. Jika key nya lebih kecil dari key akarnya, maka kita bisa pindahkan ke subtree bagian kiri. Jika tidak berhasil maka pencarian akan dilemparkan ke bagian sebelah kanan.

B. Insert
>> Dimulai dari awal akarnya
>> Kedua, nilai yang akan ditambahkan akan dibandingkan dengan bagian kiri subtree, dan jika nialinya lebih besar dari bagian kiri subtree maka dimasukkan ke bagian kanan
>> Pengulangan akan terus terjadi hingga terdapat node kosong untuk dimasukkan nilai baru secara rekursif

C. Delete
>> Jika nilainya terdapat di akhir node atau leaf, maka bisa langsung di delete nodenya.
>> Jika key atau nilainya adalah sebuah node maka delete node tersebut dan sambungkan cabang yang berhubungan dengan bagian sebelumnya.

>> Jika key atau nilainya memiliki dua nak cabang maka cari anak paling kiri dari subtree kanan atau juga anak paling kanan dari subtree kiri untuk menggantikannya dan pengulangan terjadi secara rekursif hingga hasil telah didapatkan.



codingan : 

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

int choose = -1;
char itemName[105];
int qty = -1;
int oldStock, newStock;
char editItem[105];
char removeItem[105];

struct data{
char itemName[105];
int value, price;
struct data *next, *prev;
}*head = NULL, *tail = NULL, *curr;

void pushQueue(char x[], int value, int price){
data*temp = (struct data*) malloc(sizeof(struct data));
strcpy(temp->itemName,x);
temp->value = value;
temp->price = price;
temp->next = temp->prev = NULL;
if(head == NULL){
head = tail = temp;
}
else{
tail->next = temp;
temp->prev = tail;
tail = temp;
}
}

void printAll(){
curr = (struct data*) malloc(sizeof(struct data));
curr = head;
int i = 1;
while(curr != NULL){
printf ("%d. %-10s %-3d\n", i, curr->itemName, curr->value);
curr = curr->next;
i++;
}
}

void updateData(int lama, int baru){
curr = (struct data*) malloc(sizeof(struct data));
int pos = 0;
curr = head;
while(curr!=NULL){
pos++;
if(curr->value == lama){
curr->value = baru;
printf ("Successful!\n");
return;
}
if(curr->next!=NULL){
curr = curr->next;
}
else break;
}

}

int checkStock(int lama){
curr = (struct data*) malloc(sizeof(struct data));
curr = head;
int pos = 0;
if(head == NULL){
printf ("Item list is empty...\n"); getchar();
}
else{
while(curr!=NULL){
pos++;
if(curr->value == lama){
return 1;
}
if(curr->next!=NULL){
curr = curr->next;
}
else break;
}
}
return 0;
}

void deleteItem(char x[105]){
if(head == NULL){
printf ("Item list is empty...\n"); getchar();
}
else if(head == tail){
free(head);
head = tail = NULL;
}
else if(strcmp(x,head->itemName) == 0){
curr = head;
head = head->next;
free(curr);
}
else if(strcmp(x,tail->itemName) == 0){
curr = tail;
tail = tail->prev;
free(curr);
tail->next = NULL;
}
else{
curr = head;
while(curr != NULL && strcmp(x,curr->itemName) != 0){
curr = curr->next;
}
if(curr == NULL){
puts("No item found!\n");
}
else{
curr->next->prev = curr->prev;
curr->prev->next = curr->next;
free(curr);
}
}
}


void pilih1(){

int random = (rand() %(10000 + 1 - 1000))  + 1000;
do{
printf ("Input item name :");
scanf ("%[^\n]", itemName); getchar();
} while (strlen(itemName) < 5 || strlen(itemName) > 10);
do{
printf ("Input item stock :");
scanf ("%d", &qty); getchar();
}while(qty < 1);
pushQueue(itemName,qty, random);
}

void pilih2(){
curr = (struct data*) malloc(sizeof(struct data));
curr = head;
if(curr != NULL){
printAll();
printf ("Choose stock to edit: ");
scanf ("%d", &oldStock); getchar();
if(checkStock(oldStock) == 1){
printf ("Input new stock: ");
scanf ("%d", &newStock);
updateData(oldStock,newStock);
} else{
printf ("%d does not found!\n", oldStock); getchar();
}
}
else{
printf ("Item list is empty...\n"); getchar();
}
puts("");
}

void pilih3(){
curr = (struct data*) malloc(sizeof(struct data));
curr = head;
if(curr != NULL){
printAll();
printf ("Choose item to delete: ");
scanf ("%s", removeItem); getchar();
deleteItem(removeItem);
}
else{
printf ("Item list is empty...\n"); getchar();
}
}

void deleteList(struct data** head_ref) { 

   struct data* current = *head_ref; 
   struct data* next; 
  
   while (current != NULL)  
   { 
       next = current->next; 
       free(current); 
       current = next; 
   } 

   *head_ref = NULL;


void pilih4(){
curr = head;
if(curr == NULL){
printf ("Item list is empty!\n"); getchar();
}
else{

int i = 1;
int total = 0;
while(curr != NULL){
printf ("%d. %-10s %-3d  Rp.%2d\n", i, curr->itemName, curr->value, curr->price);
total += (curr->value * curr->price);
curr = curr->next;
i++;
}
printf("Total = Rp.%d\n", total);
puts("Kindness is free!"); getchar();
}
deleteList(&head);
return;
}

int main(){
srand(time(NULL));

do{
system("toko");
printf ("Toko Jaya\n");
printf ("1. Add item\n");
printf ("2. Edit item\n");
printf ("3. Delete item\n");
printf ("4. CheckOut\n");
printf ("5. Exit\n");
printf ("Choose >>");
scanf ("%d", &choose); getchar();
system("toko");
switch(choose){
case 1:
pilih1();
break;
case 2:
pilih2();
break;
case 3:
pilih3();
break;
case 4:
pilih4();
break;
}
} while(choose != 5);
return 0;
}




Comments