MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1
Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: 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. Awal: - }
{K.Akhir: P terdefinisi, siap digunakan sebagai elemen list}
procedure Create(output L: Senarai) {membuat senarai kosong}
{K. Awal: - }
{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 }
P: Address L: Senarai
k, N, NGj: integer X: TInfo
Deskripsi:
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)
MODUL PRAKTIKUM STRUKTUR DATA Modul ke-2, Pertemuan ke-2
Nama file : P02-XXX
Deskripsi: 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. Awal: - }
{K.Akhir: P terdefinisi, siap digunakan sebagai elemen list}
procedure Create(output L: Senarai) {membuat senarai kosong}
{K. Awal: - }
{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}
{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
Deskripsi:
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’) endif
endif endif endif until (Pil=4)
MODUL PRAKTIKUM STRUKTUR DATA Modul ke-3, Pertemuan ke-3 dan ke-4
Nama file : P03-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: 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. Awal: - }
{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. Awal: - }
{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}
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
Deskripsi:
Deskripsi:
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)
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) endif
3: Cetak
4: HitungElemen(L,NEl);
write(‘Banyak elemen senarai = ’,NEl) 5: write(‘Program Selesai’)
endcase
until (Selesai(Pil))
MODUL PRAKTIKUM STRUKTUR DATA Modul ke-4, Pertemuan ke-5 dan ke-6
Nama file : P04-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: 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. Awal: - }
{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. Awal: - }
{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}
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]
Deskripsi:
Deskripsi:
Create(L) repeat
write(‘Pemrosesan Senarai’) write(‘1. Penyisipan’) write(‘2. Hapus Elemen’)
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) endif
3: Cetak
4: CariMhsTerbaik(L, MhsTerbaik)
write(‘Mahasiswa terbaik adalah’,MhsTerbaik.Nama, MhsTerbaik.NIM, MhsTerbaik.IPK)
5: write(‘Program Selesai’) endcase
until (Selesai(Pil))
MODUL PRAKTIKUM STRUKTUR DATA Modul ke-5, Pertemuan ke-7 dan ke-8
Nama file : P05-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: 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. Awal: - }
{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}
function Selesai(input Pil:integer)boolean {mengembalikan true jika pil = 4}
Deskripsi:
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
Deskripsi:
if Empty(Q) then
write(“Antrian kosong”) else
while not Empty(Q) do DeQueue(Q,X)
write (X) endwhile endif
MODUL PRAKTIKUM STRUKTUR DATA Modul Ke-6, Pertemuan ke-9
Nama File: P06-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: 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. Awal: - }
{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}
Deskripsi:
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”) endif
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
Deskripsi:
if EmptyStack(S) then write(“Stack kosong”) else
while not IsEmpty(S) do Pop(Q,X)
write (X) endwhile endif
MODUL PRAKTIKUM STRUKTUR DATA Modul Ke-8, Pertemuan ke-10
Nama File: P08-XXX (XXX adalah 3 digit terakhir NIM Deskripsi: 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
DFS(v);
write (‘kunjungan BFS’);
{siapkan larik kunjungan untuk BFS}
for k1 to NSimpul do dikunjungi[k] false;
endfor
BFS(v) getch();
until (v > NSimpul);
MODUL PRAKTIKUM STRUKTUR DATA Modul Ke-8, Pertemuan ke-11 dan ke-12
Nama File: P08-XXX (XXX adalah 3 digit terakhir NIM Deskripsi: 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. Awal: - }
{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. Awal: - }
{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)
{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}
Deskripsi:
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") endif
else
if pil = 3 then
write("program selesai") else
write("salah pilih ") endif { pil = 3 }
endif { pil = 2 } endif {pil = 1 } until selesai(pil)