MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Senarai, Traversal Deklarasi global: type TInfo = integer type Address = pointer to Elemen type Elemen = record <Info: TInfo, Next: Address> type Senarai = record <First: Address> procedure Alokasi(output P: Address) {memesan satu unit penyimpan untuk dijadikan elemen senarai} {K.Akhir: P terdefinisi, siap digunakan sebagai elemen list} procedure Create(output L: Senarai) {membuat senarai kosong} {K.Akhir: tercipta sebuah list kosong, L.First = Nil} procedure InsertFirst(input/output L: Senarai, input P: Address) {Menyisipkan P sebagai elemen pertama senarai} {K. Awal: L terdefinisi, mungkin kosong, P terdefinisi yaitu alamat elemen yang akan disisipkan} {K.Akhir: P menjadi elemen pertama senarai} procedure Cetak(input L: Senarai) {Mencetak semua info elemen senarai} {K. Awal: L terdefinisi, mungkin kosong} {K.Akhir: Semua elemen senarai dikunjungi dan info-nya dicetak} procedure HitGanjil(input L: Senarai, output NGj: integer) {Menghitung banyak elemen senarai yang info-nya ganjil} {K. Awal: L terdefinisi, mungkin kosong} {K.Akhir: NGj terdefinisi, yaitu banyak elemen senarai yang bernilai ganjil. Jika senarai kosong, maka NGj = -99 } Halaman - 1
P: Address L: Senarai k, N, NGj: integer X: TInfo Create(L) write ( Banyak elemen senarai? ); read (N) for k 1 to N do write ( masukkan info ); read (X) Alokasi(P) Info(P) X Next(P) Nil InsertFirst(L, P) endfor Cetak(L) HitGanjil(L, NGj) write( banyak info ganjil =, NGj) Halaman - 2
MODUL PRAKTIKUM STRUKTUR DATA Modul ke-2, Pertemuan ke-2 Nama file : P02-XXX Senarai, Penyisipan Deklarasi global: type TInfo = integer type Address = pointer to Elemen type Elemen = record <Info: TInfo, Next: Address> type Senarai = record <First: Address> procedure Alokasi(output P: Address) {memesan satu unit penyimpan untuk dijadikan elemen senarai} {K.Akhir: P terdefinisi, siap digunakan sebagai elemen list} procedure Create(output L: Senarai) {membuat senarai kosong} {K.Akhir: tercipta sebuah list kosong, L.First = Nil} procedure InsertFirst(input/output L: Senarai, input P: Address) {Menyisipkan P sebagai elemen pertama senarai} {K. Awal: L terdefinisi, mungkin kosong, P terdefinisi yaitu alamat elemen yang akan disisipkan} {K.Akhir: P menjadi elemen pertama senarai} procedure InsertAfter(input/output P, Prev: Address) {Menyisipkan P setelah elemen dengan alamat Prev} {K. Awal: Prev terdefinisi, P terdefinisi yaitu alamat elemen yang akan disisipkan} {K.Akhir: P menjadi elemen setelah elemen dengan alamat Prev} procedure SisipK(input/output L: Senarai, input P: Address, input k: integer) {menyisipkan P sebagai elemen ke-k} {K. Awal: L terdefinisi, P terdefinisi, k terdefinisi, > 0} {K.Akhir: P menjadi elemen ke-k} procedure Cetak(input L: Senarai) {Mencetak semua info elemen senarai} {K. Awal: L terdefinisi, mungkin kosong} Halaman - 3
{K.Akhir: Semua elemen senarai dikunjungi dan info-nya dicetak} procedure HitElemen(input L: Senarai, output NEl: integer) {Menghitung banyak elemen senarai} {K. Awal: L terdefinisi, mungkin kosong} {K.Akhir: NEl terdefinisi, yaitu banyak elemen senarai } P: Address L: Senarai Pil, k: integer X: TInfo Create(L) repeat write( Pemrosesan Senarai ) write( 1. Penyisipan ) write( 2. Cetak ) write( 3. Hitung Elemen ) write( 4. Selesai ) write( Masukkan pilihan[1/2/3/4] ); read(pil) if (Pil=1) then write ( Info yang akan disisipkan adalah: ); read(x) Alokasi(P); Next(P) Nil; Info(P) X wriite ( Sisipkan sebagai elemen ke-? ); read(k) SisipK(L,P,k) else if (Pil=2) then Cetak(L) else if (Pil=3) then HitungElemen(L,NEl); write( Banyak elemen senarai =,NEl) else if (Pil=4) then write( Program Selesai ) else write( Salah pilih ) until (Pil=4) Halaman - 4
MODUL PRAKTIKUM STRUKTUR DATA Modul ke-3, Pertemuan ke-3 dan ke-4 Nama file : P03-XXX (XXX adalah 3 digit terakhir NIM) Senarai, Hapus elemen Deklarasi global: type TInfo = integer type Address = pointer to Elemen type Elemen = record <Info: TInfo, Next: Address> type Senarai = record <First: Address> procedure Alokasi(output P: Address) {memesan satu unit penyimpan untuk dijadikan elemen senarai} {K.Akhir: P terdefinisi, siap digunakan sebagai elemen list} procedure DeAlokasi(input P: Address) {K. Awal: P terdefinisi} {K.Akhir: P dikembalikan ke sistem} procedure Create(output L: Senarai) {membuat senarai kosong} {K.Akhir: tercipta sebuah list kosong, L.First = Nil} procedure InsertFirst(input/output L: Senarai, input P: Address) {Menyisipkan P sebagai elemen pertama senarai} {K. Awal: L terdefinisi, mungkin kosong, P terdefinisi yaitu alamat elemen yang akan disisipkan} {K.Akhir: P menjadi elemen pertama senarai} procedure InsertAfter(input/output P, Prev: Address) {Menyisipkan P setelah elemen dengan alamat Prev} {K. Awal: Prev terdefinisi, P terdefinisi yaitu alamat elemen yang akan disisipkan} {K.Akhir: P menjadi elemen setelah elemen dengan alamat Prev} procedure DeleteFirst(input/output L: Senarai, output P:Address) {menghapus elemen pertama senarai} {K. Awal: L terdefinisi, tidak kosong} {K.Akhir: P adalah alamat elemen yang dihapus} Halaman - 5
procedure DeleteAfter(input/output P, Prev: Address) {menghapus elemen setelah elemen dengan alamat Prev} {K. Awal: Prev terdefinisi} {K.Akhir: P adalah alamat elemen yang dihapus} procedure HapusX(input/output L: Senarai, input X: TInfo, output P: Address) {mencari keberadaan X, jika ditemukan maka hapus elemen X} {K. Awal: L terdefinisi, X terdefinisi} {K.Akhir: Jika X ditemukan P adalah alamat elemen yang dihapus. Jika X ditemukan, maka P = Nil} procedure Cetak(input L: Senarai) {Mencetak semua info elemen senarai} {K. Awal: L terdefinisi, mungkin kosong} {K.Akhir: Semua elemen senarai dikunjungi dan info-nya dicetak} procedure HitElemen(input L: Senarai, output NEl: integer) {Menghitung banyak elemen senarai} {K. Awal: L terdefinisi, mungkin kosong} {K.Akhir: NEl terdefinisi, yaitu banyak elemen senarai } function Selesai(input Pil:integer) boolean {mengembalikan true jika Pil = 5} P: Address L: Senarai Pil,k : integer X: TInfo Create(L) repeat write( Pemrosesan Senarai ) write( 1. Penyisipan ) write( 2. Hapus Elemen ) write( 3. Cetak ) write( 4. Hitung Elemen ) write( 5. Selesai ) write( Masukkan pilihan[1/2/3/4] ); read(pil) Halaman - 6
case (pil) 1: write ( Info yang akan disisipkan adalah: ); read(x) Alokasi(P); Next(P) = Nil; Info(P) X write ( Sisipkan sebagai elemen ke-? ); read (k) SisipK(L, P, k) 2: write( Elemen yang akan dihapus? ); read (X) HapusX(L, X, P) if (P = Nil) then write(x, tidak ditemukan ); else DeAlokasi(P) 3: Cetak 4: HitungElemen(L,NEl); write( Banyak elemen senarai =,NEl) 5: write( Program Selesai ) endcase until (Selesai(Pil)) Halaman - 7
MODUL PRAKTIKUM STRUKTUR DATA Modul ke-4, Pertemuan ke-5 dan ke-6 Nama file : P04-XXX (XXX adalah 3 digit terakhir NIM) Senarai yang Info-nya Terstruktur Deklarasi global: type DataMhs = record <Nama: string[25], NIM: string[12], IPK: real> type TInfo = DataMhs type Address = pointer to Elemen type Elemen = record <Info: TInfo, Next: Address> type Senarai = record <First: Address> procedure Alokasi(output P: Address) {memesan satu unit penyimpan untuk dijadikan elemen senarai} {K.Akhir: P terdefinisi, siap digunakan sebagai elemen list} procedure DeAlokasi(input P: Address) {K. Awal: P terdefinisi} {K.Akhir: P dikembalikan ke sistem} procedure Create(output L: Senarai) {membuat senarai kosong} {K.Akhir: tercipta sebuah list kosong, L.First = Nil} procedure InsertFirst(input/output L: Senarai, input P: Address) {Menyisipkan P sebagai elemen pertama senarai} {K. Awal: L terdefinisi, mungkin kosong, P terdefinisi yaitu alamat elemen yang akan disisipkan} {K.Akhir: P menjadi elemen pertama senarai} procedure InsertAfter(input/output P, Prev: Address) {Menyisipkan P setelah elemen dengan alamat Prev} {K. Awal: Prev terdefinisi, P terdefinisi yaitu alamat elemen yang akan disisipkan} {K.Akhir: P menjadi elemen setelah elemen dengan alamat Prev} procedure DeleteFirst(input/output L: Senarai, output P:Address) {menghapus elemen pertama senarai} Halaman - 8
{K. Awal: L terdefinisi, tidak kosong} {K.Akhir: P adalah alamat elemen yang dihapus} procedure DeleteAfter(input/output P, Prev: Address) {menghapus elemen setelah elemen dengan alamat Prev} {K. Awal: Prev terdefinisi} {K.Akhir: P adalah alamat elemen yang dihapus} procedure HapusX(input/output L: Senarai, input NIMX: string, output P: Address) {mencari keberadaan data mahasiswa yang NIM-nya = NIMX, jika ditemukan maka hapus data mahasiswa tersebut} {K. Awal: L terdefinisi, X terdefinisi} {K.Akhir: Jika X ditemukan P adalah alamat elemen yang dihapus. Jika X ditemukan, maka P = Nil} procedure Cetak(input L: Senarai) {Mencetak semua info elemen senarai} {K. Awal: L terdefinisi, mungkin kosong} {K.Akhir: Semua elemen senarai dikunjungi dan info-nya dicetak} procedure CariMhsTerbaik(input L: Senarai, output MhsTerbaik: DataMhs) {Mencari data mahasiswa dengan IPK tertinggi} {K. Awal: L terdefinisi, mungkin kosong} {K.Akhir: MhsTerbaik terdefinisi, yaitu data mahasiswa dengan IPK tertinggi } function Selesai(input Pil:integer) boolean {mengembalikan true jika Pil = 5} P: Address L: Senarai Pil,k : integer X: TInfo NIMX: string[12] Create(L) repeat write( Pemrosesan Senarai ) write( 1. Penyisipan ) write( 2. Hapus Elemen ) Halaman - 9
write( 3. Cetak ) write( 4. Cari mahasiswa terbaik ) write( 5. Selesai ) write( Masukkan pilihan[1/2/3/4] ); read(pil) case (pil) 1: write ( Nama mahasiswa ); read(x.nama) write ( NIM? ); read(x.nim) write ( IPK ); read(x.ipk) Alokasi(P); Next(P) = Nil; Info(P) X write ( Sisipkan sebagai elemen ke-? ); read (k) SisipK(L, P, k) 2: write( NIM yang akan dihapus? ); read (NIMX) HapusX(L, NIMX, P) if (P = Nil) then write(nimx, tidak ditemukan ); else DeAlokasi(P) 3: Cetak 4: CariMhsTerbaik(L, MhsTerbaik) write( Mahasiswa terbaik adalah,mhsterbaik.nama, MhsTerbaik.NIM, MhsTerbaik.IPK) 5: write( Program Selesai ) endcase until (Selesai(Pil)) Halaman - 10
MODUL PRAKTIKUM STRUKTUR DATA Modul ke-5, Pertemuan ke-7 dan ke-8 Nama file : P05-XXX (XXX adalah 3 digit terakhir NIM) Antrian Deklarasi: const NMAX = 10 {maksimum elemen larik} type TInfo = integer {atau tipe terdefinisi lainnya} type Address = integer[0..nmax] type Antrian = record <Head: Address, Tail: Address, ArrQ: array[1..nmax] of TInfo> Q: Antrian procedure CreateQ(output Q: Antrian) {membuat antrian kosong, representasi fisik larik} {K.Akhir: Q terdefinisi, Q.Head = 0, Q.Tail = 0} function EmptyQ(input Q: Antrian) boolean {mengembalikan true jika antrian kosong, Q.Head = 0 and Q.Tail = 0} procedure EnQueue(input/output Q: Antrian, input X: TInfo) {menyisipkan X sebagai elemen antrian yang direpresentasi secara fisik menggunakan larik} {K. Awal: Q terdefinisi, X terdefinisi} {K.Akhir: X menjadi elemen antrian} procedure DeQueue(input/output Q: Antrian, output X: TInfo) {menghapus elemen antrian yang direpresentasi dengan larik, elemen bergeser maju} {K. Awal: Q terdefinisi, tidak kosong} {K.Akhir: X adalah elemen yang dihapus, elemen bergeser maju, antrian mungkin jadi kosong} procedure Cetak(input Q: Antrian) {mencetak elemen antrian mulai dari Head sampai Tail} {K. Awal: Q terdefinisi} {K.Akhir: semua elemen antrian dicetak} Halaman - 11
function Selesai(input Pil:integer) boolean {mengembalikan true jika pil = 4} Create(Q) repeat write( Pemrosesan Antrian ) write( 1. Penyisipan ) write( 2. Hapus ) write( 3. Cetak ) write( 4. Selesai ) write( Pilihan [1/2/3/4] ); read(pil) case (Pil) 1: write( Info yang akan disisipkan? ); read(x) EnQueue(Q,X) 2: DeQueue(Q,X) write( Elemen yang dihapus adalah,x) 3: Cetak(Q) endcase until Selesai(pil) procedure Cetak(input Q: Antrian) {mencetak elemen antrian mulai dari Head sampai Tail} {K. Awal: Q terdefinisi} {K.Akhir: semua elemen antrian dicetak} Deklarasi: X: TInfo if Empty(Q) then write( Antrian kosong ) else while not Empty(Q) do DeQueue(Q,X) write (X) endwhile Halaman - 12
MODUL PRAKTIKUM STRUKTUR DATA Modul Ke-6, Pertemuan ke-9 Nama File: P06-XXX (XXX adalah 3 digit terakhir NIM) Tumpukan (Stack) Deklarasi global: const NMAX = 10 {maksimum elemen larik} type TInfo = integer {atau tipe terdefinisi lainnya} type Address = integer[0..nmax] type Stack= record <Top: Address,ArrQ: array[1..nmax] of TInfo> S: Stack procedure CreateStack(output S: Stack) {membuat Stack kosong, representasi fisik larik} {K.Akhir: S terdefinisi, S.Top = 0} function EmptyStack(input S: Stack) boolean {mengembalikan true jika Stack kosong, S.Top = 0} procedure Push(input/output S: Stack, input X: TInfo) {menyisipkan X sebagai elemen Stack yang direpresentasi secara fisik menggunakan larik} {K. Awal: S terdefinisi, X terdefinisi} {K.Akhir: X menjadi elemen stack} procedure Pop(input/output S: Stack, output X: TInfo) {menghapus elemen Stack yang direpresentasi dengan larik} {K. Awal: S terdefinisi, tidak kosong} {K.Akhir: X adalah elemen yang dihapus, stack mungkin jadi kosong} procedure Cetak(input S: Stack) {mencetak elemen Stack mulai top sampai bottom} {K. Awal: S terdefinisi} {K.Akhir: semua elemen Stack dicetak} function Selesai(input Pil:integer) boolean {mengembalikan true jika pil = 4} Halaman - 13
CreateStack(S) repeat write( Pemrosesan Stack ) write( 1. Penyisipan ) write( 2. Hapus ) write( 3. Cetak ) write( 4. Selesai ) write( Pilihan [1/2/3/4] ); read(pil) case (Pil) 1: write( Info yang akan disisipkan? ); read(x) Push(S,X) 2: if not EmptyStack(S) then Pop(S,X) write( Elemen yang dihapus adalah,x) else write ( stack kosong ) 3: Cetak(S) endcase until Selesai(pil) procedure Cetak(input S: Stack) {mencetak elemen Stack mulai dari Top sampai bottom} {K. Awal: S terdefinisi} {K.Akhir: semua elemen Stack dicetak} Deklarasi: X: Tinfo if EmptyStack(S) then write( Stack kosong ) else while not IsEmpty(S) do Pop(Q,X) write (X) endwhile Halaman - 14
MODUL PRAKTIKUM STRUKTUR DATA Modul Ke-8, Pertemuan ke-10 Nama File: P08-XXX (XXX adalah 3 digit terakhir NIM Graf Deklarasi global: const MakSimpul = 10 type Graf = array[1..maksimpul, 1..MakSimpul] of integer G: Graf Dikunjungi: array[1..maksimpul] of boolean NSimpul: integer procedure DFS(input v: integer) {menelusuri semua simpul graf secara dfs } {k. awal: v terdefinisi, yaitu simpul awal penelusuran } {k.akhir: semua simpul yang dikunjungi dicetak di layar} procedure BFS(input v: integer) {menelusuri seluruh simpul graf dengan skema bfs} {k. awal: v terdefinisi, yaitu simpul awal penelusuran} {k.akhir: semua simpul yang dikunjungi dicetak di layar} i,j,v,k: integer Deskripsi write ( banyak simpul? ); read (NSimpul) {buat graf} for i 1 to nsimpul do for j 1 to nsimpul do write ( simpul,i, terhubung dengan simpul,j,? ) read (G[i,j]) endfor endfor repeat write ( mulai dari simpul? ); read(v) write ( Kunjungan DFS ) {siapkan larik kunjungan untuk DFS} for k 1 to NSimpul do dikunjungi[k] false endfor Halaman - 15
DFS(v); write ( kunjungan BFS ); {siapkan larik kunjungan untuk BFS} for k 1 to NSimpul do dikunjungi[k] false; endfor BFS(v) getch(); until (v > NSimpul); Halaman - 16
MODUL PRAKTIKUM STRUKTUR DATA Modul Ke-8, Pertemuan ke-11 dan ke-12 Nama File: P08-XXX (XXX adalah 3 digit terakhir NIM Pohon Pencarian Biner (BST) Deklarasi global: type TInfo = integer {atau tipe terdefinisi lainnya} type BST = pointer to Simpul type Simpul = record <Info: TInfo, Kiri: BST, Kanan: BST> Akar: BST procedure Alokasi(output P: BST) {memesan satu unit penyimpan untuk dijadikan elemen bst} {K.Akhir: P terdefinisi, siap digunakan sebagai elemen bst} procedure DeAlokasi(input P: Address) {K. Awal: P terdefinisi} {K.Akhir: P dikembalikan ke sistem} procedure Create(output Akar: BST) {membuat BST kosong} {K.Akhir: Akar = Nil} procedure InOrder(input Akar: BST) {menelusuri BST secara inorder} {K. Awal: Akar terdefinisi } {K.Akhir: semua simpul dikunjungi secara inorder} procedure PreOrder(input Akar: BST) {menelusuri BST secara preorder} {K. Awal: Akar terdefinisi } {K.Akhir: semua simpul dikunjungi secara preorder} procedure PostOrder(input Akar: BST) {menelusuri BST secara postorder} {K. Awal: Akar terdefinisi } {K.Akhir: semua simpul dikunjungi secara postorder} procedure InsertBST(input/output Akar: BST, input X: TInfo) Halaman - 17
{menyisipkan X ke dalam BST} {K. Awal: Akar terdefinisi, X terdefinisi } {K.Akhir: X menjadi elemen daun} procedure DeleteBST(input/output Akar: BST, input X: TInfo, output Found: boolean) {menghapus simpul BST yang info-nya = X} {K. Awal: BST terdefinisi, tidak kosong} {K.Akhir: Jika X ada maka simpul yang info-nya = X dihapus dari BST dan Found = true. Jika X tidak ada maka Found = false} function Selesai(input Pil:integer) boolean {mengembalikan true jika pil = 3} create(akar) repeat write("traversal inorder: ");inorder(akar) write("traversal preorder: ");preorder(akar) write("traversal postorder: ");postorder(akar) write("1. penyisipan") write("2. hapus") write("3. selesai") write("pilihan [1/2/3] "); read(pil) if pil = 1 then write("masukkan info yang disisipkan "); read(x) insertbst(akar, x) else if pil = 2 then write("masukkan info yang akan dihapus "); read(x) deletebst(akar,x,found) if not found then write(x, tidak ditemukan") else if pil = 3 then write("program selesai") else write("salah pilih ") { pil = 3 } Halaman - 18
{ pil = 2 } {pil = 1 } until selesai(pil) Halaman - 19