twitter
rss


  A.  PENGERTIAN

                Dalam istilah ilmu komputer, sebuah struktur data adalah cara menyimpan, penyusunan dan pengaturan data dalam media penyimpanan komputer sehingga data tersebut dapat dapat digunakan secara efisien.

              Dalam teknik pemograman, struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) ataupun kolom yang hanya digunakan untuk keperluan pemograman yang tidak tampak oleh pengguna. Setiap baris dari kumpulan kolom-kolom tersebut dinamakan catatan (record). Lebar kolom untuk data dapat berubah dan bervariasi. Ada kolom yang lebarnya berubah secara dinamis sesuai masukan dari pengguna, dan juga ada kolom yang lebarnya tetap.

             Dengan sifatnya ini, sebuah struktur data dapat diterapkan untuk mengelolah database (misalnya untuk keperluan data keuangan)atau untuk pengolah kata (word processor)yang kolomnya berubah secara dinamis. Contoh struktur data dapat di;ihat pada berkas-berkas lembar-sebar (spreadsheet), pangkal-data (database), pengolahan kata, citra yang dipampat (dikompres), juga pemampatan berkas dengan teknik tertentu yang memanfaatkan struktur data.


  B.  KEGUNAAN  STRUKTUR  DATA

          Struktur data digunakan untuk meningkatkan efisisiensi penggunaan memori pada saat program komputer sedang bekerja. Penggunaan struktur data yang tepat pada pemograman dapat membuat algoritma jadilebih mudah, kemudahan ini membuat program lebih efisien dan sederhana.

             Meningkatkan efisiensi merupakan tujuan utama pengaplikasian struktur data. Dengan struktur data, proses reservasi memori yang tidak perlu akan diminimalisasi. Selain itu struktur data juga menjamin kemudahan pemahaman algoritma. Sehingga untuk menyelesaikan permasalahan seperti perkalian matriks, visualisasi matriks dan tabel, akan menjadi lebih mudah di pahami.


  C.  TUJUAN PEMBENTUKAN STRUKTUR DATA
     
       Tujuan pembentukan struktur data adalah information hiding atau encapsulation sebagai berikut :
·  Perubahan implementasi struktur data tidak merubah teks program yang menggunakan struktur data bila interface pada struktur data telah dirancang baik sehingga tidak berubah

·   Pemakaian dan pembuatan struktur data dapat dilakukan secara terpisah, yang hany perlu kesepakatan mengenai interface pemakai struktur data tersebut

· Struktur data merupakan sarana pemrograman modular dan menjadi landasan terbentuknya tim pemrograman

  D.  TAHAPAN MEMBUAT STRUKTUR DATA

 1. Tahap Pertama

Spesifikasi atau pendeskripsian struktur data menyatakan apa yang dapat dilakukan struktur data, bukan cara penempatannya. Pendeskripsian ini melibatkan level logic sehingga dapat digunakan konvensi matematika untuk menyatakan sifat-sifat struktur data yang dikehendaki.

2 . Tahap Kedua

Implementasi menyatakan cara penerapan struktur data dengan struktur data yang telah ada. Implementasi struktur data adalah proses pendefinisian tipe data abstark sehingga semua operasi dapat dieksekusi computer. Implementasi berisi dekklarasi struktur penyimpanan item data serta algoritma untuk implementasi operasi, sehingga menjamin terpenuhinya karakteristik struktur data, relasi item data tau invariant pada struktur data tersebut.

3. Tahap Ketiga

Pemrograman struktur data adalah penterjemahan menjadi pernyataan dalam bahasa pemrograman tertentu.struktur data dibangun menggunakan fasilitas pembentukkan atau pembuatan struktur data yang disediakan bahasa seperti array, record dan lain-lain.


  E. JENIS – JENIS STRUKTUR DATA

1.    Struktur Data Sederhana

a.    Arrya (larik)

