Skip to main content

Rangkuman Untuk UTS

Dalam istilah ilmu komputerstruktur data adalah cara penyimpanan , pengorganisasian , dan pengaturan data di dalam media penyimpanan komputer sehingga data tersebut dapat digunakan secara efisien.
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.

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)


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

Popular posts from this blog

Heap and Tries

Heap adalah struktur data berbasis tree yang khusus di mana tree itu adalah pohon biner lengkap. Heap sendiri memiliki keunikkan nya sendiri yaitu dia lebih berfungsi dalam penginsertan karena bagian akar kita dapat lihat lebih teratur dan seimbang. Penginsertan nya memiliki kecepatan 0(1) dan worst case nya 0(log n)    Ciri - ciri heap sendiri yaitu : - Bagian akar memiliki nilai yang paling besar - Menghapus akar pada tree akan sangat cepat - Anak memiliki nilai yang lebih rendah daripada orang tua Heap dapat dibedakan menjadi dua jenis yaitu: 1. Max-Heap: Dalam Max-Heap key yang di input akan simpul akar harus paling besar di antara kunci yang ada di semua anak-anak itu. Pengrekursif untuk semua sub-tree tersebut. 2. Min-Heap: Dalam Min-Heap kunci yang ada di simpul akar harus lebih kecil dari antara kunci yang ada di semua anak-anak itu. Rekursif juga di implimentasikan pada semua sub-tree tersebut.   Tries ...

Data Structure

3 Maret 2020 Dalam pembelajaran data structure ini, kita dapat mengimplementasikan konsep linked list maupun double linked list sesuai kebutuhan. Dalam memasukkan data kita dapat mengunakan pushHead maupun pushTail tergantung kebutuhan dan penghapusan data dapat menggunakan popHead maupun popTail. Langkah - langkah yang dapat dilakukan adalah: Buat struct yang anda perlukan sesuai dengan data types Lalu buat fungsi pushHead dan pushTail Lalu buat fungsi popHead dan popTail Setelah semua itu panggil semua fungsi di dalam main sesuai kebutuhan Tips untuk membuatnya yaitu lihat alur selalu gunakan malloc pada saat yang dibutuhkan gunakan arrow operation untuk mengakses pointer karna kita menggunakan alamat