Senin, 08 Juni 2015





PRAKTIKUM STRUKTUR DATA











Nama   : I Gusti Agung Bagus Satria Putra Utama
NIM    : 140010366
Kelas    : AB141
Mata Kuliah : Praktikum Struktur Data



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







BAB I
VARIABEL

1.      Variabel
·         Variabel Merupakan suatu tempat untuk menampung data atau konstanta di memori yang mempunyai nilai atau data yang dapat berubah – ubah selama proses program.
·         Dalam Bahasa C,kita pun akan menemui dan menggunakan variabel dalam penulisan program. Dalam pemberian variable terdapat ketentuan – ketentuan sebagi berikut: Tidak boleh ad spasi (contoh : adytya rachman),dan dapat menggunakan garis bawah (_) sebagi pengubung (contoh: adytya_rachman).
·         Tidak boleh diawali oleh angka dan mengggunakan operator aritmatika.   Ada dua jenis variable yaitu:
o   Variabel Numerik ,terdiri dari : a.Bilangan bulat b.Bilangan decimal bepresisi tunggal atau floating point c.Bilangan decimal berpresisi ganda atau double precision
o   Varabel Teks,terdiri dari a.Character (karakter tungggal ) b.String (untaian rangkaian karakter)
Tipe Data Variabel C++

Bahasa pemrograman C++  menyediakan programmer dengan satu set tipe data untuk programmer menyimpan informasi dan membangun tipe data yang bukan merupakan bagian dari bahasa itu sendiri. Tipe data yang pertama kali disebut tipe built-in, dan selanjutnya disebut dengan tipe user-defined atau tipe data yang telah ditetapkan. Tipe data diklasifikasikan berdasarkan bagaimana keadaan data disimpan dalam memori, dan jenis operasi yang dapat dilakukan. Berikut adalah beberapa tipe data yang ada pada pemrograman C(C++):
a)      CHAR
Adalah sembarang huruf, angka, tanda baca tunggal.
b)      Signed
mendeklarasikan char bertanda, digunakan untuk nilai negative. Rentang nilai mulai -128 sampai 127
c)       unsigned
mendeklarasikan char tidak bertanda, untuk nilai positif. Rentang nilai mulai 0 sampai 255
                        contoh deklarasi char :
                        char letter = ‘A’ ;
                        unsigned char number = 245 ;
                        signed char value = -71 ;
d)      HORT, INT, LONG
Digunakan untuk menyatakan bilangan bulat. Seperti pada char, perubah tipe signed dan unsigned dapat ditambahkan. Rentang nilai short int mulai -32.768 sampai 32.767. Rentang nilai long / int mulai -2.147.483.648 sampai 2.147.483.647
Contoh deklarasi int :
nt nilai, total ; atau
Int nilai = 90 ;

e)       FLOAT, DOUBLE
Menyatakan bilangan pecahan/real, maupun eksponensial. Dalam keadaan default, bilang floting point dianggap bertipe double. Rentang nilai float mulai 3,4 E -38 sampai 3,4 E +38
Rentang nilai double mulai 1,7 E -308 sampai 1,7 E +308
f)       ENUMERATION / ENUM
Adalah serangkaian symbol berurutan yang menspesifikasikan konstanta bertipe integer. Dalam C++ tidak terdapat tipe Bolean, sehingga untuk merepresentasikan TRUE dengan nilai integer bukan nol ( 1, 2, dst ), sedangkan FALSE dengan nilai nol ( 0 )
Contoh deklarasi enum :
Enum BOOLEAN { False, True } ; atau
Enum BOOLEAN { Benar = 3, Salah = 0 } ;
g)      VOID
§  Menyatakan tipe kosong untuk :
§  mendeklarasikan fungsi yang tidak mengembalikan nilai apapun.
§  mendeklarasikan fungsi yang tidak menerima parameter apapun.
§  bila diawali dengan operator *, menyatakan penunjuk terhadap sembarang tipe data.
Contoh deklarasi void :
Void cctrputs (char*, int ) ; atau
Main (void) ; atau
Void* action ;
Int ivalue = 100 ;
Action = &ivalue ;
h)      PENUNJUK / POINTER
Adalah sekelompok data bertipe sama yang menduduki lokasi memori yang berurutan. Jumlah elemen array dinyatakan dengan cara mengapit jumlah yang di maksud dengan tanda ‘ [ … ] ‘ Bentuk umum : tipe namaArray [ jumlahelemen ] ; Untuk menyatakan array berdimensi lebih dari 1 (satu), tambahkan tanda ‘[ … ]’ sebanyak dimensi yang diinginkan.
Contoh deklarasi array 2 dimensi :
Int matrix [2][3] ;
i)        STRING
Deretan karakter yang diakhiri dengan sebuah karakter kosong. String ditulis dengan mengapit string dengan tanda petik dua ( “ …….” )
Contoh deklarasi string :
Char text [ ] = “ C++ “ ;
Puts (text) ;
j)        STRUCT, UNION
Digunakan untuk mendeklarasikan sekelompok data yang memiliki tipe yang berlainan. Struct : elemennya ada dilokasi memori yang berbeda, dan union : elemennya ada dilokasi memori yang sama.
Bentuk umum :
Struct tipestruktur
{Tipeanggota1 namaAnggota1 ;
Tipeanggota2 namaAnggota2 ;
………….}namaStruktur ;