Larik adalah struktur data statik yang menyimpan sekumpulan elemen bertipe sama. Setipa elemen yang di akses secara langsung melalui indeksnya. Indeks larik harus tipe data yang menyatakan keturunan, misalkan : interger atau karakter. Banyak elemen larik harus sudah diketahui sebelum program dieksekusi. Tipe elemen Lrik dapat berupa tipe sederhana, tipe terstruktur atau tipe larik lain. Nama lain dari array adalah Larik, tabel, atau vektor.

Ø  Contoh penerapan dalam kehidupan sehari-hari :


a). Menonton  bioskop dimana melakukan antri dalam membeli tiket, mobil-mobil yang antri membeli karcis di pintu jalan tol akan membentuk antrian, para calon  mahasiswa yang mendaftarkan diri untuk  ikut  ujian  masuk  perguruan  tinggi  akan  membentuk  antrian  dan  contoh-contoh lain yang banyak dijumpai dalam kehidupan sehari – hari.


b). pemakaian sistem komputer berbagi waktu (time-sharing computer system) dimana ada sejumlah pemakai yang  menggunakan  sistem  tersebut  secara serempak.  Karena  sistem  ini  biasanya menggunakan  sebuah  prosesor  dan  sebuah  memori  utama, maka  jika  prosesor  sedang dipakai oleh seorang pemakai, pemakai-pemakai yang lain harus antri sampai gilirannya tiba.

Ø  Contoh  Program :

#include<iostream>
#include<cstring>
using namespace std;
int main () {

    //mendeklarasikan tipe enumerasi dengan nama jenis_kelamin
    enum jenis_kelamin {Pria,Wanita};

    struct biodata {
        char nama[50];
        char umur[30];
        char hobi[50];
        jenis_kelamin gender;
    }A;

    strcpy(A.nama,"Fachry Maulana Prabowo");
    strcpy(A.umur,"18 tahun");
    strcpy(A.hobi,"Ngode :v");
    A.gender = Pria ;

    //menampilkan nilai yang diisikan ke layar
    cout << A.nama << endl;
    cout << A.umur << endl;
    cout << A.hobi << endl;
    cout << "Gender : " << A.gender << endl << endl;
    cout << " 0 = Pria , 1 = Wanita " ;
    return 0;
}


b.   Record (catatan)

Adalah kumpulan data yang terdiri dari beberapa field (isian) dengan berbagai macam tipe data.

Ø  Contoh Program :

#include<iostream>;
#include<cstring>;
using namespace std;
int main () {
    //membuat tipe struktur dengan nama biodata
    struct biodata {
    char nama[50];
    char umur[30];
    char hobi[50];
    };

    //menggunakan tipe struktur biodata
    //dalam mendeklarasikan variabel A
    biodata A;

    //melakukan pengisian nilai terhadap variabel A
    strcpy(A.nama,"Fachry Maulana Prabowo");
    strcpy(A.umur,"18 tahun");
    strcpy(A.hobi,"Ngode :v");

    //menampilkan nilai yang diisikan ke layar
    cout << A.nama << endl;
    cout << A.umur << endl;
    cout << A.hobi << endl;
    return 0;
}


2.    Struktur Data Majemuk

a.    Linear

·         Stack (tumpukan)

Adalah list linear yang dikenal berupa elemen puncaknya (top), aturan penyisipan dan penghapusan elemenya tertentu (penyisipan selalu dilakukan “diatas” (top) dan penghapusan selalu dilakukan pada “top”).

Karena aturan penyisipan dan penghapusan semacam itu,  “top” adalah satu-satunya alamat tempat terjadinya operasi. Elemen yang paling akhir di tambahkan akan menjadi elemen stack akan tersusun secara LIFO (Last In Firs Out).  
Ø  Penerapan :

a). Dalam kehidupan sehari-hari :

      Pengambilan Koran yang tertumpuk di dalam kardus. Hal ini mengandung konsep stack dimana first in – last out, Koran yang pertama ditaruh pada tumpukan akan diambil paling terakhir saat pengurutan pembacaan tumpukan.

