Senin, 08 Juni 2015

Rangkuman materi praktikum Struktur data . andhika

RANGKUMAN MATERI
PRAKTIKUM STRUKTUR DATA



NAMA            : PUTU ARY ANDHIKA PANGESTU
NIM                 : 140010224
KELAS           : AB141
dosen : IB Ketut Surya Arnawa, S.Kom

SEKOLAH TINGGI
MANAJEMEN INFORMATIKA DAN TEKNIK KOMPUTER
(STMIK) STIKOM BALI
TAHUN 2015


Variable
Sebuah identifier yang mempunyai nilai dinamis. Arti kata dinamis disini bermaksud bahwa nilai variable tersebut dapat kita ubah sesuai kebutuhan dalam program.
Tipe_datanama_variabel;
Apabila kita akan mendeklarasikan beberapa variable yang bertipe sama, maka kita dapat menyingkat penulisannya denga menggunakan bentuk umum dibawah ini :
Tipe_datanama_variabel1,nama_variabel2,nama_variabel3;
Contoh : int A, B, C;

Ketentuan pemberian nama untuk variabel :

1. Tidak boleh sama dengan nama keyword reserved, function, dan harus unik.
2. Maksimum 32 karakter. Bila lebih, maka karakter selebihnya tidak akan diperhatikan oleh komputer.
3. Case sensitive : membedakan huruf besar dan kecil
4. Karakter pertama harus huruf atau underscore (_)
5. Tidak boleh mengandung spasi / blank , tanda – , dan tanda #

INISIALISASI VARIABEL
Dalam konteks ini, inisialisasi dapat didefinisikan sebagai proses pengisian nilai awal (nilai default) ke dalam suatu variabel. Dalam C++, pengisian nilai dilakukan dengan menggunakan operator sama dengan (=)
Bentuk umum yang digunakan untuk melakukan inisialisasi variabel adalah sebagai berikut:
tipe_data nama_variabel = nilai_awal;
atau
tipe_data nama_variabel = nilai_awal1, nilai_variabel2 = nilai_awal2,…..;
contoh:
int A=9;
Pada contoh diatas, kita melakukan inisialisasi terhadap variabel A dengan nilai 9. Apabila kita ingin melakukan inisialisasi terhadap lebih dari satu variabel, maka sintaknya dapat diubah menjadi seperti berikut:
int A=10, B=15, C=25;
Dengan cara seperti ini, variabel A akan diisi dengan nilai awal 10, B dengan nilai 15, dan C dengan nilai 25.
Inisialisasi nilai tidak harus dilakukan untuk semua variabel yang ada, seperti yg ditunjukkan oleh kode berikut:
int A, B=15, C;
Kali ini hanya variabel B yang diisi dengan nilai awal

Array
array adalah variabel yang dapat menyimpan sejumlah data sejenis (bertipe data sama).
array adalah variabel yang dapat menyimpan sejumlah data sejenis (bertipe data sama).
Jenis array :
a.      Array berdimensi satu
b.      Array berdimensi dua

1.      Array Satu Dimensi
Deklarasi Array tipe_data   nama_array[ukuran];

Keterangan :
tipe_data                : menyatakan jenis tipe data elemen array
                                (int, char, float, dll)
nama_array            : menyatakan nama variabel yang dipakai.
ukuran                   : menunjukkan jumlah maksimal elemen array.

Nilai ke-1
Nilai ke-2
…….
Nilai ke-N
Nilai ke-2
Alamat ke-2
……
Alamat ke-N
0
1
….
N

Keterangan

Nilai                : nilai elemen array
Alamat             : alamat elemen array
0,1                   : indeks elemen array

Untuk mendeklarasikan sebuah array dalam C++, kita harus menggunakan tanda[]. Adapun bentuk umum dari pendeklarasikannya adalah sebagai berikut :
Tipe_datanama_array[jumlah_elemen];
Sebagai contoh kita ingin mendeklarasikan sebuah array (dengan nama DIKA) yang memiliki 2 elemen dengan tipe data int, maka bentuk deklarasiknya adalah sebagai berikut :
Int DIKA[25];