v  Contoh Program Macam Tipe Data Menggunakan C++
#include<iostream.h>
#include<conio.h>
void main()
{
int x;
float y;
char z;
double w;
x = 10;
y = 9.45;
z = 'C';
w = 3.45;
cout<<"Nilai dari x adalah : "<< x << endl;
cout<<"Nilai dari y adalah : "<< y << endl;
cout<<"Nilai dari z adalah : "<< z << endl;
cout<<"Nilai dari w adalah : "<< w << endl;
getch();
}






BAB II
ARRAY

Array
Array adalah sesuatu yang berbaris atau berderet-deret sedemikian rupa sehingga alamatnya saling bersambung  atau bersebelahan/berdampingan (contiguous). Array dibagi menjadi dua yaitu Array satu dimensi dan multi dimensi.

1.      Array 1 Dimensi
Array satu dimensi adalah kumpulan elemen yang tersusun dalam suatu baris.
Contoh:

2.      Array 2 Dimensi
Array Multidimensi merupakan sebuah perluasan dari sebuah array satu dimensi. Jika pada array satu dimensi hanya terdiri dari sebuah baris dengan beberapa kolom elemen maka pada array dua dimensi terdiri dari beberapa baris dan beberapa kolom elemen yang bertype sama.
Contoh:
#include <iostream>
#include <conio.h>
 std;
{
void tetap()
 {
 //deklarasi matrix
 int inputA [3][3];
 int inputB [3][3];
 int inputC [3][3];

//input matrix A
 cout << "Masukkan input A : "<<endl;
 cout << "------------------"<<endl;
 for (int bar = 0; bar <= 2; bar++)
 {
 for (int kol = 0; kol <= 2; kol++)
 {
 cout << "A ["<<bar<<"]["<<kol<<"] = ";
 cin >> inputA[bar][kol];
 }
 }

//input matrix B
 cout << "\nMasukkan input B : "<<endl;
 cout << "------------------"<<endl;
 for (int bar = 0; bar <= 2; bar++)
 {
 for (int kol = 0; kol <= 2; kol++)
 {
 cout << "B ["<<bar<<"]["<<kol<<"] = ";
 cin >> inputB[bar][kol];

//menghitung |c|=|a|+|b|
 inputC[bar][kol] = (inputA[bar][kol] + inputB[bar][kol]);
 }
 }

//tampilan (output) matrix A,B,C
 cout << "\nHasil penjumlahan |A|+|B| = "<<endl;
 cout << "----------------------------"<<endl;

for (int bar = 0; bar <= 2; bar++)
 {
 cout << "| ";
 for (int kolA = 0; kolA <= 2; kolA++)
 {
 cout << " "<<inputA[bar][kolA];
 }
 cout << "| ";
 cout << "| ";
 for (int kolB = 0; kolB <= 2; kolB++)
 {
 cout << " "<<inputB[bar][kolB];
 }
 cout << "| ";
 cout << "| ";
 for (int kolC = 0; kolC <= 2; kolC++)
 {
 cout << " "<<inputC[bar][kolC];
 }
 cout << "| ";
 cout << " "<<endl;
 }
 }
};
 int main()
{
 penjumlahan hitung;
 hitung.tetap();

system("pause");
 return 0;
}