b). Dalam lingkup informatika :

   Sistem pengeluaran peluru pada game FPS (first player shooter) dimana peluru yang ter­-load pertama kali maka akan keluar pada saat akhir dan sebaliknya terjadi pada peluru yang ter­-load terakhir kali.


Ø  Contoh program:
#include <iostream> //file header standart
#include <stdio.h>
using namespace std; //mengunakan namespace std
struct STACK{ //definisi struct stack
int data[5]; //definisi data
int top; //definisi top
};
STACK tumpukan; //pemangginalan stract struck
void inisialisasi(); //pendeklarasian fungsi inisialisasi
int IsEmpty(); //pendeklarasian fungsi isEmpty
int IsFull(); //pendeklarasian fungsi isFull
void push(int data); //pendeklarasian fungsi push
void pop(); //pendeklarasian fungsi pop
int main(void){//pendeklarasian fungsi main program utama yang di jalankan program
int pilih, input, i; //pendeklarasian variable pilih input dan i interget
inisialisasi(); //memanggil fungsi inisialisasi
do{ //membuat perulangan
cout<<"1. Push Data"<<endl; //menampilkan text ke layar
cout<<"2. Pop Data"<<endl; //menampilkan text ke layar
cout<<"3. Print Data"<<endl; //menampilkan text ke layar
cout<<"4. Clear Data"<<endl; //menampilkan text ke layar
cout<<endl; //menampilkan baris baru
cout<<"Pilih : "; //menampilkan text ke layar
cin>>pilih; //input pilihan
switch(pilih){
case 1:{
if(IsFull() == 1){
cout<<"Tumpukan penuh!";
}else{
cout<<"Data yang akan di push: ";
cin>>input;
push(input);
}
cout<<endl;
break;
}
case 2:{
if(IsEmpty() == 1){
cout<<"Tumpukan kosong!";
}else{
cout<<"Data yang akan di pop :"<<tumpukan.data[tumpukan.top]<<endl;
}
cout<<endl;
break;
}
case 3:{
if(IsEmpty() == 1){
cout<<"Tumpukan Kosong !"<<endl;
}else{
cout<<"Data :"<<endl;
for(i = 0;i<=tumpukan.top;i++){
cout<<tumpukan.data[i]<<" ";
}
cout<<endl;
}
cout<<endl;
break;
}
case 4:{
inisialisasi();
cout<<"Tumpukan sudah kosong!"<<endl;
cout<<endl;
break;
}
default:{
cout<<"Tidak ada dalam pilihan"<<endl;
}
}
}while(pilih >=1 && pilih<=4);
return 0;
}

void inisialisasi(){ //pengisian fungsi inisialisasi
tumpukan.top = -1;
}
int IsEmpty(){ //pengisian fungsi isempty
if(tumpukan.top == -1){
return 1;
}else{
return 0;
}
}
int IsFull(){  //pengisian fungsi isfull
if(tumpukan.top == 5-1){
return 1;
}else{
return 0;
}
}
void push(int data){ //pengisian fungsi push
tumpukan.top++;
tumpukan.data[tumpukan.top] = data;
}
void pop(){ //pengisian fungsi pop
tumpukan.top = tumpukan.top - 1;
if(tumpukan.top < 0){
tumpukan.top = -1;
}
}


·         Queue (antrian)

Adalah list linear yang dikenali berupa elemen pertama (head) dan elemen terakhir (tail), dimana aturan penyisipan dan penghapusan elemennya didefinisikan sebagai penyisipan selalu dilakukan pada elemen pertama dengan kondisi satu elemen dengen elemen lainya dapat di akses melalui informasi “next”.
Ø  Penerapan :
Ø  Penerapan :
a). Dalam kehidupan sehari-hari:

Saat menunggu antrian dokter umum dimana ada konsep ­first in – first out atau pertama masuk pertama keluar. jika antrian kita paling pertama maka kitalah yang pertama di panggil oleh dokter.

