Review Semester
Data Structure
Dalam ilmu komputer, struktur data adalah organisasi data, manajemen, dan format penyimpanan yang memungkinkan akses dan modifikasi yang efisien. Lebih tepatnya, struktur data adalah kumpulan nilai data, hubungan di antara mereka, dan fungsi atau operasi yang dapat diterapkan pada data.
Struktur data berfungsi sebagai dasar untuk tipe data abstrak (ADT). ADT mendefinisikan bentuk logis dari tipe data. Struktur data mengimplementasikan bentuk fisik dari tipe data.
Berbagai jenis struktur data cocok untuk berbagai jenis aplikasi, dan beberapa sangat khusus untuk tugas-tugas tertentu. Sebagai contoh, basis data relasional biasanya menggunakan indeks B-tree untuk pengambilan data, sementara implementasi kompiler biasanya menggunakan tabel hash untuk mencari pengidentifikasi.
Struktur data menyediakan sarana untuk mengelola sejumlah besar data secara efisien untuk penggunaan seperti basis data besar dan layanan pengindeksan internet. Biasanya, struktur data yang efisien adalah kunci untuk merancang algoritma yang efisien. Beberapa metode desain formal dan bahasa pemrograman lebih menekankan struktur data, daripada algoritma, sebagai faktor pengorganisasian utama dalam desain perangkat lunak. Struktur data dapat digunakan untuk mengatur penyimpanan dan pengambilan informasi yang disimpan dalam memori utama dan memori sekunder.
1. Pointer & Array
- Array
Variabel Larik atau lebih dikenal dengan array adalah Tipe terstruktur yang terdiri dari sejumlah komponen-komponen yang mempunyai tipe sama. Suatu Array mempunyai jumlah komponen yang banyaknya tetap. Banyaknya komponen dalam suatu larik ditunjukan oleh suatu indek untuk membedakan variabel yang satu dengan variabel yang lainnya. Variabel array dalam C++, dapat digolongkan menjadi dua buah dimensi yaitu Array Berdimensi Satu dan Array multi dimensi.
Pointer ke Array diantaranya adalah banyak loncatan dari pointer satu ke pointer yang lain. karena se
cara internal array juga menyatakan alamat, yaitu pengenal array sama dengan alamat pada elemen pertama, pada array.
- Pointer
Sebuah pointer adalah tipe khusus dari variabel yang menyimpan alamat dalam memori dari variabel lain dan dapat digunakan untuk memanipulasi variabel. Secara umum, setiap kali variabel yang digunakan dalam C ++, itu harusnya ada di suatu tempat di memori komputer dan pointer dapat menyimpan lokasi variabel tertentu.
Contoh Program :
Hasil Program :
2. Linked List
-Single Linked List
Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail menunjuk ke NULL.
contoh :

contoh codingannya :
-Double Linked List
Double Linked List merupakan suatu linked list yang memiliki dua variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunjuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL.
Contoh:

Contoh Kodingannya :

3. Stack & Queue
-- Stack
Stack atau tumpukan dapat diartikan sebagai suatu kumpulan data yang seolah-olah terlihat seperti ada data yang diletakkan di atas data yang lain. Kaidah utama dalam konsep stack adalah LIFO yang merupakan singkatan dari Last In First Out, artinya adalah data yang terakhir kali dimasukkan atau disimpan, maka data tersebut adalah yang pertama kali akan diakses atau dikeluarkan.
Berikut ilistrasi kerja stack :

Terdapat dua operasi stack, yaitu push & pop.
- Push
Operasi push, berfungsi untuk memasukkan sebuah nilai atau data ke dalam stack. Sebelum sebuah nilai atau data dimasukkan ke dalamstack, prosedur ini terlebih dahulu akan menaikkan posisi top satu level ke atas.
Berikut ilustrasi kerja push :

- Pop
Operasi pop, berfungsi untuk mengeluarkan atau menghapus nilai terakhir (yang berada pada posisi paling atas) dari stack, dengan cara menurunkan nilai top satu level ke bawah.
Berikut ilustrasi kerja pop :

-- Queue
Queue atau antrian merupakan struktur data linear dimana penambahan komponen dilakukan disatu ujung, sementara pengurangan dilakukan diujung lain. Kaidah utama dalam konsep queue adalah FIFO yang merupakan singkatan dari First In First Out, artinya adalah data yang pertama kali dimasukkan atau disimpan, maka data tersebut adalah yang pertama kali akan diakses atau dikeluarkan.
Berikut ilustrasi queue :