Mengisikan Nilai ke dalam Elemen Array
kita dapat mengisikan nilai ke dalam elemen-elemen array secara langsung untuk setiap elemen, misalnya sebagai berikut :
a[0] = 10;
a[1] = 11;
a[2] = 12;
namun cara diatas tidak direkomendasi karena tidak efisien. Pada umunmnya cara yang biasa digunakan ialan menggunakan looping. Sebagai contoh apabila kita ingin melakukan pengisian 25 elemen array, maka kita dapat melakukannya seperti dibawah ini:
for (int c=0; c<25; c++)
{
            Cout<<”A[“<<c<<”] = “;
            Cin>>A[c];
}
Berikut merupakan contoh program yang didalamnnya terdapat proses pengisian array dengan menggunakan proses pengulangan.
#include <iostream.h>
#include<conio.h>
Void main()
Int main ()
//mendeklarasikan array A dengan 5 buah elemen betipe int
{
            Int A[5];
            //memasukkan nilai ke dalam elemen array
            For (int c=0; c<5; c++)
            {
                        Cout<<”A[“<<c<<”] = ;
                        Cin>>A[c];
            }
Getch ();
}

2. Array dua Dimensi
            Adalah array yang mempunyai dua buah subskrip, yaiut baris dan kolom. Bentuk umum pendeklarasian sebuah array dua dimensi ialah sebagai berikut:      
 - Sering kali digambarkan/dianalogikan sebagai sebuah matriks.
- jika array berdimensi satu hanya terdiri dari 1 baris dan banyak kolom, array berdimensi  dua terdiri dari banyak baris dan banyak kolom yang bertipe sama
     
      Deklarasi Array
     
      tipe_data nama_array[jml_baris][jml_kolom];
      Keterangan :
      tipe_data                : menyatakan jenis tipe data elemen array
                                      (int, char, float, dll)
      nama_array             : menyatakan nama variabel yang dipakai.
      jml_baris                : menunjukkan jumlah maksimal baris.
      jml_kolom              : menunjukkan jumlah maksimal kolom.

atau
Tipe_datanama_array[jumlah_elemen_baris][jumlah_elemen_kolom];
Sebagai contoh apabila kita akan melakukan penjumlahan 2 buah matrik ordo 3x2, maka contoh kita dapat menuliskan kode program seperti berikut :

#include <iostream.h>
#include<conio.h>
Void main ()
{
            //mendefinisikan tipee data yang berupa array dua dimensi
            Typedef in MATRIX32 [3] [2] ;

//mendeklarasikan variable untuk indeks pengulangan
Int j, k ;
//mengisikan nilai kedalam elemen-elemen array A
For (j=0; j<3; j++)
            {
                        For (k=0; k<2 k++)
                        {
                                    Cout<<”A[“<<j<<”] = “ ;
                                    Cin>>A[j] [k] ;
                        }
            }
            Cout<<endl;
//mengisikan nilai kedalam elemen-elemen array B
For (j=0; j<3; j++)
{
            For (k=0; k<2; k++)
            {
                        Cout<<”B[“<<j<<”] [“<<k<<”] = “ ;
                        Cin>>B [j] [k] ;
            }
}
Cout<<endl;
//melakukan penjumlahan A dan B dan menyimpannya ke dalam array C
For (j=0; j<3; j++)
{
            (k=0;k<2; k++)
            {
                        C [j] [k] = A [j] [k] + B [j] [k] ;
            }
}
//menampilkan hasil penjumlahan
For (j=0; j<3; j++)
            {
                        (k=0; k<2; k++)
                        {
                                    Cout<<”C[“<<j<<”] [“<<k<<”] = “
                                    <<C [j] [k] <<endl;
                        }
            }
            Getch ();
}
Contoh yang diberikan dari program diatas adalah sebagai berikut :

A [0] [0] = 1
A [0] [1] = 2
A [1] [0] = 3
A [1] [1] = 4
A [2] [0] = 5
A [2] [1] = 6

B [0] [0] = 1
B [0] [1] = 2
B [1] [0] = 3
B [1] [1] = 4
B [2] [0] = 5
B [2] [1] = 6

C [0] [0] = 2
C [0] [1] = 4
C [1] [0] = 6
C [1] [1] = 8
C [2] [0] = 10
C [2] [1] = 12