b). Dalam lingkup informatika :
Aplikasi pendaftaran yang menggunakan limit waktu dan beberapa season atau periode. Dimana jika kita mendaftar pada season yang pertama maka otomatis kita akan tercatat pada database pendaftar pertama.
Ø  Contoh program :

#include <stdio.h>
#include <iostream>
#include <conio.h>
#define MAX 8

using namespace std;

typedef struct{
               int data[MAX];
               int head;
               int tail;
   }Queue;
   Queue antrian;

void Create(){
   antrian.head=antrian.tail=-1;
   }
int IsEmpty(){
   if(antrian.tail==-1)
       return 1;
   else
       return 0;
   }
int IsFull(){
    if(antrian.tail==MAX-1)
        return 1;
    else
        return 0;
}

Enqueue(int data)
{
        if(IsEmpty()==1)
        {
            antrian.head=antrian.tail=0;
            antrian.data[antrian.tail]=data;
            printf("%d sudah dimasukan",antrian.data[antrian.tail]);
        } else
        if(IsFull()==0)
        {
            antrian.tail++;
            antrian.data[antrian.tail]=data;
            printf("%d sudah dimasukan",antrian.data[antrian.tail]);
        }
}
int Dequeue()
{
        int i;
        int e = antrian.data[antrian.head];
        for(i=antrian.head; i<=antrian.tail-1;i++)
        {
            antrian.data[i]=antrian.data[i+1];
        }
        antrian.tail--;
        return e;
}
void Clear()
{
    antrian.head=antrian.tail=-1;
    printf("CLEAR");
}
void Tampil()
{
    if(IsEmpty()==0)
    {
        for(int i=antrian.head;i<=antrian.tail;i++)
        {
            printf(" %d",antrian.data[i]);
        }
    }else printf("data kosong!\n");
}
main()
{
    int pil;
    int data;
    Create();
    do{
      cout<<endl<<endl;
        cout<<"  =============================="<<endl;
        cout<<"  =\t  PROGRAM QUEUE        ="<<endl;
        cout<<"  =============================="<<endl;
        cout<<"  =  1. ENQUEUE                = "<<endl;
        cout<<"  =  2. DEQUEUE                = "<<endl;
        cout<<"  =  3. TAMPIL                 = "<<endl;
        cout<<"  =  4. CLEAR                  = "<<endl;
        cout<<"  =  5. EXIT                   ="<<endl;
      cout<<"  =============================="<<endl;
        cout<<"  Masukan Pilihan : ";cin>>pil;
        switch(pil)
        {
                case 1:
                cout<<"Masukan Data : ";cin>>data;
                Enqueue(data);
                break;

                case 2:
                Dequeue();
                break;

                case 3:
                Tampil();
                break;

                case 4:
                Clear();
                break;

                case 5:
          
                break;
        }

        getch();

    }
   while(pil!=5);
    return 0;
}


·         List dan Multi-List (Daftar)

Adalah sekumpulan list linear yang dengan elemen yang bertype sama, yang memiliki keterurutan tertentu, yang setiap elemenya yang terdiri dari 2 bagian.


Ø  Penerapan :

a). Dalam kehidupan sehari – hari :
Daftar presensi kelas dimana terdapat list dari siswa yang berurut sesuai NIM. Selain itu juga ada Daftar menu makanan pada restoran yang menyajikan menu urut dari harga terendah hingga termahal.Daftar menu makanan
b). Dalam lingkup informatika:

Penyajian data list lagu dalam pembuatan aplikasi pemutar musik.

Ø  Contoh:

#include<iostream>
#include<cstdlib>
#include<conio.h>
using namespace std;

struct TNode{
    int data;
    TNode *next;
};TNode *head, *tail,*depan,*belakang;

void init(){
    head=NULL;
    tail=NULL;
    depan=NULL;
    belakang=NULL;
}