4. Hashing, Hash Table, Tree & Binary Tree
-- Hashing
Hash atau Hashing berarti memenggal dan kemudian menggabungkan. Hash menggunakan memori penyimpanan utama berbentuk array dengan tambahan algoritma untuk mempercepat pemrosesan data. Hash merupakan suatu metode yang secara langsung mengakses record-record dalam suatu tabel dengan melakukan transformasi aritmatik pada key yang menjadi alamat dalam tabel tersebut. Hashing digunakan sebagai metode untuk menyimpan data dalam sebuah array agar penyimpanan data, pencarian data, penambahan data dan penghapusan data dapat dilakukan dengan cepat.
-- Hash Table
Hash Table adalah sebuah struktur data yang terdiri atas sebuah tabel dan fungsi yang bertujuan untuk memetakan nilai kunci yang unik untuk setiap record (baris) menjadi angka (hash) lokasi record tersebut dalam sebuah tabel.
-- Binary Tree
Dalam ilmu komputer, sebuah pohon biner adalah struktur data pohon di mana setiap node memiliki paling banyak dua anak, yang disebut sebagai anak kiri dan anak kanan. Definisi rekursif hanya menggunakan teori himpunan gagasan adalah bahwa (non-kosong) pohon biner adalah tiga (L, S, R), di mana L dan R adalah pohon biner atau himpunan kosong dan S adalah satu set tunggal. Beberapa penulis memungkinkan pohon biner menjadi himpunan kosong juga.
Berikut Binary Tree Simpel :
5. 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.
SourceCode :
MARKET
#include <stdio.h>
//Aqil Muhammad Falah
#include <stdlib.h>
#include <time.h>
//2301923716
#include <string.h>
struct data{
char nama[101];
int jumlah;
long long int harga;
struct data *next, *prev;
}*head=NULL,*tail=NULL,*curr=NULL;
void PushTail(char name[],int amount,long long int price){
curr=(struct data*) malloc(sizeof(struct data));
strcpy(curr->nama,name);
curr->jumlah=amount;
curr->harga=price;
if (head==NULL)
{
head=tail=NULL;
}
else
{
tail->next=curr;
curr->prev=tail;
tail=curr;
}
head->prev=tail->next=NULL;
}
void PushHead(char name[],int amount,long long int price){
curr=(struct data*) malloc(sizeof(struct data));
strcpy(curr->nama,name);
curr->jumlah=amount;
curr->harga=price;
if (head==NULL)
{
head=tail=curr;
}
else
{
curr->next=head;
head->prev=curr;
head=curr;
}
tail->next=head->prev=NULL;
}
void push(char name[],int amount, long long int price)
{
curr = (struct data*)malloc(sizeof(struct data));
strcpy(curr->nama,name);
curr->jumlah=amount;
curr->harga=price;
if (head==NULL)
{
head=tail=curr;
}
else if (strcmp(curr->nama,head->nama)<0)
{
PushHead(name,amount,price);
}
else if (strcmp(curr->nama,tail->nama)>0)
{
PushTail(name,amount,price);
}
else
{
struct data*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 popback(){
curr=tail;
tail=tail->prev;
free(curr);
tail->next=NULL;
}
void popfront()
{
curr =head;
head=head->next;
free (curr);
head->prev=NULL;
}
void pop(char name[]){
if(strcmp(head->nama,name)==0)
{
popfront();
}
else if (strcmp(tail->nama,name)==0)
{
popback();
}
else
{
struct data *temp = head;
int val=0;
val = strcmp(temp->next->nama,name);
while(val!=0)
{
temp=temp->next;
}
curr=temp->next;
temp->next=curr->next;
curr->next->prev=temp;
free(curr);
}
}
int n=0;
void print(){
curr=head;
if (curr==NULL)
{
printf("No Data\n");
printf("Please Add Data");
printf("Kindness Is Free\n");
}
else
{
printf("| %-10s | %-3s | %-10s | %-10s |\n","Item Name", "Item Quantity", "Price","Total");
printf("-----------------------------------------------------------------\n");
long long int total=curr->jumlah*curr->harga;
printf("| %-10s | %-13d | %-10lld | %-10lld |\n",curr->nama,curr->jumlah,curr->harga,total);
curr=curr->next;
printf("\n");
printf("\n");
printf("\n");
printf("Kindness Is Free\n");
}
}
//opsi tampilan
void menu(){
printf("Welcome to papaqilo's market\n");
printf("------------------------\n");
printf("1. Add Item\n");
printf("2. Edit Item Quantity\n");
printf("3. Delete Item\n");
printf("4. Print All Item And Total Price\n");
printf("5. Exit\n");
printf("Your choice: ");
scanf("%d",&n);getchar();
}
void add(){
char input[101];
int jumlah=0;
long long int pricetag=0;
printf("Input Item Name: ");
scanf("%[^\n]",input); getchar();
printf("Input Item Quantity: ");
scanf("%d",&jumlah);
getchar();
pricetag=(rand()%100)*1000;
push(input,jumlah,pricetag);
printf("Item Succesfully Added!\n\n");
}
void ubah(){
char input[101];
int jumlah=0;
long long int pricetag=0;
printf("Input Item To be Edit: ");
scanf("%[^\n]",input); getchar();
puts("");
printf("Input Quantity To Be Edit: ");
scanf("%d",&jumlah);
getchar();
pricetag=(rand()%100)*1000;
edit(input,jumlah,pricetag);
printf("Item Succesfully Edited!\n\n");
}
void hapus(){
char input[101];
printf("Input Item Name: ");
scanf("%[^\n]",input); getchar();
printf("\n");
pop(input);
printf("Item Succesfully Deleted!\n\n");
}
int main(){
srand(time(0));
do{
menu();
if (n==1)
{
add();
}
else if (n==2)
{
ubah();
}
else if (n==3)
{
hapus();
}
else if (n==4)
{
print();
}
}while(n!=5);
return 0;
}



Comments
Post a Comment