Anda di halaman 1dari 6

INSTITUT TEKNOLOGI DEL

Ujian Tengah Semester


Semester Gasal 2020/2021

Tanggal : Sabtu, 31 Oktober 2020


Mata Kuliah : 10S2101 – Algoritma dan Struktur Data (Prodi SI dan TE)
Durasi : 08.00 – 17.00 (8 jam, exclude 1 jam istirahat)
Dosen : Tennov Simanjuntak dan Guntur Purba Siboro

Petunjuk:
1. Ujian dikerjakan secara berkelompok dengan maksimum 3 mahasiswa per kelompok.
2. Bekerja sendiri. Kelompok maupun Mahasiswa yang terbukti melakukan plagiasi atau
kecurangan dalam bentuk lain diberikan nilai 0 (NOL) dan mendapat sanksi akademik.
3. Program yang menjadi setoran ujian ini diunggah melalui halaman Mata Kuliah Algoritma
dan Struktur Data Prodi masing – masing, yakni pada tautan berikut:
a. S1 Sistem Informasi: https://ecourse.del.ac.id/mod/assign/view.php?id=16884
b. S1 Teknik Elektro: https://ecourse.del.ac.id/mod/assign/view.php?id=16885
4. Ikuti semua prosedur yang diberikan di tiap soal.
5. Durasi ujian tidak termasuk atau diluar istirahat makan siang selama 1 jam.

Soal:
1. [60 poin] Anda diminta untuk menyimpan bilangan prima <= 20 pada lis berkait tunggal
(singly linked list) serta melakukan operasi – operasi insert, find, update, dan delete. Selain
itu, anda akan menambahkan 1 operasi/fungsi ke struktur data. Untuk soal ini, program
anda harus lulus kompilasi! Artinya, program anda hanya akan diperiksa, jika tidak ada
error saat dikompilasi. Error saat eksekusi (runtime error) masih diizinkan.
Prosedur dan spesifikasi:
a. Buat folder dengan nama NIM_soal_1 pada PC/laptop anda.
b. Salin (copy) struktur data Linked List ADT yang telah anda buat saat praktikum ke
folder tersebut. Linked List ADT terdiri atas 2 berkas, yakni antarmuka (list.h) dan
implementasi (list.c).
c. Buat berkas klien Linked List dan simpan dengan nama: client.c.
d. Modifikasi berkas klien dan tulis kode program untuk memasukkan bilangan prima
<= 20 ke linked list. Untuk membantu anda, fungsi untuk mencek apakah sebuah
bilangan prima atau tidak diberikan oleh fungsi primality_test di halaman
selanjutnya. Fungsi mengembalikan 1, jika parameter x prima dan 0 jika bukan
prima. Cetak semua elemen linked list ke monitor. Tampilan terlihat sebagai berikut.

Jika program anda benar sampai di sini, diberikan nilai 20.

10s2101/alsrudat/uts/
1. unsigned int primality_test(unsigned int x){
2. unsigned int i;
3. if(x < 2)
4. return 0;
5. if(x == 2)
6. return 1;
7. else{
8. for(i = 2; i <= x/2;i++){
9. if(x % i == 0)
10. return 0;
11. }
12. return 1;
13. }
14. }

e. Modifikasi berkas klien untuk mencari sebuah elemen di linked list dan menampilkan
pesan sesuai hasil pencarian, yakni apakah ditemukan atau tidak ditemukan. Tampilan
ditunjukkan gambar di bawah ini.

Jika program anda benar sampai di sini, nilai anda bertambah 5.


f. Modifikasi berkas klien dan tambahkan pernyataan untuk memasukkan elemen
bernilai 12 setelah simpul dengan elemen bernilai 11. Tampilan ditunjukkan gambar
di bawah ini.

Jika program anda benar sampai di sini, nilai anda bertambah 5.


g. Modifikasi berkas klien, ubah elemen bernilai 12 menjadi 13. Selanjutnya, hapus 1
simpul dengan elemen bernilai 13. Tampilan ditunjukkan gambar berikut.

Jika program anda benar sampai di sini, nilai anda bertambah 5.

10s2101/alsrudat/uts/
h. Tambahkan 1 fungsi/operasi untuk membalik (me-reverse) elemen-elemen yang ada
pada linked list dengan batasan berikut.
a) Prototipe fungsi adalah sebagai berikut.

void reverse_with_2P(List L);

b) Pembalikan hanya dapat dilakukan dengan mengubah pointer, bukan


dengan mengubah nilai elemen simpul.
c) Pada implementasi fungsi, jumlah variabel pointer yang digunakan untuk
menjalani/men-traverse linked list maksimal 2. Program yang menggunakan
pointer lebih dari 2 untuk traverse linked list diberikan pengurangan nilai.
d) Pembalikan dilakukan dalam waktu O(n).