BAB III
STACK



Stack

Pengertian Stack atau Tumpukan adalah suatu stuktur data yang penting dalam pemrograman yang mempunyai sifat LIFO (Last In First Out), Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack.  Stack (Tumpukan) adalah list linier yang dikenali elemen puncaknya (TOP) dan Aturan penyisipan dan penghapusan elemennya tertentu. Penyisipan selalu dilakukan “di atas“  TOP dan Penghapusan selalu dilakukan pada TOP.
Stack karena aturan penyisipan dan penghapusan semacam itu, TOP adalah satu-satunya alamat tempat terjadi operasi. Elemen yang ditambahkan paling akhir akan menjadi elemen yang akan dihapus.Dikatakan bahwa elemen Stack akan tersusun secara LIFO (Last In First Out).


karena kita menumpuk Compo di posisi terakhir, maka Compo akan menjadi elemen teratas dalam tumpukan.
Sebaliknya, karena kita menumpuk Televisi pada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika kita mengambil elemen dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu Compo juga.

Ø  OPERASI-OPERASI/FUNGSI STACK
Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
Clear : digunakan untuk mengosongkan stack
IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
Ø  INISIALISASI STACK
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah KOSONG.!
Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH!

Ilustrasi stack pada saat inisialisasi


Fungsi IsFull
Untuk memeriksa apakah stack sudah penuh?
Dengan cara memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full

Ilustrasi


Contoh syntax

#include "iostream.h"
#include "stdio.h"
#include "conio.h"
#define size 5

struct stack
  {
   int a[size];
   int top;
  };

typedef struct stack STACK;

void push(STACK *p,int value) /* PUSH OPERATION */
  {
   if(p->top==size-1)
     cout<<"Stack Penuh!";
   else
     p->a[++p->top]=value;
  }

int pop(STACK *p) /* POP OPERATION */
  {
   if (p->top==-1)
   {
    cout<<"Stack Kosong!";
    return -1;
   }
   else
    return p->a[p->top--];
  }


void display (STACK *p) /*DISPLAY OPERATION */
  {
   int i;
   if(p->top==-1)
    cout<<"\nStack Kosong!\n";
   else
    cout<<"\nIsi Stack Adalah: \n";
   for (i=p->top;i>=0; --i)
    cout<<p->a[i]<<"\n";
  }


void main()
{
  STACK s ;
  int x,i;
  s.top=-1;
  char pil;
  do {
    clrscr();
    printf("1. Tambah\n");
    printf("2. Ambil Datar\n");
    printf("3. Lihat Data\n");
    printf("4. Hapus Data\n");
    printf("5. Keluar\n");
    printf("Silahkan masukkan pilihan anda (1-5)...  ");
    pil=getche();

      if(pil!='1' && pil !='2' && pil !='3' && pil!='4' && pil!='5' )
          printf("\n\nAnda salah mengetikkan inputan...\n");
          else
          {
        if(pil=='1')
        {
          cout<<"\nMasukkan Element: ";cin>>x;
              push (&s,x);
        }
          else
          {
        if(pil=='2')
        {
          x=pop(&s);
          if(x!=-1)
              cout<<"\nElement yang Dihapus: "<<x;
          getch();
        }
          else
        {
        if(pil=='3')
        {
          display(&s);
          getch();
        }
          else
        {
        if(pil=='4')
        {
          if(s.top==-1)
          printf("\nStack Kosong!\n");
          else
          printf("\nStack Dihapus!\n");
          for (i=s.top;i>=0; --i)
          printf("Element Yang Dihapus adalah %d\n",pop(&s));
          s.top=-1;
          getch();
        }}}
        }}}
          while(pil!='5');

}





BAB IV
QUEUE


QUEUE
Queue adalah sekumpulan data yang mana penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan atau front).