int isEmpty(){
    if(tail==NULL){
    return 1;
    }else{
        return 0;
    }
}
void insertDepan(int databaru)
{
    TNode *baru;
    baru =new TNode;
    baru->data=databaru;
    baru->next=NULL;
    if(isEmpty()==1)
    {
        head=tail=baru;
        tail->next=NULL;
    }else{
        baru->next=head;
        head=baru;
    }
    cout<<"Input berhasil";
}

void insertBelakang(int data){
    TNode *baru;
    baru=new TNode;
    baru->data=data;
    baru->next=NULL;
    if(isEmpty()==1){
        head=baru;
        tail=baru;
        tail->next=NULL;
    }else
    {
        tail->next=baru;
        tail=baru;
    }
    cout<<"\n Input berhasil"<<endl;
}
void hapusDepan(){
    TNode *hapus;
    int d;
    if(isEmpty()==0){
        if(depan!=belakang){
            hapus=depan;
            d=hapus->data;
            depan=depan->next;
            delete hapus;
        }else{
            d=belakang->data;
            depan=belakang=NULL;
        }
        cout<<d<<"Terhapus";
    }else cout<<"Masih kosong\n";
}
void hapusBelakang(){
    TNode *bantu,*hapus;
    int d;
    if(isEmpty()==0){
        bantu=depan;
        if(depan!=belakang){
            while(bantu->next!=belakang){
                bantu=bantu->next;
            }
            hapus=belakang;
            belakang=bantu;
            d=hapus->data;
            delete hapus;
            belakang->next=NULL;
        }else{
            d=belakang->data;
            depan=belakang=NULL;
        }
        cout<<d<<"Terhapus\n";
    }else cout<<"Masih kosong\n";
}
void tampil(){
    TNode *bantu;
    bantu=head;
    if(isEmpty()==0){
        cout<<"depan :";
         while(bantu!=NULL){
            cout<<bantu->data<<"->";
            bantu=bantu->next;
        }
    }else if(isEmpty()==0){
        cout<<"belakang :";
        while(bantu!=NULL){
            cout<<bantu->data<<"->";
            bantu=bantu->next;
        }
     cout<<"\n Data masih kosong"<<endl;
    }
}
main(){
    int pil,data,databaru;
    init();
    do{
        system("cls");
        cout<<endl;
        cout<<"link list insert"<<endl;
        cout<<"-------------------------"<<endl;
        cout<<"1. insert depan"<<endl;
        cout<<"2. insert belakang"<<endl;
        cout<<"3. delete depan"<<endl;
        cout<<"4. delete belakang"<<endl;
        cout<<"5. tampilkan data"<<endl;
        cout<<"0. keluar"<<endl;
        cout<<"-------------------------"<<endl;
        cout<<"masukkan pilihan :";cin>>pil;
        switch(pil){
            case 1: system("cls");{
                cout<<"\nInsert Depan"<<endl;
                cout<<"-------------"<<endl;
                cout<<"masukkan data : ";cin>>databaru;
                insertDepan(databaru);
                break;
            }
            case 2: system("cls");{
                cout<<"\nInsert Belakang"<<endl;
                cout<<"-------------"<<endl;
                cout<<"masukkan data : ";cin>>data;
                insertBelakang(data);
                break;
            }
            case 3: system("cls");{
                cout<<"\ndata depan terhapus"<<endl;
                hapusDepan();
                break;
            }
            case 4: system("cls");{
                cout<<"\nData Belakang terhapus"<<endl;
                hapusBelakang();
                break;
            }
            case 5: system("cls");{
                cout<<"Tampilkan data"<<endl;
                cout<<"-------------"<<endl;
                tampil();
                break;
            }
            case 0 : system("cls");{
                return 0;
                break;
            }default:
            system ("cls");{
                cout<<"pilihan tidak tersedia"<<endl;
            }
        }getch();
    }while(pil!=7);
}




