Jumat, 05 Juni 2015

Pratikum Struktur Data

Adapun materi yang akan saya bagikan diblog ini yaitu :

1.      Variable
2.      Array Dimensi 1 dan 2
3.      Stack
4.      Queue
5.      Sorting (Selection sort dan insertion sort)
6.      Searching (Sequential search dan Binarry search)

1.Variabel.
      
Variabel adalah nama yang mewakili suatu elemen data. Aturan yang wajib diikuti dalam pemberian nama variabel, antara lain:


  • Harus dimulai dengan abjad tidak boleh dengan angka atau symbol.
  • Tidak boleh ada spasi diantaranya.
  • Tidak boleh menggunakan symbol-symbol yang bisa membingungkan seperti titik koma, koma, titik dua dan lain sebagainya.
  • Sebaiknya memililki arti yang sesuai dengan elemen data.
  • Sebaiknya tidak perlu panjang.

Contoh variable yang benar Nama, Alamat, Nilai_ujian
Contoh variable yang salah 4XYZ, IPr ata, Var+xy,778.
Int nilai;

2.Array 

Array adalah suatu struktur yang terdiri dari sejumlah elemen yang memiliki tipe data
yang sama. Elemen-elemen array tersusun secara sekuensial dalam memori komputer.
Array dapat berupa satu dimensi, dua dimensi, tiga dimensi ataupun banyak dimensi
(multi dimensi).

·         Array Satu Dimensi

Array Satu dimensi tidak lain adalah kumpulan elemen-elemen identik yang tersusun dalam satu baris. Elemen-elemen tersebut memiliki tipe data yang sama, tetapi isi dari elemen tersebut boleh berbeda.

Elemen ke-
0
1
2
Nilai
25
26
34

Bentuk Umum:

            <Tipe data>Nama Array[n]={elemen0, elemen1, elemen2};
Atau    <Tipe data>Nama Array[n];
N=Jumlah Elemen



Contoh Program :

#include<iostream>
#include<conio.h>
main()
{
   int nilai[4];
   int i;
   cout<<"Masukan nilai\t:\n";
   for(i=0;i<4;i++)
   {
            cout<<"nilai ke- "<<(i+1)<<"\t: ";
      cin>>nilai[i];
   }
   cout<<"Nilai yang telah anda masukan\t:\n";
   for(i=0;i<4;i++)
   {
            cout<<"\nnilai ke- "<<(i+1)<<"\t: "<<nilai[i];
   }
   getch();
}


Hasil outputnya :








·         Array Dua Dimensi

Array dua dimensi sering digambarkan sebagai sebuah matriks, merupakan perluasan dari array satu dimensi. Jika array satu dimensi hanya terdiri dari sebuah baris dan beberapa kolom elemen, maka array dua dimensi terdiri dari beberapa baris dan beberapa kolom elemen yang bertipe sama sehingga dapat digambarkan sebagai berikut:
             

0
1
2
3
4
0
10
5
54
6
23
1
41
26
17
65
24
2
13
18
19
45
8
3
21
27
34
76
35
Bentuk umum:

<tipe data> NamaArray [m][n];

Contoh Program :

int main()
{
   int i,j;
   int data[2][3];
   cout<<"Input data\t:\n"<<endl;
   for(i=0;i<2;i++)
   {
            for(j=0;j<3;j++)
      {
         cout<<"Data ["<<i<<"]["<<j<<"]\t= ";
         cin>>data[i][j];
      }
   }
   cout<<"Cetak Data\t:\n"<<endl;
   for(i=0;i<2;i++)
   {
            for(j=0;j<3;j++)
      {
            cout<<"Data ["<<i<<"]["<<j<<"]\t= "<<data[i][j]<<endl;
      }
   }
   getch();
}


Hasil outputnya :






Cotoh lain :

Int data[3][5]={{4,5,6,9,9},{9,2,5,7,9},{8,3,7,3,9}};

Contoh program :

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

int main()
{
   int i,j;
   int data[3][5]={{4,5,6,9,9},{9,2,5,7,9},{8,3,7,3,9}};
   clrscr();
   for(i=0;i<3;i++)
   {
            for(j=0;j<5;j++)
      {
         cout<<data[i][j];
         cout<<" ";
               }
      cout<<endl;
   }
  getch();
}


