SeLaMaT DaTaNg Di BlOg Aku, SeMoGa IsI BlOg InI BeRmAnFaAt. Struktur Data Modul 1-4 - PuByKaRmAtoLi.Net

Kamis, 23 Desember 2010

Struktur Data Modul 1-4

Modul 1

Tipe Data


A . PEMBAHASAN

Dalam bahasa pemrograman C++ dikenal adanya beberapa tipe data, yaitu :

  1. Tipe dasar

Ø Char berupa byte tunggal yang dapat menampung satu karakter serta dapat dikualifikasi menjadi signed atau unsigned (bertanda atau tidak bertanda).

Ø Int mempunyai ukuran sesuai dengan mesin yang digunakan dapat dikualifikasi sebagai signed atau unsigned dan juga berupa short atau long.

Ø Float dan double masing-masing merepresentasikan bilangan ambang dengan presisi tunggal dan presisi ganda.

Ø Void digunakan untuk fungsi yang tidak mengembalikan nilai atau fungsi tanpa argumen.

  1. Konstanta

Ø Integer berupa angka bilangan bulat

Ø Floating-point berupa angka pecahan bilangan real

Ø Character berupa karakter huruf A sampai Z

Ø String berupa karakter huruf dan angka

  1. Tipe berdeklarasi

type daftar_pengenal

type adalah salah satu dari tipe data yang akan dijelaskan

daftar_pengenal merupakan satu atau lebih pengenal (identifier/variabel) yang dipisahkan oleh koma.

  1. Array

type nama_data[ekspresi_konstanta] ....

type adalah tipe dari elemen array, nama_data adalah array yang akan dideklarasikan

ekspresi_konstanta adalah ukuran dari array

  1. Struct

struct tag { .... }

Digunakan untuk memberikan suatu pengenal untuk struktur yang dapat digunakan dalam urutan deklarasi yang dibatasi oleh tanda kurung ({ }).

  1. Union

Digunakan untuk menyimpan beberapa tipe dengan menggunakan suatu variabel tunggal.

B . TUGAS

Buatlah program dengan bahasa C++ untuk mencari luas lingkaran, segitiga sama sisi dan segitiga sama kaki ?

Jawaban :

#include

#include

#include

#include

enum bentuk_tag {LINGKARAN, SEGI_3SISI, SEGI_3KAKI};

struct geometri_tag

{ float luas; float keliling; enum bentuk_tag bentuk; union

{ float radius; struct

{ float alas; float tinggi; float sisi;

} segi_tiga;

} u_bentuk;

};

int main()

{ struct geometri_tag Geometri;

bentuk_tag Bentuk;

int tb;

cout << " Program Mencari Luas \n";

cout << " 0 untuk Luas Lingkaran \n";

cout << " 1 untuk Luas Segitiga Sama Sisi \n";

cout << " 2 untuk Luas Segitiga Sama Kaki \n";

cout << " \n";

cout<<"Pilih Geometri(0-LINGKARAN,1-SEGI_3SISI,2-SEGI_3KAKI):";

cin >> tb;

Bentuk = static_cast (tb);

Geometri.bentuk = Bentuk;

switch (Bentuk)

{ case LINGKARAN: cout << "Masukkan Jari-jari Lingkaran : ";

cin >> Geometri.u_bentuk.radius;

Geometri.luas = 3.14*Geometri.u_bentuk.radius

* Geometri.u_bentuk.radius;

cout << "Luas Lingkaran tersebut adalah : " << Geometri.luas << endl;

break;

case SEGI_3SISI: cout << "Masukkan Panjang Sisi Segitiga : ";

cin >> Geometri.u_bentuk.segi_tiga.alas;

Geometri.u_bentuk.segi_tiga.tinggi=(Geometri.u_bentuk.segi_tiga.alas)*0.866025403;

Geometri.luas=(Geometri.u_bentuk.segi_tiga.tinggi

* Geometri.u_bentuk.segi_tiga.alas)/2;

cout << "Luas Segitiga tersebut adalah : "<< Geometri.luas<

break;

case SEGI_3KAKI: cout << "Masukkan Panjang Sisi yang Sama : ";

cin >> Geometri.u_bentuk.segi_tiga.sisi;

cout << "Masukkan Panjang Alas : ";

cin >> Geometri.u_bentuk.segi_tiga.alas;

Geometri.u_bentuk.segi_tiga.tinggi=sqrt((Geometri.u_bentuk.segi_tiga.sisi)*(Geometri.u_bentuk.segi_tiga.sisi)-((Geometri.u_bentuk.segi_tiga.alas/2)*(Geometri.u_bentuk.segi_tiga.alas/2)));

Geometri.luas=(Geometri.u_bentuk.segi_tiga.tinggi

* Geometri.u_bentuk.segi_tiga.alas)/2;

cout << "Luas Segitiga tersebut adalah : "<< Geometri.luas<

break;

}

return getch();

}

