Praktikum Algoritma dan Struktur Data
Rangkuman Praktikum Algoritma dan Struktur Data Modul 1-6
Disusun oleh :
Nama : Bima Putra P
NIM : 231080200008
Kelompok : 1
Assalamu'alaikum Wr.Wb.
Materi yang saya lampirkan merupakan hasil rangkuman dari
materi praktikum Algoritma dan Struktur Data satu semester ini dan menjadi
salah satu syarat untuk memenuhi tugas Praktikum Algoritma dan Struktur Data.
Saya merupakan Mahasiswa Universitas Muhammadiyah Sidoarjo Program Studi Informatika. Jika ingin lebih tahu tentang
Universitas Muhammadiyah Sidoarjo bisa langsung mengakses link umsida.ac.id
atau fst.umsida.ac.id
POKOK BAHASAN 1
STRUKTUR DATA, ARRAY, POINTER, DAN STRUKTUR
PENDAHULUAN
Pada pokok bahasan ini berisi penjelasan disertai contoh mengenai konsep struktur data, array, pointer, dan struktur yang menjadi pemahaman dasar bagi mahasiswa sebelum mempelajari struktur data, dimana konsep array, pointer, dan struktur digunakan untuk mempresentasikan sebuah struktur data, diharapkan mahasiswa dapat :
a.Mengetahui konsep dasar struktur data.
b.Memahami konsep array, pointer, dan struktur.
PENYAJIAN (TUTORIAL)
A.Konsep Dasar Struktur Data
Struktur data adalah sebuah bagian dari ilmu pemrograman dasar yang mempunyai karakteristik yang terkait dengan sifat dan cara penyimpanan sekaligus penggunaan atau pengaksesan data.
Struktur data bertujuan agar cara mempresentasikan data
dalam membuat program dapat dilakukan secara efisien dalam pengolahan di memori
dan pengolahan penyimpanan dari program ke storage juga lebih mudah dilakukan.
B.Konsep Dasar Array
Array adalah kumpulan elemen-elemen data. Kumpulan elemen
tersebut mempunyai susunan tertentu yang teratur. Jumlah elemen terbatas, dan
semua elemen mempunyai tipe data yang sama. Jenis-jenis array :
Array Satu Dimensi
Struktur array satu dimensi dapat dideklarasikan dengan
bentuk umum berupa : tipe_var nama_var[ukuran];
Dengan :
- Tipe_var : untuk menyatakan jenis elemen array (misalnya
int, char, unsigned).
- Nama_var : untuk menyatakan nama variabel yang dipakai.
- Ukuran : untuk menyatakan jumlah maksimal elemen array.
Contoh :
float nilai_ujian[5];
Array Dua Dimensi
Tipe data array dua dimensi biasa digunakan untuk menyimpan,
mengolah maupun menampilkan suatu data dalam bentuk table atau matriks. Untuk
mendeklarasikan array agar dapat menyimpan data adalah :
Tipe_var nama_var[ukuran1][ukuran2];
Dimana :
- Ukuran 1 menunjukkan jumlah/nomor baris.
- Ukuran 2 menunjukkan jumlah/nomor kolom.
Jumlah elemen yang dimiliki array dua dimensi dapat ditentukan dari hasil perkalian :
Ukuran1 x ukuran2.
Seperti halnya pada array satu dimensi, data array dua dimensi akan ditempatkan pada memori secara berurutan.
Array Multidimensi / Dimensi Banyak
Array berdimensi banyak atau multidimensi terdiri array yang tidak terbatas hanya dua dimensi saja. Bentuk umum pendeklarasian array multidimensi adalah :
tipe_var nama_var[ukuran1][ukuran2]…[ukuran n];
Contoh: int data angka[3][6][6];
Yang merupakan array tiga dimensi
Mengakses Elemen Array :
Dalam Bahasa C++, data array akan disimpan dalam memori pada alokasi yang berurutan.
Elemen pertama biasanya mempunyai. indeks bernilai 0.
Contoh : Float nilai_tes[5];
Jika pada contoh diatas, variabel nilai_tes mempunyai 5 elemen, maka elemen pertama mempunyai indeks sama dengan 0, elemen kedua mempunyai indeks 1, dan seterusnya. Bentuk umum pengaksesan suatu elemen variabel array adalah :
Nama_var[indeks];
Gambar berikut memperlihatkan urutan komponen array dalam
memori. Untuk variabel array nilai_tes :
Inisialisasi Array :
Array dapat diinisialisasikan secara langsung saat pertama kali dideklarasikan (efisien untuk array berdimensi sedikit).
C.Konsep Dasar Pointer
Pointer adalah sebuah variabel yang berisi alamat variabel yang lain. Suatu pointer dimaksudkan untuk menunjuk koperatore suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah. Deklarasi pointer
Operator pointer :
Struktur adalah koleksi dari variabel yang dinyatakan dengan
sebuah nama, dengan sifat setiap variabel dapat memiliki tipe yang berlainan.
Struktur biasa dipakai untuk mengelompokkan beberapa informasi yang berkaitan menjadi sebuah satu kesatuan. Contoh sebuah struktur adalah informasi data tanggal, yang berisi tanggal, bulan, dan tahun.
Mendeklarasikan Struktur :
Masing – masing tipe dari elemen struktur dapat berlainan. Adapun variabel_struktur1 sampai dengan variabel_struktur M menyatakan bahwa variabel struktur yang dideklarasikan bisa lebih dari satu. Jika ada lebih dari satu variabel, antara variabel struktur dipisahkan dengan tanda koma.
Mengakses Elemen Struktur :
tgl_lahir.tanggal=30;
Yang mendefinisikan tipe struktur bernama data_tanggal, yang
terdiri dari tiga buah elemen berupa tanggal, bulan, dan tahun. Bentuk umum
dalam mendefinisikan dan mendeklarasikan struktur adalah :
{
POKOK BAHASAN 2
LINKED LIST (SENARAI)
PENDAHULUAN
Pada pokok bahasan ini akan dibahas mengenai struktur data
senarai (list) yang pembahasannya meliputi definisi dan representasi list,
jenis-jenis list serta operasi - operasi dasar pada list. Sehingga setelah
mempelajari bab ini diharapkan mahasiswa mampu :
PENYAJIAN (TUTORIAL)
Linked list adalah sejumlah objek atau elemen yang
dihubungkan satu dengan lainnya sehingga membentuk suatu list. Sedangkan objek
atau elemen itu sendiri adalah merupakan gabungan beberapa data (variabel) yang
dijadikan satu kelompok atau structure atau record yang dibentuk dengan
perintah struct. Untuk menggabungkan objek satu dengan lainnya, diperlukan
paling tidak sebuah variabel yang bertipe pointer. Syarat linked list adalah
harus dapat diketahui alamat simpul pertama atau biasa dipakai variabel First/Start/Header.
Struktur dasar sebuah list seperti gambar berikut :
Istilah – istilah dalam linked list :
Jenis – jenis linked list :
List Ganda
List ganda adalah sebuah list yang elemenya menyimpan informasi elemen sebelumnya dan informasi elemen setelahnya, sehingga proses penelusuran list dapat dilakukan secara maju dan mundur. List ganda terbagi menjadi tiga jenis yaitu list ganda dengan kepala (first), list ganda dengan kepala (first) dan ekor (tail), serta list ganda yang berputar.
Operasi Dasar pada Linked List :
POKOK BAHASAN 3
STACK (TUMPUKAN)
PENDAHULUAN
Pada pokok bahasan ini akan dibahas mengenai struktur data
tumpukan atau stack, dimana stack merupakan suatu kumpulan data yang
seolah-olah ada data yang diletakkan di atas data yang lain. Setelah
mempelajari materi ini diharapkan mahasiswa mampu untuk :
PENYAJIAN (TUTORIAL)
Stack adalah kumpulan elemen-elemen yang tersimpan dalam
suatu tumpukan. Aturan penyisipan dan penghapusan elemennya tertentu :
Perhatikan bahwa dengan definisi semacam ini, representasi
tabel sangat tepat untuk mewakili stack, karena operasi penambahan dan
pengurangan hanya dilakukan di salah satu ujung tabel.
Kosong
void Push (itemType x, Stack*S)
Pop : Untuk mengambil item teratas.
int Pop (Stack S, itemType x)
Clear : Untuk mengosongkan stack.
IsEmpty : Untuk memeriksa apakah stack kosong.
IsFull : Untuk memeriksa apakah stack sudah penuh.
{
Representasi stack :
- Representasi dinamis
Karena semua operasi pada sebuah stack diawali dengan elemen
yang paling atas maka jika menggunakan representasi dinamis saat elemen
ditambahkan akan menggunakan penambahan elemen pada awal stack (addfirst) dan
saat pengambilan atau penghapusan elemen menggunakan penghapusan di awal stack
(delfirst).
POKOK BAHASAN 4
QUEUE (ANTRIAN)
PENDAHULUAN
Pada pokok bahasan ini akan dibahas mengenai antrian atau
queue, dimana struktur data hamper sama dengan tumpukan atau stack yang
merupakan struktur data yang linier. Perbedaanya adalah operasi penambahan dan
pengurangan pada ujung yang berbeda. Setelah mempelajari materi ini diharapkan
mahasiswa mampu:
PENYAJIAN (TUTORIAL)
Antrian adalah suatu kumpulan data yang penambahan elemen
nya hanya bisa dilakukan pada suatu ujung (disebut sisi belakang atau REAR),
dan penghapusan atau pengambilan elemen dilakukan lewat ujung yang lain
(disebut sisi depan atau FRONT). Prinsip yang digunakan dalam antrian ini
adalah FIFO (First In First Out) yaitu elemen yang pertama kali masuk akan
keluar pertama kalinya.
Penggunaan antrian antara lain simulasi antrian di dunia
nyata (antrian pembelian tiket), sistem jaringan komputer (pemrosesan banyak
paket yang dating dari banyak koneksi pada host, bridge, gateway), dan
lain-lain.
Karakteristik penting antrian sebagai berikut :
- Penuh
Representasi Queue :
Representasi dinamis
Queue dengan representasi dinamis biasanya diimplementasikan
dengan menggunakan pointer yang menunjuk pada elemen-elemen yang dialokasikan
pada memori. Ilustrasi queue dengan representasi dinamis dapat dilihat pada
gambar :
POKOK BAHASAN 5
REKURSIF
PENDAHULUAN
Pada pokok bahasan ini akan dibahas mengenai rekursif.
Setelah mempelajari bab ini diharapkan mahasiswa mampu :
a. Mengetahui dan memahami definisi rekursif.
b. Memahami sifat-sifat rekursif.
c. Mengaplikasikan rekursif.
PENYAJIAN (TUTORIAL)
Fungsi rekursif adalah suatu fungsi yang memanggil dirinya
sendiri, artinya fungsi tersebut dipanggil di dalam tubuh fungsi itu sendiri.
Contoh menghitung nilai faktorial. Rekursif sangat memudahkan untuk memecahkan
permasalahan yang kompleks. Sifat- sifat rekursif :
- Dapat digunakan ketika inti dari masalah terjadi berulang
kali.
- Sedikit lebih efisien dari iterasi tapi lebih elegan.
- Method-methodnya dimungkinkan untuk memanggil dirinya
sendiri.
Data yang berada dalam method tersebut seperti argument
disimpan sementara ke dalam stack sampai method pemanggil diselesaikan.
POKOK BAHASAN 6
LINKED LIST (SENARAI)
PENDAHULUAN
Setelah mempelajari bab ini diharapkan mahasiswa mampu :
a. Menunjukkan beberapa algoritma dalam pengurutan.
b. Menunjukkan bahwa pengurutan merupakan suatu persoalan yang
bisa diselesaikan dengan sejumlah algoritma yang berbeda satu sama lain.
c. Dapat memilih algoritma yang paling sesuai untuk
menyelesaikan suatu permasalahan pemrograman.
PENYAJIAN (TUTORIAL)
Pengurutan data (sorting) didefinisikan sebagai suatu proses untuk menyusun kembali himpunan objek menggunakan aturan tertentu. Ada dua macam urutan yang bisa digunakan dalam proses pengurutan yaitu :
- Urutan turun (descending) yaitu dari data yang mempunyai
nilai paling besar sampai paling kecil.
Contoh : data bilangan 5, 2, 6, dan 4 dapat diurutkan naik
menjadi 2, 4, 5, 6 atau diurutkan menjadi 6, 5, 4, 2. Pada data yang bertipe
char, nilai data dikatakan lebih kecil atau lebih besar dari yang lain
didasarkan pada urutan relative (collating sequence) seperti dinyatakan dalam
tabel ASCII. Keuntungan dari data yang sudah dalam keadaan terurut yaitu :
Data mudah dicari, mudah untuk dibetulkan, dihapus, disisipi
atau digabungkan. Dalam keadaan terurutkan, kita mudah melakukan pengecekan
apakah ada data yang hilang. Misalnya kamus Bahasa, buku telepon. Mempercepat
proses pencarian data yang harus dilakukan berulang kali.
Beberapa faktor yang berpengaruh pada efektifitas suatu
algoritma pengurutan antara lain :
- Banyak data yang diurutkan.
- Kapasitas pengingat apakah mampu menyimpan semua data yang
kita miliki.
- Tempat penyimpanan data, misalnya piringan, pita tau kartu, dll.
Beberapa algoritma metode pengurutan dan prosedurnya sebagai berikut :
Bubble Sort
Bubble Sort adalah
suatu metode pengurutan yang membandingkan elemen yang sekarang dengan elemen
berikutnya. Apabila elemen sekarang > elemen berikutnya, maka posisinya
ditukar. Kalua tidak, tidak perlu ditukar. Diberi nama “Bubble” karena proses
pengurutan secara berangsur-angsur bergerak/berpindah ke posisinya yang tepat,
seperti gelembung yang keluar dari sebuah gelas bersoda.
Proses Bubble Sort:
Data paling akhir dibandingkan dengan data di depanya, jika
ternyata lebih kecil atau besar maka tukar sesuai dengan kekuatan ( descending
dan ascending). Dan pengecekan yang sama dilakukan terhadap data yang
selanjutnya sampai data yang paling awal.
Algoritma Bubble Sort :
1. i=0
2. selama (i<N-1) kerjakan baris 3 sampai 7
3. j=N-1
4. selama (j>=i) kerjakan baris 5 sampai 7
5. jika (Data[j-1] > Data[j]) maka tukar Data[j-1] dengan
Data[j]
6. j=j-1
7. i=i+1
prosedur yang menggunakan metode gelembung :
void BubbleSort()
{
int i,j;
for(i=1;
i<Max; i++)
for(j=Max-1;
j>=I; j--)
if(Data[j-1]
> Data[j])
Tukar(&Data[j-1],
&Data[j]);
}
Selection Sort
Metode seleksi melakukan pengurutan dengan cara mencari data
yang terkecil kemudian menukarnya dengan data yang digunakan sebagai acuan atau
sering dinamakan pivot. Selama proses, pembandingan dan pengubahan hanya
dilakukan pada indeks pembanding saja, pertukaran data secara fisik terjadi
pada akhir proses. Proses pengurutan dengan metode seleksi dapat dijelaskan
sebagai berikut :
Langkah
pertama dicari data terkecil dari data pertama sampai data terakhir. Kemudian
data terkecil ditukar dengan data pertama. Dengan demikian, data pertama
sekarang mempunyai nilai paling kecil dibanding data yang lainnya.
Langkah
kedua, data terkecil kita cari mulai dari data kedua sampai terakhir. Data
terkecil yang kita peroleh ditukar dengan data kedua dan demikian seterusnya
sampai semua elemen dalam keadaan terurutkan.
Algoritma seleksi dapat dituliskan sebagai berikut :
1. i=0
2. selama (i<N-1) kerjakan baris 3 sampai dengan 9
3. k=i
4. j=i+1
5. selama (j<N) kerjakan baris 6 dan 7
6. jika (Data[k] > Data[j]) maka k=j
7. j=j+1
8. Tukar Data[i] dengan Data[k]
9. i=i+1
Di bawah ini merupakan prosedur yang menggunakan metode
seleksi :
void SelectionSort()
{
k=i;
for(j=i+1;
j<Max; j++)
if(Data[k]
> Data[j])
k=j;
Tukar(&Data[i],
&Data[k]);
}
}
3. Merge Sort
Algoritma Merge Sort adalah algoritma pengurutan yang
berdasarkan pada strategi divide and conquer. Algoritma ini terdiri dari dua
bagian utama, pembagian list yang diberikan untuk di-sort ke dalam beberapa
sublist yang lebih kecil, dan sort (mengurutkan) dan merge (menggabungkan)
sublist - sublist yang lebih kecil ke dalam list yang sudah diurutkan.
Pembagian bisa dikatakan cukup mudah karena sublist-sublist tersebut dibagi
kedalam dua sublist yang ukuranya adalah setengah dari ukuran semula. Hal ini terus
diulang sampai sublist itu cukup kecil untuk di-sort secara efisien (umumnya
telah terdiri dari satu atau dua elemen). Dalam langkah merge dua sublist
disatukan kembali dan diurutkan pada saat yang sama. Algoritma untuk merge sort
adalah sebagai berikut :
A. Untuk kasus n=1, maka tab a sudah terurut sendirinya
(langkah solve)
B. Untuk kasus n>1, maka :
a. DIVINE: bagi table a menjadi dua bagian, bagian kiri dan
bagian kanan, masing-masing bagian berukuran n/2 elemen.
b.CONOQUER: secara rekursif, terapkan algoritma D-and-C pada
masing-masing bagian.
c.MERGE: gabung hasil pengurutan kedua bagian sehingga
diperoleh table a yang terurut.
Komentar
Posting Komentar