b.   Non-Linear

·         Binary-Tree (Pohon Biner)

Adalah himpunan terbatas yang mungkin kosong atau terdari dari sebuah simpul yang disebut sebagai akar dan dua buah himpunan lain yang disjoint yang merupakan pohon biner yang disebut sebagai sub-pohon kiri (left) dan sub-pohon kanan (right) dari pohon biner tersebut.

Pohon biner merupakan type yang  sangat penting dari struktur data yang banyak dijumpai dalam berbagai terapan. Karakteristik yang dimiliki oleh pohon biner adalah bahwa setiap simpul yang paling banyak hanya memiliki dua buah anak, dan mungkin tidak punya anak.

Ø  Contoh program:

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

/* A <span id="mvuhno2x61oe_1" class="mvuhno2x61oe">binary tree</span> node has data, pointer to left child

   and a pointer to right child */
struct node
{
   int data;
   struct node* left;
   struct node* right;
};

/* Prototypes for funtions needed in printPaths() */
void printPathsRecur(struct node* node, int path[], int pathLen);
void printArray(int ints[], int len);

/*Given a binary tree, print out all of its root-to-leaf
 paths, one per line. Uses a recursive helper to do the work.*/
void printPaths(struct node* node)
{
  int path[1000];
  printPathsRecur(node, path, 0);
}

/* Recursive helper function -- given a node, and an array containing
 the path from the root node up to but not including this node,
 print out all the root-leaf paths.*/
void printPathsRecur(struct node* node, int path[], int pathLen)
{
  if (node==NULL)
    return;

  /* append this node to the path array */
  path[pathLen] = node->data;
  pathLen++;

  /* it's a leaf, so print the path that led to here  */
  if (node->left==NULL && node->right==NULL)
  {
    printArray(path, pathLen);
  }
  else
  {
    /* otherwise try both subtrees */
    printPathsRecur(node->left, path, pathLen);
    printPathsRecur(node->right, path, pathLen);
  }
}


/* UTILITY FUNCTIONS */
/* Utility that prints out an array on a line. */
void printArray(int ints[], int len)
{
  int i;
  for (i=0; i<len; i++)
  {
    printf("%d ", ints[i]);
  }
  printf("\n");
}   

/* utility that allocates a new node with the
   given data and NULL left and right pointers. */  
struct node* newnode(int data)
{
  struct node* node = (struct node*)
                       malloc(sizeof(struct node));
  node->data = data;
  node->left = NULL;
  node->right = NULL;
  
  return(node);
}
  
/* Driver program to test above functions*/
int main()
{
  
 struct node *root = newnode(5);
  root->left        = newnode(4);
  root->right       = newnode(8);
  root->left->left  = newnode(11);
  root->right->left  = newnode(13);
  root->right->right  = newnode(4);
  root->left->left->left  = newnode(7);
  root->left->left->right = newnode(2);
  root->right->right->right = newnode(1);
  
  printPaths(root);
  
   double number1 = 0.0;
 double number2 = 0.0;
 double number3 = 0.0;
 double number4 = 0.0;
 double answer;
 cout <<"masukkan 4 angka dari path di atas"<<endl;
 cin>>number1;
 cin>>number2;
 cin>>number3;
 cin>>number4;
 
 answer = (number1 + number2 + number3 + number4) /4;
 cout<<"rata-ratanya adalah "<<answer<<endl;
 

  

  system ("pause");
  getchar();
  return 0;}




·         Graph (graf)

Merupakan struktur data yang paling umum. Jika struktur linear memungkinkan pendefinisian keterhubungan sekuensial antar entitas data, struktur data tree memungkinkan pendefinisian keterhubungan hiraktis, maka struktur graph memungkinkan pendefinisian keterhubngan tak terbatas antara entitas data.

Banyak entitas-entitas data dalam masalah-masalah nyata secara alamiah memiliki keterhubungan langsung (adjacency) secara tak terbatas.