Hasil outputnya :








3.Struktur  Stack

Stack (Tumpukan) adalah struktur data yang meniru bagaimana proses menyimpan dan mengambil suatu buku pada suatu tumpukan buku yang ada dilantai. Apabila diperhatikan dengan seksama maka proses menyimpan buku disebut (push) dan proses mengambil buku disebut (pop) dari suatu tumpukan selalu dilakukan pada bagian atas tumpukan (top of the stack) sehingga terjadi urutan yang disebut LIFO (Last in first Out). Artinya, buku yang terakhir disimpan adalah buku yang pertama harus diambil karena buku inilah yang berada pada urutan teratas pada tumpukan.

Stack digunakan apabila data akan diakses dengan urutan LIFO struktur data stack dapat diimplementasi dengan menggukan larik (array), dengan struktur data bentukan (record).

Contoh program :

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

//deklarasi stack dengan struct dan array
struct STACK
{
   int data[5];
   int atas;
};

//deklarasi variabel tumpuk dari struct
STACK tumpuk;

void main()
{
   clrscr();
   int pilihan, baru, i;
   //inisialisasi awal
   tumpuk.atas = -1;
   do{
            cout<<"1. Push data"<<endl;
            cout<<"2. Pop Data"<<endl;
            cout<<"3. Print Data"<<endl;
            cout<<endl;
            cout<<"Pilihan : ";
            cin>>pilihan;
            switch(pilihan)
      {
            case 1:
         {
            if(tumpuk.atas==5-1)
            {
               cout<<"Tumpukan penuh";
               getch();
            }
            else
            {
               cout<<"Data yang akan di push : ";
               cin>>baru;
               tumpuk.atas++;
               tumpuk.data[tumpuk.atas]=baru;
            }
            break;
         }
         case 2:
         {
            if(tumpuk.atas==-1)
            {
               cout<<"Tumpukan kosong";
               getch();
            }
            else
            {
               cout<<"Data yang akan di Pop = "
               <<tumpuk.data[tumpuk.atas]<<endl;
               tumpuk.atas--;
               getch();
            }
            break;
         }
         case 3:
         {
            if(tumpuk.atas == -1)
            {
               cout<<"Tumpukan kosong "<<endl;
               getch();
            }
            else
            {
               cout<<"Data = "<<endl;
               for(i=0;i<=tumpuk.atas;i++)
               {
                        cout<<tumpuk.data[i]<<" ";
               }
               getch();
            }
            break;
         }
         default:
         {
            cout<<"Tidak ada dalam pilihan"<<endl;
         }
      }
            while(pilihan>=1 && pilihan <=3);
   }
            getch();
}


Tampilan outputnya:







4.Struktur Antrian (Queue)
Struktur antrian adalah struktur data yang meniru antrian orang yang sedang menunggu pelayanan misalnya di depan seorang teller bank, atau antrian orang yang sedamg membeli karcis pertunjukan. Apabila diperhatikan dengan seksama maka penambahan orang pada suatu antrian selalu dilakukan pada urutan paling belakang (rear of queue), dan pelyanan selalu dilakukan pada urutan depan (front of queue) sehingga urutan proses antrian sering disebut FIFO (First in first out). Yang pertama masuk antrian, itulah yang pertama dilayani.

