SUMMARY DAN TUGAS
Review materi:
- Linked List
- Stack &Queue
- Hash table and binary tree
- Binary Search tree
- Linked List
Apa itu Linked list?....Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari urutan record data dimana setiap record memiliki field yang menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data yang dihubungkan dengan link pada Linked List disebut Node. Biasanya didalam suatu linked list, terdapat istilah head dan tail.
JENIS JENIS LINKED LIST ANTARA LAIN :
A.Double Linked list

B.Circular Single Linked List

C.CIRCULAR DOUBLE LINKED LIST

JENIS JENIS LINKED LIST ANTARA LAIN :
A.Double Linked list

B.Circular Single Linked List

C.CIRCULAR DOUBLE LINKED LIST

- STACK
Stack merupakan struktur data dengan konsep LIFO (Last in First Out), penerapan stack dapat dilakukan baik secara array ataupun linked list (pushDepan/head & popDepan/head).
- QUEUE
Queue merupakan struktur data dengan konsep FIFO (First in First Out), penerapan queue dapat dilakukan baik secara array ataupun linked list (pushBelakang/tail & popDepan/head).
- HASH TABLE
Hash table merupakan salah satu struktur data yang digunakan dalam penyimpanan data sementara. Tujuan dari hash table adalah untuk mempercepat pencarian kembali dari banyak data yang disimpan.
Operasi pada Hash Table:
- insert
- find
- remove
- getiterator
Metode untuk membangun Hash function:
- Mid-Square
- Division
- Folding
- Digit Extraction
- Rotating Hash
- BINARY TREE
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut terpisah. maka tiap node dalam binary tree hanya boleh memiliki paling banyak dua child.
Jenis-jenis binary tree :
- Full Binary Tree
- Complete Binary Tree
- Skewed Binary Tree
Impelementasi Binary Tree:
- Create
- Clear
- Empty
- Insert
- Find
- Update
- Retrieve
- DeleteSub
- Characteristic
- Traverse
Binary Search Tree adalah struktur data yang mengambil konsep Binary Tree namun terdapat aturan bahwa setiap child node sebelah kiri selalu lebih kecil nilainya dari pada root node. Begitu pula sebaliknya, setiap child node sebelah kanan selalu lebih besar nilainya daripada root node.
Operasi yang bisa dilakukan di binary search tree :
- Find
- Insert
- Remove
Tugas koding membuat aplikasi
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct shop{
char nama[45];
int qty, sell;
struct shop *next;
struct shop *prev;
}*head,*tail,*curr,*temp;
shop *shopping(const char nama[],int qty,int sell){
shop *curr=(shop*)malloc(sizeof(shop));
strcpy(curr->nama,nama);
curr->qty=qty;
curr->sell=sell;
curr->next=curr->prev=NULL;
return curr;
}
void pushHead(shop *curr){
if(head==NULL){
head=tail=curr;
}else{
head->prev=curr;
curr->next=head;
head=curr;
}
}
void pushTail(shop *curr){
if(head==NULL){
head=tail=curr;
}else{
tail->next=curr;
curr->prev=tail;
tail=curr;
}
}
void pushMid(shop *curr){
if(head==NULL){
head=tail=curr;
}else if(strcmp(curr->nama,head->nama)<0){
pushHead(curr);
}else if(strcmp(curr->nama,tail->nama)>0){
pushTail(curr);
}else{
shop *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;
if(head==tail){
head = tail = NULL;
}
else{
head=head->next;
head->prev=NULL;
}
free(curr);
}
void popTail(){
curr=tail;
if(head==tail){
head=tail=NULL;
}
else{
tail=tail->prev;
tail->next=NULL;
}
free(curr);
}
void popSearch(char nama[]){
shop *temp= head;
while(strcmp(nama,temp->nama)!=0){
if(temp->next==NULL){
printf("Tidak ditemukan\n");
}
temp = temp->next;
}
if(temp==head){
popHead();
}
else if(temp==tail){
popTail();
}
else{
temp->prev->next=temp->next;
temp->next->prev=temp->prev;
free(temp);
}
}
void popAll(){
while(head!=NULL){
popHead();
}
}
void printAll(){
shop*temp=head;
int i=0;
printf("===============================================================\n");
printf("| %-3s | %-25s | %-9s | %-13s |\n","No","Nama Barang","Jumlah","Harga");
printf("===============================================================\n");
while(temp!=NULL){
i++;
printf("| %-3d | %-25s | %-9d | Rp. %-9d |\n",i,temp->nama,temp->qty,temp->sell);
temp=temp->next;
}
printf("===============================================================\n");
}
void input(){
char nama[45];
int qty, sell;
do{
printf(" barang yang mau dibawa [1..45 karakter] : ");
scanf("%[^\n]",&nama);
}while(strlen(nama)<1||strlen(nama)>45);
do{
printf("Jumlah barang yang mau dibawa [1..100] : ");
scanf("%d",&qty);
}while(qty<1||qty>100);
sell = rand() % 99000 +1000;
pushMid(shopping(nama,qty,sell));
printf("\nBarang telah ditambahkan\n\n");
printf("press enter to continue");
getchar();getchar();
}
void clear(){
if(head==NULL){
printf("Tidak ada apa-apa\n");
printf("press enter to continue");
getchar();
}else{
printAll();
char nama[45];
printf(" barang yang mau dikembalikan [1..45 karakter] : ");
gets(nama);
popSearch(nama);
}
}
void edit(){
if(head==NULL){
printf("Tidak ada apa- apa\n");
printf("press enter to continue");
getchar();
}else{
printAll();
char nama[45];
int newqty;
printf("Barang yang mau diubah jumlahnya [1..45 karakter] : ");
gets(nama);
do{
printf("Jumlah barang yang mau dibawa [1..100] : ");
scanf("%d",&newqty);
}while(newqty<1||newqty>100);
shop *temp = head;
while(temp!=NULL){
if(strcmp(nama,temp->nama)==0){
temp->qty=newqty;
}
temp=temp->next;
}
}
}
void checkout(){
if(head==NULL){
printf("Tidak ada apa-apa\n");
printf("press enter to continue");
getchar();
}else{
shop *temp=head;
int i=0;
int total =0;
int totalsell=0;
printf("===============================================================\n");
printf("| %-3s | %-25s | %-9s | %-13s |\n","No","Nama Barang","Jumlah","Harga");
printf("===============================================================\n");
while(temp!=NULL){
i++;
total = temp->qty*temp->sell;
printf("| %-3d | %-25s | %-9d | Rp. %-9d |\n",i,temp->nama,temp->qty,temp->sell);
temp=temp->next;
totalsell += total;
total =0;
}
printf("===============================================================\n");
printf("Total : Rp.%d\n",totalsell);
printf("\n\nkindness is free");
getchar();
}
}
int main(){
int choose;
do{
printf("1. Ambil barang\n");
printf("2. Ubah jumlah barang\n");
printf("3. Kembalikan barang\n");
printf("4. Lihat keranjang\n");
printf("5. Total pembayaranr\n");
printf("6. EXIT\n");
printf("Pilih shop > ");
scanf("%d",&choose);
getchar();
switch(choose){
case 1:
input();
system("zzz");
break;
case 2:
edit();
system("zzz");
break;
case 3:
clear();
system("zzz");
break;
case 4:
system("zzz");
printAll();
printf("\n\npress enter to continue");
getchar();
break;
case 5:
system("zzz");
checkout();
popAll();
head=tail=NULL;
break;
default:
break;
}
}while(choose!=6);
}
#include<stdlib.h>
#include<string.h>
struct shop{
char nama[45];
int qty, sell;
struct shop *next;
struct shop *prev;
}*head,*tail,*curr,*temp;
shop *shopping(const char nama[],int qty,int sell){
shop *curr=(shop*)malloc(sizeof(shop));
strcpy(curr->nama,nama);
curr->qty=qty;
curr->sell=sell;
curr->next=curr->prev=NULL;
return curr;
}
void pushHead(shop *curr){
if(head==NULL){
head=tail=curr;
}else{
head->prev=curr;
curr->next=head;
head=curr;
}
}
void pushTail(shop *curr){
if(head==NULL){
head=tail=curr;
}else{
tail->next=curr;
curr->prev=tail;
tail=curr;
}
}
void pushMid(shop *curr){
if(head==NULL){
head=tail=curr;
}else if(strcmp(curr->nama,head->nama)<0){
pushHead(curr);
}else if(strcmp(curr->nama,tail->nama)>0){
pushTail(curr);
}else{
shop *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;
if(head==tail){
head = tail = NULL;
}
else{
head=head->next;
head->prev=NULL;
}
free(curr);
}
void popTail(){
curr=tail;
if(head==tail){
head=tail=NULL;
}
else{
tail=tail->prev;
tail->next=NULL;
}
free(curr);
}
void popSearch(char nama[]){
shop *temp= head;
while(strcmp(nama,temp->nama)!=0){
if(temp->next==NULL){
printf("Tidak ditemukan\n");
}
temp = temp->next;
}
if(temp==head){
popHead();
}
else if(temp==tail){
popTail();
}
else{
temp->prev->next=temp->next;
temp->next->prev=temp->prev;
free(temp);
}
}
void popAll(){
while(head!=NULL){
popHead();
}
}
void printAll(){
shop*temp=head;
int i=0;
printf("===============================================================\n");
printf("| %-3s | %-25s | %-9s | %-13s |\n","No","Nama Barang","Jumlah","Harga");
printf("===============================================================\n");
while(temp!=NULL){
i++;
printf("| %-3d | %-25s | %-9d | Rp. %-9d |\n",i,temp->nama,temp->qty,temp->sell);
temp=temp->next;
}
printf("===============================================================\n");
}
void input(){
char nama[45];
int qty, sell;
do{
printf(" barang yang mau dibawa [1..45 karakter] : ");
scanf("%[^\n]",&nama);
}while(strlen(nama)<1||strlen(nama)>45);
do{
printf("Jumlah barang yang mau dibawa [1..100] : ");
scanf("%d",&qty);
}while(qty<1||qty>100);
sell = rand() % 99000 +1000;
pushMid(shopping(nama,qty,sell));
printf("\nBarang telah ditambahkan\n\n");
printf("press enter to continue");
getchar();getchar();
}
void clear(){
if(head==NULL){
printf("Tidak ada apa-apa\n");
printf("press enter to continue");
getchar();
}else{
printAll();
char nama[45];
printf(" barang yang mau dikembalikan [1..45 karakter] : ");
gets(nama);
popSearch(nama);
}
}
void edit(){
if(head==NULL){
printf("Tidak ada apa- apa\n");
printf("press enter to continue");
getchar();
}else{
printAll();
char nama[45];
int newqty;
printf("Barang yang mau diubah jumlahnya [1..45 karakter] : ");
gets(nama);
do{
printf("Jumlah barang yang mau dibawa [1..100] : ");
scanf("%d",&newqty);
}while(newqty<1||newqty>100);
shop *temp = head;
while(temp!=NULL){
if(strcmp(nama,temp->nama)==0){
temp->qty=newqty;
}
temp=temp->next;
}
}
}
void checkout(){
if(head==NULL){
printf("Tidak ada apa-apa\n");
printf("press enter to continue");
getchar();
}else{
shop *temp=head;
int i=0;
int total =0;
int totalsell=0;
printf("===============================================================\n");
printf("| %-3s | %-25s | %-9s | %-13s |\n","No","Nama Barang","Jumlah","Harga");
printf("===============================================================\n");
while(temp!=NULL){
i++;
total = temp->qty*temp->sell;
printf("| %-3d | %-25s | %-9d | Rp. %-9d |\n",i,temp->nama,temp->qty,temp->sell);
temp=temp->next;
totalsell += total;
total =0;
}
printf("===============================================================\n");
printf("Total : Rp.%d\n",totalsell);
printf("\n\nkindness is free");
getchar();
}
}
int main(){
int choose;
do{
printf("1. Ambil barang\n");
printf("2. Ubah jumlah barang\n");
printf("3. Kembalikan barang\n");
printf("4. Lihat keranjang\n");
printf("5. Total pembayaranr\n");
printf("6. EXIT\n");
printf("Pilih shop > ");
scanf("%d",&choose);
getchar();
switch(choose){
case 1:
input();
system("zzz");
break;
case 2:
edit();
system("zzz");
break;
case 3:
clear();
system("zzz");
break;
case 4:
system("zzz");
printAll();
printf("\n\npress enter to continue");
getchar();
break;
case 5:
system("zzz");
checkout();
popAll();
head=tail=NULL;
break;
default:
break;
}
}while(choose!=6);
}
Komentar
Posting Komentar