STACK
      Stack berarti tumpukan, konsep stack digunakan dalam struktur data. dalam stack berlaku konsep LIFO ( Last In First Out ).

·        Dalam struktur data Stack menggunakan istilah :
1. PUSH     : simpan, masuk, insert, tulis
2. POP        : ambil, keluar, delete, baca

·        Stack ada 2 jenis yaitu :
1. Single Stack
2. Double Stack


1.      Single Stack

Prinsip dan Konsep Proses Single Stack

Proses pada Single Stack :
- AWAL (Inisialisasi)
- PUSH (Insert, Masuk, Simpan, Tulis)
- POP (Delete, Keluar, Ambil, Baca/Hapus)
Kondisi Single Stack

Kondisi Stack
Posisi TOP
KOSONG
Top = -1
PENUH
Top = n-1
BISA DIISI
Top < n-1
ADA ISINYA
Top > -1

A. Algoritma PUSH single stack

if (Top < n-1)                    
                  { Top = Top + 1;
                     S[Top] = x;
                  }
      else
                  cout<<“Stack Penuh”;


B. Algoritma POP Single Stack

if (Top > -1)                      
                  { x = S[Top];
                    Top = Top - 1;
                  }
      else
                  cout<<“Stack Kosong”;

2. Double Stack

 Proses Double Stack
  
·         AWAL (Inisialisasi)
·         PUSH1 (Push untuk Stack1)
·         POP1 (Pop untuk Stack1)
·         PUSH2 (Push untuk Stack2)
·         POP2 (Pop untuk Stack2)
                    

A.   Algoritma PUSH double stack

Periksa apakah Stack1 BISA DIISI
           
            if (Top2 – Top1 > 1)                
                        {           Top1 = Top1 + 1;
                                    S[Top1] = x;
                        }
            else
                        cout<<“Stack Penuh”;


B.   Algoritma POP Single Stack

Periksa apakah Stack1 ADA ISINYA
           
            if (Top1 > -1)              
                        {           x = S[Top1];
                                    Top1 = Top1 - 1;
                        }
            else
                        cout<<“Stack Kosong”;


Contoh Studi Kasus :
buatlah program stack dalam borland c++ yang memerintahkan user untuk menginputkan 10 data secara acak, dan menampilkan hasil inputan dari user berupa stack

Berikut Koding dari studi kasus diatas :


#include <iostream.h>
#include <conio.h>


void main()
{
   int S[n];
   int x,top;

   top=-1;

   while (top<=n-1)
   {
     cout<<"Inputkan isi stack : ";
     cin>>x;
     top=top+1;
     S[top]=x;
   }

   cout<<"Isi stack : "<<endl;
   while (top>=0)
   {
     x=S[top];
     cout<<x<<" ";
     top=top-1;
   }

getch();
}


QUEUE
Queue / Antrian adalah suatu kumpulan data yang mana penambahan elemen hanya bisa dilakukan pada satu ujung (disebut dengan sisi belakang atau tail/rear) dan penghapusan atau pengambilan elemen dilakukan lewat ujung lain (disebut dengan sisi depan atau head/front). Antrian menggunakan prinsip Pertama Masuk Pertama Keluar – First In First Out (FIFO). Dengan kata lain urutan masuk sama dengan urutan keluar. Antrian banyak dijumpai dalam kehidupan sehari-hari. Mobil-mobil yang mengantri digerbang tol untuk membeli karcis tol; orang-orang yang mengantri di loket untuk membeli karcis film juga membentuk antrian. Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya. DEQUEUE adalah mengeluarkan satu elemen dari suatu antrian.

Berikut merupakan ilustrasi queue:
QUEUE DENGAN LINIEAR ARRAY
- Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di
ujung Satunya
- Sehingga membutuhkan variabel Head dan Tail

Create()
• Untuk menciptakan dan menginisialisasi Queue
• Dengan cara membuat Head dan Tail = -1

