Summary
Hai semuanya, kali ini saya ingin memberikan kalian ringkasan mengenai pelajaran pelajaran data strucure dari blog saya sebelumnya.
I. Circular Single Linked List
Sesuai dengan namanya, Circular Single Linked List terdiri dari kata circular dan single linked list,
circular artinya berputar yang maksudnya adalah pointer next pada linked list menunjuk pada dirinya sendiri sehingga membentuk suatu siklus, dan single linked list adalah sebuah linked list yang hanya memiliki satu arah dan tidak bisa bolak balik seperti double linked list.
II. Doubly Linked List
Sesuai dengan namanya, Double Linked List adalah linked list yang tidak hanya terdiri dari satu arah saja, tetapi bisa dua arah, maksudnya adalah di single linked list kita hanya mempunyai pointer next dan kita tidak bisa mengakses node sebelumnya dan dengan doubly linked list kita menambahkan pointer prev dimana kita bisa bebas mengakses node di next atau previous.
III. Circular Doubly Linked List
Sesuai dengan namanya, Circular Doubly Linked List adalah gabungan dari circular dan double linked list dimana circular yang artinya sama seperti circular di single linked list yaitu pointer next nya menunjuk pada dirinya sendiri sehingga terbuat suatu siklus, dan double linked list yang artinya sudah kita bahas di bagian dua yaitu linked list yang mempunyai dua pointer yaitu next dan previous untuk mengakses dua arah.
IV. Stack
Stack atau dalam bahasa Indonesia adalah tumpukan, yang artinya suatu struktur data yang tersusun secara tertumpuk dan menggunakan prinsip LIFO (Last In First Out) yang dimana data data yang dimasukan akan menumpuk dan jika dikeluarkan yang dikeluarkan adalah data terakhir yang dimasukan.
Kalau masih bingung mari saya beri gambarannya dengan sebuah contoh, anggap saja anda mempunyai suatu kotak yang seukuran dengan buku, jika anda ingin memasukan buku kedalam kotak pasti anda akan memasukkannya dari atas, begitu juga dengan buku selanjutnya dan buku selanjutnya. Lalu jika anda ingin mengambil buku ditengah tengah mau tidak mau anda harus perlahan mengambil buku satu persatu dari atas alias buku terakhir yang anda masukan. Itulah yang dimaksud dengan LIFO dan anggaplah konsep buku ini sebagai data data yang anda miliki.
V. Queue
Queue atau dalam bahasa Indonesia adalah antrian, yang artinya suatu struktur data yang tersusun seperti antrian dimana ia menggunakan prinsip FIFO (First In First Out) kebalikan dari dari stack yang dimana data data yang masuk pertama akan menjadi data yang keluar pertama.
Nah mari saya berikan konsep lagi mengenai queue, sekarang bayangkan anda sedang mengantri membayar makanan pasti orang lain yang ingin membayar akan mengantri dibelakang anda dan terus demikian, lalu orang yang didepan pasti akan mendapat giliran membayar dan akhirnya keluar dari antrian. Nah begitulah konsep dari FIFO dimana orang yang mengantri lebih dulu akan keluar lebih dulu. Anggap saja sekarang orang orang itu data yang kalian masukkan.
VI. Hash Table
Jadi hash table itu adalah cara untuk memasukan data data ke sebuah tempat yang sudah ditentukan dengan lebih cepat dari biasanya. Di dalam hash table biasanya menggunakan fungsi hashing untuk menentukan data data yang dimasukan.
VII. Binary Tree
Binary Tree adalah sebuah tree yang setidaknya setiap node nya mempunyai dua anakan.
Sebelum itu saya akan menjelaskan sedikit mengenai apa itu tree yang dimaksud, kalau di blog ini kalian sudah mempelajari tentang stack dan queue itu merupakan linear linked list sedangkan tree itu non-linear linked list. Bayangkan ada sebuah angka dan dia bercabang ke bawah seperti akar akar. nah akar akar itu merupakan anakan dari node node tersebut. Sebuah tree dikatakan tree apabila ia saling terhubung tetapi tidak membentuk sebuah siklus.
Binary search tree merupakan sebuah binary tree yang unik dimana cabang dibagian kirinya pasti lebih kecil dari node awalnya dan cabang dibagian kanannya pasti lebih besar dari node awalnya.
Di dalam Binary Search Tree atau bisa kita singkat sebagai BST banyak terdapat hal yang kita lakukan seperti Searching, Insert dan Delete data data di BST tersebut.
Ada juga saya akan berikan contoh kodingan data structure yang menggunakan linked list mengenai program dreamer market :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
struct barang{
int kuantitas;
int harga;
char nama[255];
struct barang *next, *prev;
}*head,*tail,*curr;
void pushHead(int kuantitas,char nama[]){
curr = (struct barang*)malloc(sizeof(struct barang));
curr->kuantitas = kuantitas;
curr->harga = (rand()%1000)+1;
strcpy(curr->nama,nama);
if(head==NULL){
head = tail = curr;
}
else{
curr->next = head;
head->prev = curr;
head = curr;
}
head->prev = NULL;
tail->next = NULL;
}
void pushTail(int kuantitas,char nama[]){
curr = (struct barang*)malloc(sizeof(struct barang));
curr->kuantitas = kuantitas;
curr->harga = (rand()%1000)+1;
strcpy(curr->nama,nama);
if(head == NULL){
head = tail = curr;
}
else{
curr->prev = tail;
tail->next = curr;
tail = curr;
}
head->prev = NULL;
tail->next = NULL;
}
void pushMid(int kuantitas, char nama[]){
curr = (struct barang*)malloc(sizeof(struct barang));
curr->kuantitas = kuantitas;
curr->harga = (rand()%1000)+1;
strcpy(curr->nama,nama);
curr->next = NULL;
curr->prev = NULL;
if(head == NULL){
head = tail = curr;
}
else if(strcmp(curr->nama,head->nama) < 0){
pushHead(kuantitas,nama);
}
else if(strcmp(curr->nama, tail->nama) > 0){
pushTail(kuantitas,nama);
}
else{
struct barang *temp;
temp = head;
while(strcmp(temp->next->nama,curr->nama) < 0){
temp = temp->next;
}
curr->next = temp->next;
temp->next->prev = curr;
temp->next = curr;
curr->prev = temp;
}
}
void popHead(){
curr = head;
head = head->next;
free(curr);
if(head != NULL)
head->prev = NULL;
}
void popTail(){
curr = tail;
tail = tail->prev;
free(curr);
if(tail != NULL)
tail->next = NULL;
}
void popMid(char nama[]){
if(strcmp(head->nama,nama) == 0){
popHead();
}
else if(strcmp(tail->nama,nama) == 0){
popTail();
}
else{
struct barang *temp;
temp = head;
while(strcmp(temp->next->nama,nama) != 0 && temp!=NULL){
temp = temp->next;
}
if(temp != NULL){
curr = temp->next;
temp->next = curr->next;
curr->next->prev = temp;
free(curr);
}
else{
printf("Tidak ada barang yang dimaksud...\n");
}
}
}
void inputBarang(){
char nama[255];
int kuantitas;
printf("Masukan nama barang : ");
scanf("%[^\n]",nama);
getchar();
printf("Masukan kuantitas barang : ");
scanf("%d",&kuantitas);
getchar();
if(kuantitas<0 || kuantitas>1000){
printf("Barang tidak boleh kurang dari 0 atau lebih dari 1000\n\n");
inputBarang();
}
else{
pushMid(kuantitas, nama);
printf("\n");
printf("Barang anda berhasil dimasukkan...\n\n");
}
}
void editKuantitas(){
char namaSalah[255],namaBenar[255];
int kuantitas;
printf("Masukan nama barang yang ingin diedit : ");
scanf("%[^\n]",namaSalah);
getchar();
printf("Masukan nama barang yang benar : ");
scanf("%[^\n]",namaBenar);
getchar();
printf("Masukan kuantitas yang benar : ");
scanf("%d",&kuantitas);
getchar();
popMid(namaSalah);
pushMid(kuantitas,namaBenar);
printf("Barang berhasil diubah\nPress enter to continue...\n");
getchar();
}
void hapusBarang(){
char nama[255];
printf("Masukan nama barang yang ingin dihapus : ");
scanf("%[^\n]",nama);
getchar();
popMid(nama);
printf("Barang Berhasil dihapus...\n\n");
}
void lihatBarang(){
printf("==============================\n");
printf("Dreamers Market\n");
printf("==============================\n");
curr = head;
while(curr != NULL){
printf("%-15s | %-5d\n",curr->nama,curr->kuantitas);
curr = curr->next;
}
printf("\n\n\n");
}
void checkout(){
int kuantitas=0;
int harga=0;
printf("==============================\n");
printf("Dreamers Market\n");
printf("==============================\n");
curr = head;
while(curr != NULL){
kuantitas += curr->kuantitas;
harga += (curr->kuantitas*curr->harga);
printf("%-15s | %-5d | %-5d\n",curr->nama,curr->kuantitas,curr->harga);
curr = curr->next;
}
printf("\n\n\n");
printf("Total kuantitas barang : %d\n",kuantitas);
printf("Total harga barang : %d\n",harga);
printf("Kindness is free....\nTotal Harga Barang : 0\n");
printf("Press enter to quit\n\n");
getchar();
}
void menu(){
int input;
do{
printf("WELCOME TO DREAMERS MARKET\n");
printf("=============================\n");
printf("1. Input barang\n");
printf("2. Edit kuantitas\n");
printf("3. Hapus barang\n");
printf("4. Lihat barang\n");
printf("5. Checkout\n");
printf("Choose : ");
scanf("%d",&input);
getchar();
switch(input){
case 1: inputBarang();
break;
case 2:
if(head!= NULL){
editKuantitas();
}
else{
printf("Tidak ada barang yang dimaksud...\n");
}
break;
case 3:
if(head != NULL){
hapusBarang();
}
else{
printf("Tidak ada barang yang dimaksud...\n");
}
break;
case 4:
if(head != NULL){
lihatBarang();
}
else{
printf("Tidak ada barang yang dimaksud...\n");
}
break;
case 5: checkout();
break;
}
}while(input!=5);
}
int main(){
head = NULL;
tail = NULL;
srand(time(0));
menu();
return 0;
}
Sekian untuk blog saya kali ini, semoga ringkasan ini dapat membantu kalian lebih memahami data structure.
Nama : Viriyaputra Lawijaya
NIM : 2301866845
Comments
Post a Comment