Queue atau antrian prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out).
Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, ex: antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll. Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi waktu(time-sharing computer system) dimana ada sejumlah pemakai yang akan menggunakan sistem tersebut secara serempak.

Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel Head dan Tail ( depan/front, belakang/rear).
Karakteristik Queue atau antrian :
1. elemen antrian
2. front (elemen terdepan antrian)
3. tail (elemen terakhir)
4. jumlah elemen pada antrian
5. status antrian Operasi pada Queue atau antrian

1. tambah(menambah item pada belakang antrian)
2. hapus (menghapus elemen depan dari antrian)
3. kosong( mendeteksi apakah pada antrian mengandung elemen atau tidak)

Operasi-operasi Queue :
 1. Create() Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail = -1

 2. 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.

 3. 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

 4. Enqueue 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 terlebih dahulu

 5. Dequeue() Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1 Penggeseran dilakukan dengan menggunakan looping.

 6. 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 elemen-elemen Antrian tidak lagi terbaca

 7. Tampil() Untuk menampilkan nilai-nilai elemen Antrian Menggunakan looping dari head s/d tail





BAB V
SORTING


SORTING
      Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif. Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan secara ascending demi kenyamanan dalam penelusuran data. Beberapa macam algoritma sorting telah dibuat karena proses tersebut sangat mendasar dan sering digunakan. Oleh karena itu, pemahaman atas algoritma – algoritma yang ada sangatlah berguna.

1.Selection Sort (Ascending): Pengurutan dilakukan dengan memilih elemen terbesar dan menempatkan pada posisinya, kemudian mencari element terbesar berikutnya dan menempatkan pada tempatnya, dan seterusnya.

Proses pengurutan dengan menggunakan metode selection sort secara terurut naik adalah :
1. Mencari data terkecil dari data pertama sampai data terakhir, kemunian di tukar posisinya dengan data pertama.
2. mencari data terkecil dari data kedua sampai data terakhir, kemudian di tukar dengan posisinya dengan data kedua.
3. mencari data terkecil dari data ketiga sampai data terakhir, kemudian di tukar posisinya dengan data ketiga
4. dan seterusnya sampai semua data turut naik. apabila terdapat n buah data yang akan di urutkan, maka membutukan (n - 1) langkah pengurutan, dimana data terakhir yaitu data ke-n tidak perlu di urutkan karena hanya tinggal satu satunya.


3.      Bubble Sort Konsep Buble Sort Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh gelembung sabun yang berada dipermukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas dipakai pada pengurutan gelembung. Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan dengan cara melakukan penukaran data dengan tepat disebelahnya secara terus menerus sampai bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci akan dengan lambat menggelembung ke posisinya yang tepat





BAB VI
SEARCHING

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:
·         Metode Pencarian Beruntun
Konsep yang digunakan dalam metode ini adalah membandingkan data-data yang ada dalam kumpulan tersebut, mulai dari elemen pertama sampai elemen ditemukan, atau sampai elemen terakhir.
·         Metode Pencarian Bagi Dua (Binary Search)
Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau menurun). Metode ini lebih cepat dibandingkan metode pencarian beruntun. Data yang sudah terurut menjadi syarat mutlak untuk menggunakan metode ini.
Konsep dasar metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data yang berada pada elemen paling tengah bernilai sama, lebih dari atau kurang dari nilai data yang akan dicari. Jika bernilai sama, maka langsung data yang dicari ditemukan. Jika data di elemen terurut naik, maka jika data yang berada di tengah kurang dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kanan, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan sebaliknya untuk nilai data yang berada di tengah lebih dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kiri, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan demikian sebaliknya untuk data yang terurut menurun. Dalam hal ini tentukan indeks paling awal dan indeks paling akhir, untuk membagi 2 elemen tersebut.  Indeks awal = i, dimana nilai i, pada awalnya bernilai 0; Indeks akhir = j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elemen.
Algoritma pencarian berurutan dapat dituliskan sebagai berikut :
1 i 0
2 ditemukan
false
3 Selama (tidak ditemukan) dan (i <= N) kerjakan baris 4
4 Jika (Data[i] = x) maka ditemukan
true, jika tidak i i + 1
5 Jika (ditemukan) maka i adalah indeks dari data yang dicari, jika tidak data tidak ditemukan




Daftar Pustaka
Nugroho, Adi. 2008. Algoritma dan Struktur Data dalam Bahasa Java.Jakarta: Andy Publisher