C . KESIMPULAN

Pada waktu sebuah variabel dideklarasikan maka tipenya sekaligus ditentukan. Tipe dari variabel menyatakan jenis nilai yang dapat disimpan dalam lokasi memori untuk variabel tersebut dan menyatakan janis operasi apa saja yang dapat dilakukan terhadap variabel yang bersangkutan. Oleh karena itu penentuan tipe data sangat penting dalam membuat program.


Modul 2

Searching Dan Sorting

A . PEMBAHASAN

Searching atau pencarian adalah suatu prosedur mencari data dalam sekumpulan database, ada dua jenis bentuk pencarian yaitu :

  1. Linier Search (Pencarian Linier)

Prinsip pada pencarian linier adalah setiap data pada array akan dibandingkan dengan kunci sampai pada data yang terahkir, bila sampai akhir data pencarian tidak juga menemukan data berarti kunci tidak ada pada array.

int pencarianLinier(int array[], int kunci, int ukuran)

{

int i;

for (i=0; i<=ukuran-1; i++)

if (array[i]==kunci)

return i;

return -1;

}

  1. Binary Search (Pencarian Biner)

Pada algoritma pencarian biner data sudah dalam keadaan terurut, pada setiap kali pencarian data selalu dibagi menjadi dua bagian sampai pada titik tertentu. Bila sama dengan titik tengah pencarian tidak dilakukan lagi, bila sampai data terakhir data tidak juga sama maka data tidak ditemukan pada array.

void cetakBaris(int b[], int low, int mid, int high)

{

int i;

for (i=0; i<=20-1;i++)

if (ihigh) cout<<" ";

else

if (i==mid) cout<<" *"<

else cout<<" "<

cout<

}

int pencarianBiner(int b[], int kunciPencarian, int low, int high)

