Dalam istilah ilmu komputer, struktur data adalah cara penyimpanan
, pengorganisasian , dan pengaturan data di dalam media penyimpanan
komputer sehingga data tersebut dapat digunakan secara efisien.
Linked List juga memiliki berbagai macam jenis yaitu:
Struktur Data Sederhana,
misalnya Array dan Record.
Struktur Data majemuk, terdiri dari:
o Linier, misalnya: Stack, Queue, dan Linier Linked List.
o Nonlinier, misalnya Binary Tree, Binary Search Tree, Graph, dll.
Struktur Data majemuk, terdiri dari:
o Linier, misalnya: Stack, Queue, dan Linier Linked List.
o Nonlinier, misalnya Binary Tree, Binary Search Tree, Graph, dll.
Linked List
adalah bagian dari Struktur Data
Linked list
atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang
terdiri dari urutan record data dimana setiap record memliki field yang
menyimoan alamat/ referensi dari record selanjutnya (dalam urutan) elemen data
yang dihubungkan dengan link pada linked list disebut Node. Biasanya didalam
suatu lnked list, terdapat istilah head and tail.
• Head adalah elemen yang berada
pada posisi pertama dalam suatu linked list
• Tail adalah element yang berada
pada posisis terakhir dalam suatu linked list
Linked List juga memiliki berbagai macam jenis yaitu:
Circular Singly Linked List
Dari gambar tersebut kita dapat lihat angka 1 adalah head dari rantai tersebut, dan dari head menuju ke angka 2 dan menuju ke angka 3 dan setelah itu menuju kembali kepada head awalnya.
Dari sini kita dapat menganalisa bahwa tail tidak tercangkup dan itu memberi kita sebuah conclusion baru linked list ini tidak menunjuk ke NULL dan dia menunjuk kembali ke head nya.
Untuk pseudocode nya:
1(head)->next->2->next->3->next->1(head)
Dari sini kita dapat menganalisa bahwa tail tidak tercangkup dan itu memberi kita sebuah conclusion baru linked list ini tidak menunjuk ke NULL dan dia menunjuk kembali ke head nya.
Untuk pseudocode nya:
1(head)->next->2->next->3->next->1(head)
Doubly Linked List
Untuk Doubly Linked List sendiri anda dapat lihat tiap node saling terhubung karna mereka memiliki next dan prev dan bagian tail menunjuk ke NULL untuk memberitahu bahwa itu bagian akhir dan akan kembali ke sebelumnya melalui prev dan head sendiri menunjuk ke NULL melalui prev untuk memberitahu itu bagian terakhir
Doubly Linked Circular List
Doubly Linked Circular List ini adalah gabungan dari Circular Singly Linked List dan Double Linked List dimana tiap node saling terhubung dengan next dan prev dan kita bisa lihat perbedaan dari sebelumya dimana head dan prev tidak menunjuk kepada NULL melainkan menunjuk kembali ke head dari next maupun prev.
Hashing dan Hash Table
Gagasan hashing adalah untuk mendistribusikan entri (pasangan kunci / nilai) di seluruh larik bucket
Idealnya, fungsi hash akan menetapkan setiap kunci ke bucket unik, tetapi sebagian besar desain tabel hash menggunakan fungsi hash yang tidak sempurna, yang dapat menyebabkan benturan hash di mana fungsi hash menghasilkan indeks yang sama untuk lebih dari satu kunci. Tabrakan semacam itu selalu diakomodasikan dalam beberapa cara.
Binary Search Tree
Binary Search Tree adalah sebuah konsep penyimpanan data, dimana data disimpan dalam bentuk tree yang setiap node dapat memiliki anak maksimal 2 node. Selain itu, terdapat juga aturan dimana anak kiri dari parent selalu memiliki nilai lebih kecil dari nilai parent dan anak kanan selalu memiliki nilai lebih besar dari parent.
Stack dan Queue
Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO (Last In First Out), benda yang terakhir masuk dalam stack akan menjadi benda pertama yang dikeluarkan dari stack.
Queue merupakan suatu struktur data linear. Konsepnya hampir sama dengan Stack, perbedaannya adalah operasi penambahan dan penghapusan pada ujung yang bebeda.
Sistem pada pengaksesan pada Queue menggunakan sistem FIFO (First In First Out), artinya elemen yang pertama masuk itu yang akan pertama dikeluarkan dari Queue.
Assignment(Shop Case)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct Data{
char kata[65];
int jumlah;
int harga;
Data *prev, *next;
}*head = NULL, *tail = NULL;
int totalData = 0;
struct Data *createNewData(char kata[], int jumlah){
struct Data *temp = (struct Data*)malloc(sizeof(struct Data));
strcpy(temp->kata,kata);
temp->jumlah = jumlah;
temp->harga = (rand()%100)*1000;
temp->prev = NULL;
temp->next = NULL;
return temp;
}
void pushMid(char kata[], int jumlah){
Data *curr = createNewData(kata,jumlah);
if(head == NULL)
{
head = tail = curr;
}
else if(strcmp(curr->kata, head->kata) < 0) //PUSH HEAD
{
curr->next = head;
head->prev = curr;
head = curr;
}
else if(strcmp(curr->kata, tail->kata) > 0) // PUSH TAIL
{
tail->next = curr;
curr->prev = tail;
tail = curr;
}
else
{
Data *temp = head;
while(strcmp(curr->kata,temp->kata) > 0)
{
temp = temp->next;
}
curr->next = temp;
curr->prev = temp->prev;
temp->prev->next = curr;
temp->prev = curr;
}
}
void update(int id,int jumlahNew){
Data *temp = head;
int i = 1;
while(i != id)
{
temp = temp->next;
i++;
}
temp->jumlah = jumlahNew;
temp->harga = (rand()%100)*1000;
}
void pop(int id){
int i = 1;
Data *temp = head;
if(id == 1)
{
//popHead ;
if(head == tail)
{
head = NULL;
free(temp);
}
else
{
head = head->next;
head->prev = NULL;
free(temp);
}
}
else if(id == totalData && totalData != 1)
{
temp = tail;
tail = tail->prev;
tail->next = NULL;
free(temp);
}
else
{
while(i != id-1)
{
temp = temp->next;
i++;
}
Data *curr = temp->next;
temp->next = curr->next;
temp->next->prev = temp;
free(curr);
}
totalData--;
}
void printAll(){
Data *temp = head;
int i = 1;
while(temp != NULL)
{
printf("%-2d | %-20s | %-2d | %-4d\n",i, temp->kata,temp->jumlah,temp->harga);
temp = temp->next;
i++;
}
printf("\n");
}
void beliProduk(){
system("cls");
char kata[65];
int jumlah;
if(head==NULL)
{
printf("Tidak Ada Item\n");
printf("Silakan Tekan Tombol Apapun untuk kembali");
getchar();
system("cls");
}
else
{
printf("Input Nama Produk : ");
scanf("%[^\n]", kata);
getchar();
printf("Input Jumlah Produk : ");
scanf("%d", &jumlah);
getchar();
pushMid(kata,jumlah);
printf("Produk Telah Dimasukkan\n");
totalData++;
getchar();
}
}
void hapusProduk(){
system("cls");
int id;
printAll();
if(head==NULL)
{
printf("Tidak Ada Item\n");
printf("Silakan Tekan Tombol Apapun untuk kembali");
getchar();
system("cls");
}
else
{
printf("Input Nomor Item Yang Ingin Anda Hapus: ");
scanf("%d", &id);
getchar();
pop(id);
printf("Item Telah di Hapus\n");
getchar();
}
}
void ubahProduk(){
system("cls");
int id, jumlahNew;
printAll();
if(head==NULL)
{
printf("Tidak Ada Item\n");
printf("Silakan Tekan Tombol Apapun untuk kembali");
getchar();
system("cls");
}
else
{
printf("Input Nomor Item : ");
scanf("%d", &id);
getchar();
printf("Input Jumlah Baru Item : ");
scanf("%d", &jumlahNew);
getchar();
update(id,jumlahNew);
printf("Item has been updated\n");
getchar();
}
}
void printBiaya(){
system("cls");
printf("Harga Biaya\n");
printf("|||||||||||\n");
printAll();
printf("Jumlah Total : -\n");
printf("Silakan Menambah Biaya nya\n");
getchar();
Data *temp = head;
while(temp != NULL)
{
Data *curr = temp;
temp = temp->next;
free(curr);
}
system("cls");
}
void Menu()
{
int input ;
do{
printf("Toko Budiono Guntoro\n");
printf("=================\n");
printAll();
printf("1. Beli Item\n");
printf("2. Ubah Item Qty\n");
printf("3. Hapus Item\n");
printf("4. Perlihatkan Harga\n");
printf("5. Exit\n");
printf("Pilih Nomor >> ");
scanf("%d", &input) ;
getchar() ;
switch(input)
{
case 1 : beliProduk();
break ;
case 2 : ubahProduk();
break;
case 3 : hapusProduk();
break;
case 4 : printBiaya();
break;
}
}while(input != 5);
}
int main(){
srand(time(0));
Menu();
return 0;
}



Comments
Post a Comment