Tampilan ditunjukkan gambar di bawah ini.

Jika program anda benar sampai di sini, nilai anda bertambah 20.

i. Hapus struktur data linked list. Tampilan ditunjukkan oleh gambar di halaman
selanjutnya.

Jika program anda benar sampai di sini, nilai anda bertambah 5.

10s2101/alsrudat/uts/
2. Di bawah ini ditunjukkan gambar queue yang diimplementasikan menggunakan linked list.
Queue memiliki header: Q. Simpul dengan elemen bernilai 2 adalah awal dari queue,
sedangkan simpul dengan elemen bernilai 1 merupakan akhir dari queue.

Q 2 4 5 3 8 9 7 6 1 Null

Gambar 1 Keadaan awal antrian Q


Tambahkanlah operasi untuk memisah atan men-split queue tersebut menjadi 2 queue. Queue
pertama adalah queue asal (existing queue dengan header Q) berisi simpul-simpul dengan
elemen bernilai genap. Queue ke-2 berisi elemen bernilai ganjil dan headernya anda buat
dengan alokasi memori simpul. Pemisahan queue dilakukan dengan mengubah pointer, bukan
dengan mengkopi elemen serta menghapus simpul bernilai genap di queue asal. Fungsi/ operai
yang memisahkan queue mengambalikan header dari queue ke-2 (header dari queue yang
menampung bilangan ganjil - Qo).
Tugas anda adalah membagi Queue diatas menjadi 2 bagian berdasarkan nilai datanya. (Queue
akan menjadi antrian yang hanya menampung node-node dengan data genap, sedangkan
QueueOdd menampung node-node dengan data ganjil.). Seperti gambar di bawah ini :

Q 2 4 8 6 Null

Qo 5 3 9 7 1 Null

Gambar 2 Keadaan akhir dimana antrian menjadi antrian Q dan Qo

Petunjuk dan Spesifikasi:


1. Buat folder dengan nama: NIM_soal_2 pada laptop/komputer anda, dimana NIM adalah
nomor induk mahasiswa anda
2. Tulis struktur data Queue ADT yang diimplementasikan menggunakan linked list. Queue
memiliki header. Operasi enqueue dan dequeue dilakukand alam O(1).
3. Gunakan fungsi yang mengambil masukan Queue dengan kembalian (return) Queue. Adapun
nilai kembalian dari fungsi tersebut adalah QueueOdd, sedangkan Queue yg tadinya
menampung semua node telah berubah sehingga hanya menampung node-node ganjil.
Prototipe fungsinya adalah sebagai berikut.

Queue SplitOddEven(Queue *Q)

10s2101/alsrudat/uts/
4. Gunakan 4 pointer untuk melakukan proses pada fungsi diatas, yaitu:
a. Pointer
b. PointerPrev
c. Tail
d. Tailo

Perhatikan ilustrasi berikut:


Q 2 4 5 3 8 9 7 6 1 Null

PointerPrev Pointer Tail

Qo

Tailo

Gambar 3
Q 2 4 5 3 8 9 7 6 1 Null

PointerPrev Pointer
Tail

Qo

Tailo

Gambar 4

Q 2 4 5 3 8 9 7 6 1 Null

PointerPrev Pointer

Tail

Qo

Tailo

Gambar 5

Q 2 4 5 3 8 9 7 6 1 Null

PointerPrev Tailo Pointer


Tail

Qo

Gambar 6

Q 2 4 5 3 8 9 7 6 1 Null

PointerPrev Tailo Pointer


Tail

Qo

10s2101/alsrudat/uts/
Gambar 7

Q 2 4 5 3 8 9 7 6 1 Null

Tailo PointerPrev Pointer


Tail

Qo

Gambar 8

Q 2 4 5 3 8 9 7 6 1 Null

PointerPrev Tailo Pointer


Tail

Qo

Gambar 9

Q 2 4 5 3 8 9 7 6 1 Null

PointerPrev Tailo Pointer


Tail

Qo

Gambar 10

Q 2 4 5 3 8 9 7 6 1 Null

Tailo PointerPrev Pointer


Tail

Qo

Gambar 11

Q 2 4 5 3 8 9 7 6 1 Null

Tail Tailo Pointer


PointerPrev

Qo

Gambar 12

SETORAN: Folder NIM_soal_1 dan NIM_soal_2 yang dikompres ke dalam berkas berekstensi
.rar atau .zip dan dikirim via e-course.

10s2101/alsrudat/uts/

Anda mungkin juga menyukai