IsEmpty()
• Untuk memeriksa apakah Antrian sudah penuh atau belum
• Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
• Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala
antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah
• Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian
kebelakang, yaitu menggunakan nilai Tail
IsFull()
• Untuk mengecek apakah Antrian sudah penuh atau belum
• Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1
adalah batas elemen array pada C) berarti sudah penuh
Enqueue(data)
• Untuk menambahkan elemen ke dalam Antrian, penambahan elemen
selalu ditambahkan di elemen paling belakang
• Penambahan elemen selalu menggerakan variabel Tail dengan cara
increment counter Tail
Clear()
• Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan
Head = -1                      
• Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus
arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1
sehingga elemenelemen Antrian tidak lagi terbaca
#include<stdio.h>
#include<conio.h>
#include<iostream.h>

int f, r;

typedef struct
{
char nim[15];
   char nama [50];
   float ipk;
}mahasiswa;

void awal()
{
f=0;
   r=-1;
}

void main()
{
     mahasiswa data[n];
     int pilih;
     awal();
     atas:
    cout<<"========INPUT DATA DENGAN BENAR========="<<endl;
    cout<<endl<<"1. INSERT DATA"<<endl;
    cout<<"2. DELETE DATA"<<endl;
    cout<<"3. EXIT"<<endl;
    cout<<"MASUKKAN PILIHAN ANDA : ";
    cin>>pilih;

   switch(pilih)
   {
     case 1 :
           if(r<n-1)
         {
           r=r+1;
     cout<<"MASUKKAN NIM MAHASISWA : ";
                        cin>>data[r].nim;
                        cout<<"MASUKKAN NAMA MAHASISWA : ";
                        cin>>data[r].nama;
           cout<<"MASUKKAN IPK MAHASISWA : ";
                        cin>>data[r].ipk;
                        clrscr();
            }
         else
         {
           cout<<"ANTRIAN PENUH";
         }
         goto atas;
           break;
           case 2 :
           if(f<r+1)
           {
                cout<<endl<<data[f].nim<<endl;
                cout<<data[f].nama<<endl;
                cout<<data[f].ipk<<endl;
                f=f+1;
                if((f==r+1) && (r==n-1))
                {
                      awal();
                }
           }
           else
           {
                cout<<"ANTRIAN KOSONG";
           }
           break;
     case 3 :
            exit;
            break;
            default :
      cout<<"MASUKKAN ANGKA ANTARA 1 SAMPAI 3";
           goto atas;
           break;
     }
     getch();
}

1. SELECTION SORT

     Adalah mencari elemen yang tepat untuk diletakkan di posisi yang telah diketahui dan meletakkannya di posisi tersebut setelah data tersebut ditemukan. Selection sort membandingkan elemen yang sekarang denga  elemen yang berikutnya sampai dengan yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen yang sekarang maka dicata posisinya dan kemudian ditukar. Pengurutan data dalam struktur data sangat penting untuk data yang bertipe data numeric ataupun karakter. Pengurutan dapat dilakukan secara ascending dan descending. Pengurutan adlah proses menyusun kemnbali data yang sebelumnya telah disusun dengan suatu pola tertentu, sehingga tersusun secara teratur menutur aturan tertentu.
  
Contoh:

Data Acak                  : 4 7 1 9 2 6
Ascending                 : 1 2 4 6 7 9
Descending              : 9 7 6 4 2 1


contoh program selection sort :
#include<iostream.h>
#include<conio.h>
int data[10];
int n;

void tukar(int a, int b)
{
            int t;
            t=data[b];
            data[b]=data[a];
            data[a]=t;
}

void selection_sort()
{
                        int pos,i,j;
                        for(i=0;i<n-1;i++)
            {

   pos=i;
   for(j=i+1;j<n;j++)
      {
           if(data[j]<data[pos])pos=j;
      }
            if(pos!=i) tukar(pos,i);
   }
            cout<<"selection sort selesai !"<<endl;
            cout<<"Data : "<<endl;
            for(int i=0;i<n;i++)
   {
     cout<<data[i]<<" ";
   }
   cout<<endl;
}

void insertion_sort()
{
            int temp,i,j;
            for(i=1;i<n;i++)
   {
            temp=data[i];
            j=i-1;
            while(data[j]>temp && j>=0)
      {
           data[j+1]=data[j];
            j--;
      }
            data[j+1]=temp;
   }
            cout<<"insertion sort selesai ! "<<endl;
            cout<<"Data : "<<endl;
            for(int i=0;i<n;i++)
   {
     cout<<data[i]<<" ";
   }
   cout<<endl;
}