Contoh :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main() {
int queue[10], i, head=-1, tail=-1, enqueue, pil, urut=0,tmp;

    do {
        system("pause");
        system("cls");
        printf("1. Masukkan Antrian\n");
        printf("2. Keluarkan Antrian\n");
        printf("3. Lihat Antrian\n");
        printf("4. Keluar\n\n");
        printf("Silahkan masukkan pilihan anda : ");
        scanf("%d", &pil);
        printf("\n");

        if(pil==1) {if(tail==9) {printf("Antrian Penuh\n\n");}
         else if(tail==-1) {head++;tail++;
          printf("Masukkan nilai : ");
          scanf("%d", &enqueue);
          queue[tail]=enqueue;
          urut++;
          printf("\nNomor urut : %d\n", urut);
          printf("Langsung dilayani\n\n");}
         else {tail++;
          printf("Masukkan nilai : ");
          scanf("%d", &enqueue);
          queue[tail]=enqueue;
          urut++;
          printf("\nNomor urut : %d\n", urut);
          printf("Anda harus menunggu %d antrian                           lagi\n\n", tail);}}

        else if(pil==2) {if(tail==-1) {printf("Antrian                   kosong\n\n");}
        else {printf("Data dengan nilai %d sudah dilayani\n\n",                   queue[head]);
         tmp=queue[head];
         for(i=head;i<=tail;i++) {queue[i]=queue[i+1];}
         queue[tail]=tmp;
         urut++;
         printf("Data dengan nilai %d masuk antrian kembali dengan no. urut %d\n",queue[tail], urut);
         if(tail==0) {printf("Yang bersangkutan langsung                   dilayani\n\n");}
        else {printf("Yang bersangkutan harus menunggu %d antrian         lagi\n\n", tail);}}}

        else if(pil==3) {if(tail==-1) {printf("Antrian                   kosong\n\n");}
        else {for(i=head;i<=tail;i++) {printf("Antrian ke-%d :%d\n", i+1, queue[i]);}
        printf("\n");}}

        else if(pil==4) {printf("Anda telah selesai menggunakan program Queue Circular\n\n");}

        else {printf("Pilihan yang anda masukkan tidak                   valid\n\n");}
        } while(pil!=4);

    getch();
}


Tampilan awal outputnya :






Masuk antrian :





Melihat isi antrian :




Melihat isi antrian sebelum dihapus :




Menghapus antrian :






5.Shorting

Sorting merupakan suatu proses untuk menyusun kembali humpunan obyek menggunakan aturan tertentu. Sorting disebut juga sebagai suatu algoritma untuk meletakkan kumpulan elemen data kedalam urutan tertentu berdasarkan satu atau beberapa kunci dalam tiap-tiap elemen. Pada dasarnya ada dua macam urutan yang biasa digunakan dalam suatu proses sorting:

Sorting By Selection sort
merupakan pengurutan berdasarkan pemilihan.

Implementasi dari Sorting By Selection dalam pemrograman :

Selection sort :

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int Data[MAX];

// Fungsi pertukaran bilangan
void Tukar (int *a, int *b)
{
 int temp;
 temp = *a;
 *a = *b;
 *b = temp;
}
void SelectionSort()
{
  int i, j, k;
  for(i=0; i<MAX-1;i++)
   {
     k = i;
     for (j=i+1; j<MAX; j++)
     if(Data[k] > Data[j])
     k = j;
     Tukar(&Data[i], &Data[k]);
   }
}
void main()
{
  int i;
  srand(0);
// Membangkitkan bilangan acak
  printf("DATA SEBELUM TERURUT");
  for(i=0; i<MAX; i++)
  {
    Data[i] = (int) rand()/1000+1;
    printf("\nData ke %d : %d ", i, Data[i]);
  }
SelectionSort();
// Data setelah terurut
  printf("\nDATA SETELAH TERURUT");
  for(i=0; i<MAX; i++)
  {
    printf("\nData ke %d : %d ", i, Data[i]);
  }
 getch();
}


Hasil outputnya :








Sorting By Insertion sort
Merupakan pengurutan dengan melakukan penyisipan.

Implementasi dari Sorting By Insertion:

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

int data[10],data2[10];
int n;

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

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;
 }
}
int main()
{
 cout<<"\t* METODE INSERTION SORT *"<<endl<<endl;

 //Input Data
 cout<<"Masukkan Jumlah Data : ";
 cin>>n;
 for(int i=1;i<=n;i++)
 {
  cout<<"Masukkan data ke "<<i<<" : ";
  cin>>data[i];
  data2[i]=data[i];
 }

 insertion_sort();

 cout<<"\n\n";
 //tampilkan data
 cout<<"Data Setelah di Sort : ";
 for(int i=1; i<=n; i++)
 {
  cout<<" "<<data[i];
 }
 cout<<"\n\nSorting Selesai";
 getch();
 return 0;
}

Hasil outputnta :






6.Searching
Pencarian (Searching) merupakan proses yang fundamental dalam pemrograman, guna menemukan data (nilai) tertentu di dalam sekumpulan data yang bertipe sama. Fungsi pencarian itu sendiri adalah untuk memvalidasi (mencocokkan) data.
Metode Pencarian dibagi menjadi 2 yaitu :