Ø  Contoh program :

#include<iostream>
#include<cstdlib>
using namespace std;
int main(){
bool ketemu,nolsemua;
int matrix[10] [10];
int i,j,jumlah_simpul,jumlah_sisi,asal,tujuan;
//inisialisasi matrix
cout<<"jumlah simpul:";
cin>>jumlah_simpul;
cout<<"jumlah_sisi:";
cin>>jumlah_sisi;
for (i=1;i<=jumlah_simpul;i++)
for (j=1;j<=jumlah_simpul;j++)
matrix[i][j]=0;
//isi matrix sesuai input graf
for (i=1;i<=jumlah_sisi;i++){
cout<<"simpul asal:";
cin>>asal;
cout<<"simpul tujuan:";
cin>>tujuan;
matrix[asal][tujuan]=1;
matrix[tujuan][asal]=1; }
//telusuri graf
i=1;nolsemua=false;
while (i<=jumlah_simpul && !nolsemua){
j=1;ketemu=false;
while (j<=jumlah_simpul && !ketemu){
if (matrix[i][j]==1)
ketemu=true;
else j++;
}
if (!ketemu)
nolsemua=true;
else i++;
}
if(nolsemua)
cout<<"graf tidak terhubung";
else cout<<"graf terhubung";
 system("PAUSE");
    return EXIT_SUCCESS;

}


   F. KELEBIHAN DAN KEKURANGAN




STRUKTUR DATA
KELEBIHAN
KEKURANGAN
Array
·   Struktur Data paling mudah
·   Memori ekonomis, bila semua elemen terisi
·   Waktu akses sama ke setiap elemen
·   Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen lain.
·     Boros memori jika banyak elemen yang tidak digunakan
·     Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulitdiubah ukurannya di waktu eksekusi. Bila penambahan dan pengurangan
·     terjaditerus-menerus, maka representasi statis
·     Tidak efisien dalam penggunaan memori
·     Menyiakan banyak waktu komputasi
·     Pada suatu aplikasi, representasi statis tidak dimungkinkan

Record (catatan)

·      Untuk menyimpan suatu sekumpulan elemen data yang berbeda-beda tipenya (di banding array).



Struktur data Stack (Tumpukan)

· Penambahan dan penghapusan data dapat dilakukan dengan cepat, yaitu O (1)
· Selama memori masih tersedia, penambahan data bias terus dilakukan. Dengan demikian tidak ada kekhawatiran terjadinya stack overflow.

·      Setiap sel tidak hanya menyimpan value saja, melainkan juga pointer ke sel berikutnya. Hal ini menyebabkan implementasi stack memakai linked list akan memerlukan memori yang lebih banyak dari pada kalau di implementasikan dengan Array.
·      Tiap elemen pada linked list hanya bisa diakses dengan cara sekuensial, sehingga lambat, yaitu O (n).
Struktur data Antrian (Queue)

·   Data yang pertama masuk maka akan pertama dilayani.
·   Data yang terakhir masuk, bila waktu pelayanan habis kemungkinan bisa tidak dilayani.

Struktur data Senarai Berantai (linked list)

·   Kemudahan dan efektifitas kerja yang lebih baik dalam hal menambah, mengurangi, serta mencari suatu elemen/node yang terdapat dalam senarai.

·   Tidak memungkinkan pengaksesan elemen secara acak

Struktur data Pohon Biner (Binary Tree)

·   Mudah dalam penyusunan algoritma sorting
·   Searching data relatif cepat
·   Fleksibel dalam penambahan dan penghapusan data

·  Penghapusan Kompleks
Struktur data Graph

·  Tidak akan menemukan jalan buntu
·  Jika lebih dari solusi, maka BFS akan solusi minimum akan ditemukan.

·   Menyimpan memori yang besar karena menyimpan semua node yang ada dalam satu pohon.



Reference :












https://slideplayer.info/slide/3200989/

https://www.nusinau.com/dani-struktur-data