{

int i, middle;

while (low<=high)

{

middle = (low+high)/2;

cetakBaris(b, low, middle, high);

if (kunciPencarian==b[middle]) return middle;

else if (kunciPencarian

else low = middle+1;

}

return -1;

}

Sorting atau pengurutan adalah suatu prosedur mengurutkan data-data yang tersimpan dalam suatu database, ada tiga jenis bentuk pengurutan yaitu :

  1. Bubble Sort (Metode Gelembung)

Metode ini mempunyai perilaku seperti gelambung dimana bila akan diurutkan naik nilai yang besar akan naik (indeks besar) sementara nilai yang kecil akan turun (indeks kecil). Setiap data akan dibandingkan dengan data yang ada disebelahnya sampai dengan data terakhir.

void buble_sort(int x[], int n)

{

int i,j;

for (i=0;i

for (j=i+1;j

if (x[i] > x[j]) tukar(&x[i],&x[j]);

}

  1. Insertion Sort (Metode Penyisipan)

Metode penyisipan membandingkan data ke-i (dimulai dari data ke-) dengan data berikutnya. Jika ditemukan data yang lebih kecil, maka data tersebut disisipkan ke depan sesuai dengan posisi yang seharusnya.

void Selection_sort(int A[], int n)

{

int i,t,min;

for (i=0;i

{

min=i;

for (t=i+1;t

if (A[t]

min=t;

if (min!=i)

tukar(&A[i],&A[min]);

}

}

  1. Selection Sort (Metode Seleksi)

Metode seleksi membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai elemen yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang, maka dicatat posisinya dan kemudian ditukar

void insertion_sort(int A[], int n)

{

int k,j,temp;

for (k=0;k

{

temp=A[k];

j=k-1;

while ((temp<=A[j]) && (j>0))

12

{

A[j+1] = A[j];

j=j-1;

}

if (temp>=A[j]) A[j+1]=temp;

else

{

A[j+1]=A[j];

A[j]=temp;

}

}

}

B . TUGAS

Buatlah algoritma untuk prosedur di atas ?

Jawaban :

Berikut ini algoritma dari Bubble Sort

  1. untuk i à 1 sampai (i + n)
  2. untuk j à (j +1) sampai n
  3. jika x[i] lebih besar dari x[j] maka kerjakan 7
  4. jika x[i] lebih kecil dari x[j] maka kerjakan 5
  5. jika x[i + 1] lebih besar dari x[j + 1] maka kerjakan 7
  6. jika x[i +1] lebih kecil dari x[j + 1] maka kerjakan 5
  7. tukar (x[i], x[j])

8. selesai

C . KESIMPULAN

Prosedur pencarian (Sorting) digunakan untuk melakukan pencarian data pada sekumpulan data, ada dua jenis pencarian yaitu linier dan biner. Prosedur pengurutan (Sorting) digunakan untuk melakukan pengurutan terhadap sejumlah data yang tersimpan, ada empat jenis pengurutan data yaitu bubble, insertion, selection dan merge.


Modul 3

Pointer Dan Referensi

A . PEMBAHASAN

Pointer merupakan salah satu jenis data terstruktur. Dengan menggunakan pointer suatu variabel dapat diciptakan atau dihapus selama pengeksekusian program, variabel demikian dinamakan sebagai variabel dinamis. Dalam variabel dinamis nilai data yang ditunjuk oleh suatu ponter biasa disebut dengan simpul. Simpul biasanya berupa suatu record atau tipe data lain yang menyangkut file.

Tipe pointer didefinisikan dengan sintaks

int*P ;

Dan diakses dengan sintaks

*P = 5 ;

Pointer biasa dipakai untuk menunjuk variabel dinamis tetapi dapat juga dipakai untuk menunjuk variabel statis. Variabel dinamis tidak diberi nama oleh karena itu tidak perlu dideklarasikan. Satu-satunya cara untuk mengaksesnya adalah dengan menggunakan pointer. Variabel dinamis dibuat dengan pernyataan :

malloc dan sizeof

P = malloc(sizeof(*P)) ;

Selain itu ada juga operator new dan delete.

Ø new. Operator new menciptakan objek saat run-time, dan tetap aktif selama program aktif

xxxx* p = new xxxx();

xxxx adalah kelas objek

new xxxx() memanggil class contructor untuk menciptakan objek baru dan mengembalikan pointer padanya. Hasilnya adalah objek anonim, dan diakses dengan menggunakan *p atau *q dimana q pointer lainnya yang sama dengan p.

Ø delete. digunakan untuk menghentikan keberadaan objek sebelum akhir program.

B . TUGAS

Praktikkan program berikut ini dan simpulkan hasil keluarannya :

//* alokasi makro *//

#include

#include

#include

//* program utama *//

void main()

{

//* alokasi kamus (deklarasi) *//

int *A,*B;

int p,q;

A = new(int);

B = new(int);

p='A';

q='A';

A = &p;

B = &q;

//* program utama *//

cout<<"Nilai p : "<

cout<<"Nilai yang ditunjuk A : "<<*A<

cout<<"Alamat yang ditunjuk A : "<

cout<<"Nilai q : "<

cout<<"Nilai yang ditunjuk B : "<<*B<

cout<<"Alamat yang ditunjuk B : "<

q = 'N';

*B = *A;

cout<<"Nilai p : "<

cout<<"Nilai yang ditunjuk A : "<<*A<

cout<<"Alamat yang ditunjuk A : "<

cout<<"Nilai q : "<

cout<<"Nilai yang ditunjuk B : "<<*B<

cout<<"Alamat yang ditunjuk B : "<

delete A;

delete B;

getch();

}

Hasil Keluarannya :

Nilai p : 65

Nilai yang ditunjuk A : 65

Alamat yang ditunjuk A : 0x0012ff88

Nilai q : 65

Nilai yang ditunjuk B : 65

Alamat yang ditunjuk B : 0x0012ff84

Nilai p : 65

Nilai yang ditunjuk A : 65

Alamat yang ditunjuk A : 0x0012ff88

Nilai q : 65

Nilai yang ditunjuk B : 65

Alamat yang ditunjuk B : 0x0012ff84

C . KESIMPULAN

Pada struktur data dinamis terdapat variabel yang disebut pointer, yaiuty variabel yang menunjuk alamat memory pada variabel dinamis. Secara umum dapat dikatakan bahwa pointer merupakan suatu variabel yang menyimpan alamat dari suatu objek. Oleh karena itu sebenarnya pointer bukan berisi data melainkan alamat dari suatu data.

Modul 4

Stack


A . PEMBAHASAN

Stack merupakan suatu struktur data dimana data yang terakhir masuk maka data itulah yang pertama kali akan keluar.Deklarasi ada dua macam yaitu menggunakan tipe larik dan pointer. Berikut ini beberapa contoh penggunaan stack :

Deklarasi Tipe Stack

  1. Dengan larik

const MAXSTACK=10;

typedef char Item_type;

struct stack_tag

{

int top;

Item_type entry[MAXSTACK];

} Stack_type;

  1. Dengan pointer

typedef struct stack_tag

{

char entry;

struct stack_tag *next;

} Stack_type;

Stack_type *Stack;

Membuat stack

  1. Dengan larik

void Create()

{

Stack_type.top=0;

}

  1. Dengan pointer

void Create()

{

Stack=NULL;

}

Mengecek apakah stack kosong

  1. Dengan larik

bool Empty()

{

return Stack_type.top<0;

}

  1. Dengan pointer

bool Empty()

{

if (Stack==NULL)

return true;

else

return false;

}

Mengecek apakah stack penuh

  1. Dengan larik

bool Full()

{

return Stack_type.top==MAXSTACK-1;

}

  1. Dengan pointer

< Tidak ada >

Menambah elemen dalam stack

  1. Dengan larik

void Push(Item_type item)

{

if (Full()==false)

{

Stack_type.top++;

Stack_type.entry[Stack_type.top]=item;

}

}

  1. Dengan pointer

void Push(char item)

{

Stack_type *p;

p=(Stack_type*)malloc(sizeof(Stack_type));

p->entry=item;

p->next=Stack;

Stack=p;

}

Mengambil elemen dari stack

  1. Dengan larik

void Pop(Item_type &itemPop)

{

if (Empty()==false)

{

itemPop = Stack_type.entry[Stack_type.top];

Stack_type.top--;

}

}

  1. Dengan pointer

void Pop(char &itemPop)

{

Stack_type *temp;

temp=(Stack_type*)malloc(sizeof(Stack_type));

if (!Empty())

{

itemPop = Stack->entry;

temp = Stack;

Stack=Stack->next;

free(temp);

}

}

Membaca isi stack

  1. Dengan larik

void Baca_Stack()

{

for (int i=0; i<=Stack_type.top;i++)

cout<

}

  1. Dengan pointer

void Baca_Stack()

{

Stack_type *p;

p=(Stack_type*)malloc(sizeof(Stack_type));

p=Stack;

while (p!=NULL)

{

cout<entry;

p=p->next;

}

}

B . TUGAS

Tulis dan gambarkan ilustrasi untuk membaca stack.

Jawaban :

Dari gambar diatas, bisa dilihat bahwa kotak B terletak di atas kotak A dan ada dibawah kotak C. Dari gambar diatas menunjukan bahwa dalam tumpukan hanya bisa menambah atau mengurang (mengambil) sebuah kotak melalui satu ujung, yaitu bagian atas. Dari gambar tersebut bisa kita lihat bahwa yang menjadi ujung atas adalah tumpukan F.Jadi jika ada kotak lain yang akan disisipkan, maka kotak tersebut akan diletakan di atas kotak F, dan jika ada kotak yang akan diambil, maka kotak F lah yang pertama kali diambil. Semacam itulah cara kerja dari stack. Data yang terakhir masuk berarti data tersebut yang nantinya pertama keluar (Last In First Out).

C . KESIMPULAN

Prinsip utama dari stack sebenarnya sangat sederhana dan gampang dimengerti, yaitu Last In First Out. Atau secara garis besar data yang paling akhir masuk (top position) adalah data yang paling dulu keluar, sehingga data-data lain yang ada dibawahnya harus menunggu data diatas jika ingin keluar.

Tidak ada komentar:

Posting Komentar

Berikanlah Komentar, saran dan Kritik yang membangun "