Pencarian secara beruntun
Pencarian secara beruntun dilakukan dengan cara memeriksa elemen larik satu per satu mulai dari indeks=1 hingga indeks dimana elemen tersebut ditemukan. Bila indeks maksimum telah dilampaui maka berarti elemen tersebut tidak ditemukan.
Contoh: Andaikan larik A=[20 15 18 35 40 27], dan x=8. Bila A diperiksa mulai dari indeks=1 maka akan ditemukan pada indeks=3. Namun, bila x=45 maka pemeriksaan tidak berasil menemukan karena hingga indeks=6 elemen ini tetap tidak ditemukan.

Contoh program :

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

main()
{
   int n,i,posisi,x,ketemu;
   int a[5];
   printf("Pencarian data dengan sequential search \n\n");
   printf("Banyak data : ");
   scanf("%d",&n);

   for(i=0;i<n;i++)
   {
      printf("Masukan bilangan : ");
      scanf("%d",&a[i]);
   }
   printf("Data yang dicari : ");
   scanf("%d",&x);
   ketemu=0;
   i=0;
   while((ketemu == 0)&&(i<n))
   {
    if(a[i]==x)
    {
    ketemu=1;
        posisi=i;
    }
   else
   i=i+1;
   }
   if(ketemu==1)
    printf("%d Ditemukan pada posisi %d\n",x,posisi+1);
   else
   printf("%d Tidak ditemukan \n",x);
   getch();
}


Hasil outputnya :





Pencarian Bagi–Dua (Binary Search)
Pencarian bagi-dua adalah teknik yang diterapkan hanya pada elemen larik yang telah terurut (Sorted). Pencarian beruntun memiliki satu kekurangan, yaitu dalam kasus terburuk (Elemen yang dicari berada pada posisi terakhir) maka pencarian harus dilakukan sepanjang larik. Semakin banyak elemen semakin banyak pencarian yang harus dilakukan.

Contoh : Andaikan larik A = [7 10 13 16 18 21 76 81], dan x=10. Pada contoh ini, jumlah elemen m=8 sehingga indeks =8/2=4 dan A[4]=16. Namun, x tidak sama dengan A[4].

Implementasi binary search dalam program :

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

int data[10]={1,3,4,7,12,25,40,65,78,90};
int binary_search(int cari)
{
  int a,b,c;
  int n=10;
  a=0;
  b=n-1;
  int ketemu=0;
  while (a<=b && ketemu==0)
  {
    c=(a+b)/2;
    if (data[c]==cari)
    ketemu=1;
    else
    if(cari<data[c])
    b=c-1;
    else a=c+1;
  }
  if(ketemu==1) return 1; else return 0;
}

void main()
{
  clrscr();
  int cari, hasil;
  cout<<"masukan data yang ingin di cari= ";
  cin>>cari;
  hasil = binary_search(cari);
  if(hasil==1)
  {
    cout<<"data ada!"<<endl;
  }
  else
  if(hasil==0)
  cout<<"data tidak ada!"<<endl;
  getch();
}


Hasil outputnya :





     




REFERENSI

Desphande P.S., O.G. Kakde (2004). C dan Data Structures. Charles RiverMedia, Inc.
Massachusetts
Heriyanto, Imam, Budi Raharjo (2003). Pemrograman Borland C++ Builder. Informatika
Bandung.
Indrajit, Richardus Eko. Manajemen Sistem Informasi dan Teknologi Informasi.
Indrajit, Richardus Eko. Kajian Strategis Analisa Cost-Benefit Investasi Teknologi Informasi.
Lidya, Leoni, rinaldi Munir (2002). Algoritama dan Pemrograman dalam Bahas Pascal dan C.
Informatika Bandung.
Sanjaya, Dwi (2005). Asyiknya Belajar Struktur Data di Planet C++. Elex Media
Komputindo.
Solichin, Achmad (2003). Pemrograman Bahasa C dengan Turbo C. IlmuKomputer.Com.
Wahono, Romi Satria(2003). Cepat MahirBahasa. IlmuKomputer.Com.