void input()
{
            cout<<"Masukkan jumlah data = ";
            cin>>n;
            for(int i=0;i<n;i++)
   {
     cout<<"Masukkan data ke - "<<(i+1)<<" = " ;
      cin>>data[i];
   }
}


void main()
{
            int pil;
            clrscr();
            do
   {
            clrscr();
              cout<<"1. Input Data"<<endl;
             cout<<"2. Selection Sort"<<endl;
            cout<<"3. Insertion Sort"<<endl; //tambahkan
            cout<<"4. Exit"<<endl;
      cout<<"Masukkan Pilihan anda = ";
      cin>>pil;

     switch(pil)
     {
           case 1: input();break;
           case 2: selection_sort();break;
           case 3: insertion_sort();break;  //tambahkan
     }
     getch();
   }
   while(pil!=4);
}
INSERTION SORT:
Insertion sort adalah sebuah algoritma pengurutan yang membandingkan dua elemen data pertama, mengurutkannya, kemudian mengecek elemen data berikutnya satu persatu dan membandingkannya dengan elemen data yang telah diurutkan. Karena algoritma ini bekerja
dengan membandingkan elemen-elemen data yang akan diurutkan, algoritma ini termasuk pula dalam comparison-based sort.
Ide dasar dari algoritma Insertion Sort ini adalah mencari tempat yang "tepat" untuk setiap elemen array, dengan cara sequential search. Proses ini
kemudian menyisipkan sebuah elemen array yang diproses ke tempatnya ang seharusnya. Proses dilakukan sebanyak N-1 tahapan (dalam sorting
disebut sebagai "pass"), dengan indeks dimulai dari 0.



Proses pengurutan dengan menggunakan algoritma Insertion Sort dilakukan dengan cara membandingkan data ke-i (dimana i dimulai dari data
ke-2 sampai dengan data terakhir) dengan data berikutnya. Jika ditemukan data yang lebih kecil maka data tersebut disisipkan ke depan sesuai dengan posisi yang seharusnya.
Berikut contohnya :
dan hasilnya : 
SEARCHING (SEQUENTIAL SEARCH DAN BINERY SEARCH)
Searching adalah metode pencarian informasi dalam suatu aplikasi, dengan suatu kunci( key ). Pencarian diperlukan untuk mencari informasi khusus dari table pada saat lokasi yang pasti dari informasi tersebut sebelumnya tidak diketahui. Pencarian selalu dinyatakan dengan referensi pada adanya sekelompok data yang tersimpan secara terorganisasi, kelompok data tersebut kita sebut table.
SEQUENTIAL SEARCH:
Adalah suatu teknik pencarian data dalam array (1 dimensi) yang akan menelusuri semua elemen-elemen array dari awal sampai akhir, dimana data-data tidak perlu diurutkan terlebih dahulu.
Pencarian berurutan menggunakan prinsip sebagai berikut :
Data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan

Contoh studi kasus :
buatlah program dalam borland c++ menggunakan teknik binary search yang memerintahkan user untuk mencari salah satu data yang sudah disediakan oleh program. Dan apabila perintah user yang diinputkan sesuai yang ada dalam program, maka tampilkan " Data Ditemukan ". Dan apabila data yang diinputkan user tidak tersedia dalam program, maka tampilkan " Data tidak Ditemukan "

inilah kodingnya :
#include<iostream.h>
#include<conio.h>
#define n 9

void main()
{

int A[n]={7,11,23,41,50,66,70,84,95};
int x,lo,hi,mid,flag;

cout<<"Inputkan data yang dicari : ";
cin>>x;
lo=0;hi=n-1;flag=0;

while ((lo<hi)&&(flag==0))
{
   mid=(lo+hi)/2;
   if (x==A[mid])
   {     flag=1;


   }
   else if(x<A[mid])
   {     hi=mid-1;
   }
   else
   {     lo=mid+1;
   }
}

if (flag==0)
{
   cout<<"Data tidak ditemukan" ;
}
else
  cout<<"Data ditemukan di indeks ke-"<<mid;

getch ();

}






















Tidak ada komentar:

Posting Komentar