Soal text
Transkripsi dicocokkan dengan 4 halaman naskah asli.
Redaksi dirapikan untuk dibaca. Data, pilihan jawaban, dan subsoal mengikuti naskah; diagram dijelaskan dalam teks atau tabel.
Lompat ke soal
UTS Struktur Data, gasal 2025/2026. Senin, 13 Oktober 2025. 10.00–11.40 WIB (100 menit). Buku terbuka.
Tuliskan NIM, nama, dan nomor kursi pada lembar jawab. Identitas ditulis dengan pulpen dan jawaban dengan pensil 2B. Gunakan notasi algoritmik dan sertakan asumsi/gambar bila perlu. Kerjakan bagian sesuai nomor kursi. Dilarang bekerja sama, pinjam-meminjam alat tulis, atau berkomunikasi. Kumpulkan kembali soal bersama jawaban.
Soal 1 — 40%
Klinik mendata pasien memakai tabel berikut. Nilai kategori menurut prioritas dari tertinggi ke terendah adalah 1 (Lansia), 2 (Anak), 3 (Dewasa).
| No | Nomor KTP | Nama | Kategori |
|---|---|---|---|
| 1 | 1001 | Ani | 1 |
| 2 | 1002 | Doni | 2 |
| … | … | … | … |
| 100 | … | … | … |
a. Buat definisi tipe-tipe data abstrak untuk menyimpan data pasien. b. Tuliskan definisi, kamus lokal, dan algoritma operasi sesuai nomor kursi:
- Ganjil: cari pasien berdasarkan Nomor KTP. Hasilkan nomor indeks dalam tabel dan data pasien. Jika tidak ditemukan, hasilkan indeks −1 dan null untuk data pasien.
- Genap: hitung jumlah pasien pada setiap kategori.
Soal 2 — 30%
Pasien datang acak pada setiap sesi. Pelayanan berdasarkan kedatangan, tetapi lebih memperhitungkan prioritas kelompok. Prioritas lebih tinggi didahulukan dengan menggeser mundur prioritas lebih rendah. Prioritas sama mengikuti urutan kedatangan.
type QueuePasien = < wadah: array [1..5] of Pasien,
head: integer, tail: integer >
procedure Enqueue1(input/output Q:QueuePasien, input P:Pasien)
{I.S.: Q dan P terdefinisi}
{F.S.: Q tetap atau bertambah 1 elemen}
{Proses: menambahkan P ke posisi tepat selama Q belum penuh,
dengan syarat Nomor KTP P belum terdaftar dalam Q;
model Queue 1: head stabil}
procedure Enqueue2(input/output Q:QueuePasien, input P:Pasien)
{I.S.: Q dan P terdefinisi}
{F.S.: Q tetap atau bertambah 1 elemen}
{Proses: menambahkan P ke posisi tepat selama Q belum penuh;
model Queue 2: head bergeser}
a. Realisasikan Enqueue1 untuk kursi ganjil atau Enqueue2 untuk kursi genap sesuai definisi/spesifikasi. b. Jelaskan singkat cara kerja algoritma dan tulis kondisi akhir wadah setelah satu kali operasi pada kondisi berikut.
Kursi ganjil
Q.wadah = [<"1001","Ani",1>, <"1002","Doni",2>,
<"1003","Cici",2>, <"1004","Sari",3>, <"","",0>]
Enqueue1(Q, <"1005","Dini",2>)
Kursi genap
Q.wadah = [<"","",0>, <"1001","Ani",1>, <"1002","Doni",2>,
<"1003","Cici",2>, <"1004","Sari",3>]
Enqueue2(Q, <"1005","Dini","Anak">)
Soal 3 — 30%
Definisi/spesifikasi ADT Stack:
module Stack
type Tstack = < wadah: array [1..5] of real, top: integer >
procedure createStack(output T:Tstack)
{I.S.: —}
{F.S.: T terdefinisi, semua elemen T.wadah = −999}
{Proses: menginisialisasi T}
function isEmpty(T:Tstack) → boolean
{true jika wadah kosong}
procedure push(input/output T:Tstack, input e:real)
{I.S.: T terdefinisi}
{F.S.: elemen di top tetap, atau berisi nilai e}
{Proses: mengisi elemen top baru bila belum penuh}
procedure pop(input/output T:Tstack, output e:real)
{I.S.: T terdefinisi}
{F.S.: e diisi elemen top stack lama, atau −999}
{Proses: mengambil elemen top bila belum kosong}
Aplikasi yang harus dilengkapi:
Program EvaluasiPostfix
{Mengevaluasi ekspresi postfix}
{Operand satu digit: 0,1,…,9}
{Ekspresi valid dan tidak ada pembagian dengan 0}
Kamus
use Tstack
function length(x:string) → integer
{panjang x dalam karakter}
function tipeKarakter(x:character) → integer
{2 jika digit 0..9; 1 jika operator +,−,*,/; 0 jika lainnya}
function charToInt(x:character) → integer
{konversi karakter digit menjadi integer}
exp: string
hasil: real
…
Algoritma
input(exp)
…
output(hasil)
a. Lengkapi program EvaluasiPostfix yang mengaplikasikan ADT Stack untuk mengevaluasi string ekspresi postfix. Definisi/spesifikasi ADT Stack dan fungsi bawaan di kamus tidak perlu ditulis ulang. b. Berikan ilustrasi kondisi stack dari awal hingga akhir untuk:
- Kursi ganjil: A B C + * D /
- Kursi genap: A B C / + D *
Ganti A, B, C, D dengan empat digit terakhir NIM. Jika suatu digit 0, tambahkan dengan 2.
Soal 1 di halaman PDF 1–2; soal 2 di halaman PDF 2–3; soal 3 di halaman PDF 3–4.