Вы находитесь на странице: 1из 34

1.

PENGANTAR

Modul praktikum merupakan sarana penunjang perkuliahan yang digunakan mahasiswa


untuk membantu dalam proses belajar. Dengan modul praktikum ini diharapkan mahasiswa
dapat lebih mudah memahami materi yang dipelajari didalam kelas.

Modul praktikum ini disusun dengan memperhatikan kebutuhan dasar pengetahuan pem-
rograman yang perlu dipahami oleh setiap mahasiswa yang mempelajari mata kuliah Struktur
data.

Bahasa pemrograman yang digunakan pada modul ini adalah bahasa pascal dengan compiler
yang digunakan adalah free pascal bukan turbo pascal yang sebelumnya digunakan. Penggunaan
free pascal dikarenakan ia memiliki dialeg bahasa yang sama dengan turbo pascal dengan
kelebihan yang telah disesuaikan dengan perkembangan tehnologi kompiler saat ini. Sehingga
diharapkan mahasiswa memiliki pengatahuan yang up to date terhadap perkembangan tehnologi
compiler.

i
2. Daftar Isi

PENGANTAR .......................................................................................................................................... i
Daftar Isi................................................................................................................................................... ii
Daftar Program: ..................................................................................................................................... iii
1. ARRAY ....................................................................................................................................... 4:1
1.1 Deklarasi dan Definisi Array ......................................................................................... 4:1
 Pendeklarasian array pada variable .............................................................................. 4:1
 Pendeklarisian array pada tipe data ............................................................................. 4:1
 Pendefinisian array secara langsung ............................................................................. 4:1
 Pendefinisian tidak langsung........................................................................................... 4:1
 Contoh ............................................................................................................................... 4:1
1.2 Array Multi Dimensi........................................................................................................ 4:3
 Pendeklarasian Multidimensi Array.............................................................................. 4:3
 Contoh .............................................................................................................................. 4:3
1.3 Array Dinamis .................................................................................................................. 4:5
 Pendeklarasian Array Dinamis ...................................................................................... 4:5
1.4 Tugas dan Latihan ............................................................................................................ 4:6
1) Buatlah program matriks dan lakukan operasi perkalian matriks ......................... 4:6
2. RECORD ................................................................................................................................... 2:7
2.1 Deklarasi dan Definisi ..................................................................................................... 2:7
 Deklarisi Tipe Record..................................................................................................... 2:7
 Deklarasi dan definisi variable record ......................................................................... 2:7
 Contoh ............................................................................................................................... 2:7
3. POINTER ................................................................................................................................... 3:9
3.1 Deklarasi dan Definisi Pointer ...................................................................................... 3:9
 Deklarasi tipe pointer ..................................................................................................... 3:9
 Definisi Pada Program .................................................................................................... 3:9
3.2 Jenis Tipe Pointer ............................................................................................................ 3:9
 Pointer Bertipe ................................................................................................................. 3:9

ii
 Pointer Serba Guna ....................................................................................................... 3:10
3.3 Contoh Penggunaan Pointer ....................................................................................... 3:10
 Contoh 1: contoh program typed Pointer............................................................... 3:10
 Contoh 2: contoh program untyped pointer .......................................................... 3:10
 contoh 3: Program mengalokasikan sejumlah byte pada memori yang
direferensikan kepointer .................................................................................................................. 3:11
4. TIPE BERKAS .......................................................................................................................... 3:12
4.1 Bekerja dengan tipe data text ..................................................................................... 3:12
 Deklasi tipe data text .................................................................................................... 3:12
 Deklarasi tipe data sederhana................................................................... 3:12
 Contoh ............................................................................................................................. 3:12

3. Daftar Program:

Program 1-1 Deklarasi dan Definisi array sederhana ----------------------------------------------------------------------------------------------------- 4:2


Program 1-2 Pendefinisian Array Menggunakan Pengulangan ---------------------------------------------------------------------------------------- 4:2
Program 1-3 Pendeklarasian Array Dua Dimensi ----------------------------------------------------------------------------------------------------------- 4:3
Program 1-4 Operasi Matriks --------------------------------------------------------------------------------------------------------------------------------------- 4:4
Program 1-5 Penggunaan Array Dinamis ----------------------------------------------------------------------------------------------------------------------- 4:5
Program 1-6 Penggunaan array Dinamis dalam array MultiDimensi ------------------------------------------------------------------------------- 4:6
Program 2-1 Penggunan Record ----------------------------------------------------------------------------------------------------------------------------------- 2:8
Program 3-1 Typed Pointer-----------------------------------------------------------------------------------------------------------------------------------------3:10
Program 3-2 Untyped Pointer -------------------------------------------------------------------------------------------------------------------------------------3:10
Program 3-3 mengalokasikan sejumlah byte pada memori yang direferensikan kepointer ---------------------------------------------3:11
Program 4-1 membaca dan menulis berkas text ---------------------------------------------------------------------------------------------------------3:13
Program 4-2 Penulisan dan pembacaan berkas beruntun ------------------------------------------------ Error! Bookmark not defined.
Program 4-3 Membuat dan Membaca Berkas bertipe -------------------------------------------------------------------------------------------------3:14
Program 4-4 Proses penulisan dan pembacaan data beruntun -------------------------------------------------------------------------------------3:16
Program 5-1 Penerapan Linked List Sederhana -----------------------------------------------------------------------------------------------------------4:19

4. Daftar Gambar

Gambar 5-1Hasil Keluaran Program 5.1 .......................................................................................................................................................... 4:20

iii
ARRAY
Deklarasi dan Definisi Array 1

1. ARRAY

Array/Senarai adalah tipe data tersetruktur yang memiliki komponen dalam jumlah yang
tetap yang setiapkomponennya memiliki tipe data yang sama. (Ir. Santoso, hal. 18)

1.1. Deklarasi dan Definisi Array

1. Pendeklarasian array pada variable


var namavariable : array[jangkauan] of tipedata;

keterangan
namavariable : nama pengenal
jangkauan : Jangkauan yang digunakan dimulai dari 0
tipedata : Tipe data yang digunakan dalam array

2. Pendeklarisian array pada tipe data


type TnamaTipeData = array[jangkauan] of tipedata;

keterangan
TnamaTipedata : Nama dari struktur tipe data
jangkauan : Jangkauan yang digunakan dimulai dari 0
tipedata : Tipe data yang digunakan dalam array

c. Pendefinisian array secara langsung


var namavariable: array[jangkauan] of tipedata = (nilai data,..);
keterangan
nilaidata : nilai yang langsung diberikan pada saat deklarasi

d. Pendefinisian tidak langsung


namaVariable[indeksArray] := nilaiyangdiberikan;
keterangan
indeksarray : indeks dimana data yang ingin diubah berada

e. Contoh
berikut ini merupakan contoh dari cara penggunaan Array didalam program
ARRAY
Deklarasi dan Definisi Array 2

 Contoh 1: Deklarsi dan definis array secara sederhana


1. uses crt;
2. type
3. TArray = array[1..10] of integer;
4. var
5. a: TArray;
6. b: array[1..7] of string =
('Senin','Selasa','Rabu', 'Kamis', 'Jumat', 'Sabtu',
'Minggu');
7. begin
8. clrscr;
9. a[1]:= 10;
10. a[2]:= 35;
11. writeln(b[2], a[1]:5);
12. readln;
13. end.

Program 1-1 Deklarasi dan Definisi array sederhana

 Contoh 2: Pendefinisian array menggunakan perintah pengulangan


1. uses crt;
2. type
3. TArray = array[1..10] of integer;
4. var
5. a: TArray;
6. b: array[1..7] of string =
('Senin','Selasa','Rabu', 'Kamis', 'Jumat', 'Sabtu',
'Minggu');
7. i: integer;
8. begin
9. clrscr;
10. for i := 1 to high(a) do
11. begin
12. write('Masukan Elemen Array ke-',i,'= ');
readln(a[i]);
13. end;
14. for i := 1 to high(a) do
15. write(a[i]:3);
16. writeln;
17. for i := 1 to high(b) do
18. writeln(b[i]);
19. readln;
20. end.
Program 1-2 Pendefinisian Array Menggunakan Pengulangan
ARRAY
Array Multi Dimensi 3

Keterangan:

Fungsi High digunakan untuk mendapatkan nilai indeks array tertinggi, sedang fungsi low
untuk mendapatkan nilai indeks array terendah.

1.2. Array Multi Dimensi

Array dapat disajikan dalam banyak dimensi yang dapat diartikan sebagai sebuah aray yang
memiliki komponen berupa komponen array juga.

Pendeklarasian Multidimensi Array


var namaVariable: array[jangkauan][jangkauan] of integer;
Keterangan
Namavariable : Nama pengenal dari variable
Jangkauan : Jangkauan elemen array

Contoh

 Contoh 1: Pendeklarasian dan definisi array dua dimensi


1. uses crt;
2. var array2D: array[1..2,1..2] of integer;
3. i, j: integer;
4. begin
5. for i:=1 to high(array2D) do
6. for j:=1 to high(array2D[i]) do
7. begin
8. write('masukan elemen baris[',i,']
Kolom[',j,']=');
9. readln(array2D[i,j]);
10. end;
11. for i:=1 to high(array2D) do begin
12. for j:=1 to high(array2D[i]) do
13. write(array2D[i,j]:3);
14. writeln;
15. end;
16. readln;
17. end.
Program 1-3 Pendeklarasian Array Dua Dimensi

 Contoh 2: Operasi matriks penjumlahan


1. uses crt;
2. var arOpr1, arOpr2, arOpr3: array[1..2,1..2] of integer;
3. i, j: integer;
4. begin
5. clrscr;
ARRAY
Array Multi Dimensi 4

6. for i:=1 to high(arOpr1) do


7. for j:=1 to high(arOpr1[i]) do
8. begin
9. write('masukan elemen baris[',i,']
Kolom[',j,']=');
10. readln(arOpr1[i,j]);
11. end;
12. for i:=1 to high(arOpr2) do
13. for j:=1 to high(arOpr2[i]) do
14. begin
15. write('masukan elemen baris[',i,']
Kolom[',j,']=');
16. readln(arOpr2[i,j]);
17. end;
18. writeln('Elemen matrik operand 1 adalah');
19. for i:=1 to high(arOpr1) do begin
20. for j:=1 to high(arOpr1[i]) do
21. write(arOpr1[i,j]:3);
22. writeln;
23. end;
24. writeln('Elemen matrik operand 2 adalah');
25. for i:=1 to high(arOpr2) do begin
26. for j:=1 to high(arOpr2[i]) do
27. write(arOpr2[i,j]:3);
28. writeln;
29. end;
30. writeln('Hasil penjumlahannya adalah ');
31. for i:=0 to high(arOpr3) do
32. for j:=0 to high(arOpr3[i]) do
33. arOpr3[i,j]:= arOpr1[i,j]+arOpr2[i,j];
34.
35. for i:=0 to high(arOpr3) do begin
36. for j:=0 to high(arOpr3[i]) do
37. write(arOpr3[i,j]:3);
38. writeln;
39. end;
40. readln;
41. end.

Program 1-4 Operasi Matriks


ARRAY
Array Dinamis 5

1.3. Array Dinamis1

Array dinamis adalah jenis array yang elemennya dapat ditambah atau dikurangi secara
dinamis atau pada saat program berjalan. Kemampuan ini hanya dimiliki oleh generasi compiler
pascal terbaru seperti borland delphi dan free pascal. Keuntungan yang didapat dari pemanfaatan
array dinamis adalah tidak perlunya dilakukan deklarasi ruang elemen yang digunakan sehingga
dapat mengurangi ruang memori.

Pendeklarasian Array Dinamis


var namaVariable: array[] of tipedata;
keterangan:
namaVariable: nama variable array
 Contoh 1: Penggunaan array dinamis
1. uses crt;
2. var arOpr1: array of integer;
3. i: integer;
4. begin
5. clrscr;
6. setLength(arOpr1,2);
7. for i:= 0 to high(arOpr1) do begin
8. write('masukan elemen[',i,']: ');
readln(arOpr1[i]); end;
9. for i:= 0 to high(arOpr1) do
10. write('Isi dari elemen[',i,']: ', arOpr1[i]);
11.
12. end.
Program 1-5 Penggunaan Array Dinamis

 contoh 2: Penggunaan array Dinamis dalam array MultiDimensi


1. uses crt;
2. var arOpr1: array of array of integer;
3. i, j: integer;
4. begin
5. clrscr;
6. for i:= 0 to 2 do begin
7. setLength(arOpr1,i+1);
8. for j:=0 to 2 do begin
9. setLength(arOpr1[i],j+1);
10. write('Masukan elemen matrik baris[',i,']
Kolom[',j,']=');
11. readln(arOpr1[i,j]);

1
Hanya tersedia pada Free Pascal dan Delphi
ARRAY
Tugas dan Latihan 6

12. end;
13. end;
14. for i:= 0 to high(arOpr1) do begin
15. for j := 0 to high(arOpr1[i]) do
16. write(arOpr1[i,j]:3);
17. writeln;
18. end;
19. readln;
20. end.
Program 1-6 Penggunaan array Dinamis dalam array
MultiDimensi
Keterangan:

Fungsi setLength digunakan untuk merubah ukuran ruang alokasi elemen.

1.4. Tugas dan Latihan

Buatlah program matriks dan lakukan operasi perkalian matriks


RECORD
Deklarasi dan Definisi 7

2. RECORD

Record2 menyajikan nilai elemen data yang beragam dari jenis tipe data berbeda, setiap
elemen disebut dengan field atau kolom.

2.1 Deklarasi dan Definisi

Deklarisi Tipe Record


type namaTipeRecord = record
namaField1: tipedata;
namaField2: tipedata;
……
end;
keterangan:
namaTipeRecord : nama tipe data record
namaFieldn : nama field/kolom record
Deklarasi dan definisi variable record
var
namaVariableRecord: tipeDatarecord;

namaVariableRecord.namaField := nilaiField;
nilaiField := namaVariable.namaField;

with namaVariableRecord do
namaField:=nilaiField;

keterangan:
namaVariableRecord : nama variable record
namaField : nama field pada record
nilaiField : nilai yang dimasukan kedalam field
Contoh

 Contoh 1: Contoh program penggunaan record


1. uses crt;
2. type
3. TSiswa= record
4. npm: string;
5. nama: string;
6. fakultas: string;
7. jurusan: string;

2
Pada bahasa pemprograman C disebut juga dengan tipe structure
RECORD
Deklarasi dan Definisi 8

8. end;
9. var
10. siswa : TSiswa;
11. begin
12. clrscr;
13. write('NPM = '); readln(siswa.npm);
14. with siswa do begin
15. write('Nama ='); readln(nama);
16. write('Fakultas ='); readln(fakultas);
17. write('Jurusan ='); readln(jurusan);
18. end;
19. writeln('NPM : ',siswa.npm);
20. writeln('Nama : ',siswa.nama);
21. writeln('Fakultas : ',siswa.fakultas);
22. writeln('Jurusan :',siswa.jurusan);
23. readln;
24. end.
Program 2-1 Penggunan Record
POINTER
Deklarasi dan Definisi Pointer 9

3. POINTER

Pointer adalah variable yang mesimpan alamat data memori, jika pointer menganani alamat
memori dari variable lain artinya, pointer ini mengacu pada sebuah variable yang berisikan data
yang dimaksud. Pada array pointer hanya mengacu ke array pada elemen pertama.

3.1 Deklarasi dan Definisi Pointer

Deklarasi tipe pointer


type PnamaTipePointer = ^tipePointer;
ketarangan:
PnamaTipePointer = nama tipe pointer
tipePointer = tipe pointer
simbol^ didepan = simbol deklarasi pointer
contoh:
type Pinterger = ^integer;

Definisi Pada Program


pemberian nilai pointer

variablePointer := @variableMemori;
keterangan:
memberi alamat dari varible @variableMemori disimpan dalam
variablePointer
contoh:
Pnama := @varNama;

Pemberian Nilai ke variable melalui pointer

variableMemori := ^variablePointer;
keterangan:
memberikan nilai pada memori dengan nilai variable lain yang
direferensikan melalui variable referensi.
contoh:
varnama := ^Pnama;

3.2 Jenis Tipe Pointer

1. Pointer Bertipe
Pointer beripe berfungsi sebagai penanda jenis tipe data apakah yang beradap pada
memori yang ditangani.
POINTER
Jenis Tipe Pointer 10

Contoh sebagai berikut:

type Pinteger = ^integer;

Pointer Serba Guna


Pointer Serba Guna jenis tipe pointer yang dapat menyajikan pointer dari data
bertipa apapun, pointer ini membutuhkan ruangan memori sebesar empat byte.

Contoh sebagai berikut:

var i: Pointer;

Contoh Penggunaan Pointer

 Contoh 1: contoh program typed Pointer


1. uses crt;
2. var
3. PX: ^integer;
4. X : integer;
5. begin
6. X := 10;
7. PX := @X;{*Mereferensikan alamat variable x ke pointer
px*}
8. writeln('Isi dari alamat memori =', Integer(PX) ,',
Nilainya =',PX^);
9. readln;
10. end.

Program 3-1 Typed Pointer


 Contoh 2: contoh program untyped pointer
1. uses crt;
2. var
3. PX: Pointer;
4. X : integer;
5. begin
6. X := 10;
7. PInteger(PX) := @X;{*sebelum menerima nilai acuan
dari variable x, pointer px harus di casting *}
8. writeln('Isi dari alamat memori =', Integer(PX) ,',
Nilainya =',PInteger(PX)^);
9. readln;
10. end.
Program 3-2 Untyped Pointer
POINTER
Jenis Tipe Pointer 11

1. contoh 3: Program mengalokasikan sejumlah byte pada memori yang


direferensikan kepointer
1. uses crt;
2. var
3. PX: Pointer;
4. X : integer;
5. begin
6. X := 10;
7. getmem(PX,sizeof(x));{*mendapatkan alokasi ruang
memori untuk pointer px bedasarkan variable x}
8. Pinteger(PX)^ := 12;
9. writeln('Isi dari alamat memori =', Integer(PX) ,',
Nilainya =',PInteger(PX)^);
10. PInteger(px)^ := 11;
11. writeln('Isi dari alamat memori =', Integer(PX) ,',
Nilainya =',PInteger(PX)^);
12. writeln(x);
13. readln;
14. freemem(PX);
15. end.
Program 3-3 mengalokasikan sejumlah byte pada memori yang
direferensikan kepointer

 contoh 4: Membuat pointer baru yang dapat mengutip nilai dari variable
lain tanpa merubah isi dari variable lainnya.
1. type
2. {* Deklarasi tipe pointer bertipe *}
3. PInteger=^integer;
4. var
5. {* Deklarasi variable pointer *}
6. pengacu :PInteger;
7. a: integer;
8. begin
9. a:=10;
10. new(pengacu);
11. {* memberikan nilai data a kevariable pointer *}
12. pengacu^:= a;
13. a:=20;
14. writeln('Isi variable pointer =', pengacu^);
15. writeln('Isi variable a yang telah dirubah =',a);
16. pengacu := nil;
17. readln;
18. end.
Program 3-4 alokasi alamat pointer dari suatu variable
TIPE BERKAS
Bekerja dengan tipe data text 12

3. TIPE BERKAS

Terdapat dua jenis berkas yaitu jenis berkas bertipe dan jenis berkas tidak bertipe. jenis
berkas bertipe memiliki tipe data seperti halnya yang lain, yang membedakannya adalah pada tipe
data jenis ini, isi data tidak ditempatkan pada memori melainkan pada media penyimpanan
eksternal.

3.2. Bekerja dengan tipe data text

Deklasi tipe data text


var
myFile: text;
keterangan
myFile : variable myFile
text : Tipe data text

Deklarasi tipe data sederhana


type
vartipeFile: file of tipedata
keterangan
vartipefile : variable tipe file
tipedata : tipe data
Contoh

 Membuat file berjenis text


1. uses crt;
2. var textFile: text;
3. line : string;
4. begin
5. assign(textFile,'c:\datatext.txt');
6. rewrite(textFile);{*Membuat file baru*}
7. writeln(textFile,'Hello World!');
8. close(textFile);
9. assign(textFile,'c:\datatext.txt');
10. {$i-}
11. reset(textFile);{*Membuka file yang dibuat*}
12. {$i+}
13. if IOresult = 0 then begin
14. readln(textFile,line);
15. close(textFile);
16. writeln(line);
17. readln;
TIPE BERKAS
Bekerja dengan tipe data text 13

18. end;
19. end.
Program 3-1 membaca dan menulis berkas text

1. uses crt;
2. var textFile: text;line : string; i: integer;
3. begin
4. assign(textFile,'c:\datatext.txt');
5. rewrite(textFile);
6. for i:= 0 to 9 do
7. writeln(textFile,'Hello World !');
8. close(textFile);
9. assign(textFile,'c:\datatext.txt');
10. {$i-}
11. reset(textFile);
12. {$i+}
13. clrscr;
14. if IOresult = 0 then begin
15. while not eof(textFile) do begin
16. readln(textFile,line);
17. writeln(line);
18. end;
19. close(textFile);
20. readln;
21. end;
22. end.
Program 3-2 Penulisan dan pembacaan berkas beruntun

1. uses crt;
2. type
3. TSiswa = record
4. NPM: string[10];
5. Nama: string[30];
6. jurusan: String[10];
7. end;
8. TfileSiswa = file of TSiswa;
9. var
10. fileSiswa: TfileSiswa;
11. siswa : TSiswa;
12.
13. procedure inputSiswa;
14. begin
15. clrscr;
16. write('Masukan Nip Siswa :'); readln(siswa.npm);
TIPE BERKAS
Bekerja dengan tipe data text 14

17. write('Masukan Nama Siswa :'); readln(siswa.nama);


18. write('Masukan Jurusan :');
readln(siswa.jurusan);
19. assign(filesiswa, 'c:\filesis.dat');
20. rewrite(filesiswa);
21. write(fileSiswa, siswa);
22. close(filesiswa);
23. end;
24.
25. procedure bacaberkas;
26. var panjangFile: integer;
27. begin
28. clrscr;
29. assign(filesiswa, 'c:\filesis.dat');
30. {$i-}
31. reset(filesiswa);
32. {$i+}
33. if IOResult = 0 then begin
34. read(filesiswa,siswa);
35. close(filesiswa);
36. writeln(siswa.npm);
37. writeln(siswa.nama);
38. writeln(siswa.jurusan);
39. end
40. else
41. writeln('File bermasalah');
42. end;
43.
44. begin
45. clrscr;
46. inputsiswa;
47. bacaberkas;
48. readln;
49. end.
Program 3-3 Membuat dan Membaca Berkas bertipe

1. uses crt;
2. type
3. TSiswa = record
4. NPM: string[10];
5. Nama: string[30];
6. jurusan: String[10];
7. end;
8. TfileSiswa = file of TSiswa;
9. var
TIPE BERKAS
Bekerja dengan tipe data text 15

10. fileSiswa: TfileSiswa;


11. siswa : array[0..9] of TSiswa;
12. jumlah: integer;
13.
14.
15. procedure inputSiswa;
16. var i: integer;
17. begin
18. clrscr;
19. write('Masukan jumlah data [max 10] :');
readln(jumlah);
20. for i:= 0 to jumlah-1 do begin
21. write('Masukan Nip Siswa :');
readln(siswa[i].npm);
22. write('Masukan Nama Siswa :');
readln(siswa[i].nama);
23. write('Masukan Jurusan :');
readln(siswa[i].jurusan);
24. end;
25. assign(filesiswa, 'c:\filesis.dat');
26. rewrite(filesiswa);
27. for i:= 0 to jumlah do
28. write(fileSiswa, siswa[i]);
29. close(filesiswa);
30. end;
31.
32. procedure bacaberkas;
33. var panjangFile: integer;
34. i:integer =0; j:integer;
35. begin
36. clrscr;
37. assign(filesiswa, 'c:\filesis.dat');
38. {$i-}
39. reset(filesiswa);
40. {$i+}
41. if IOResult = 0 then begin
42. while not eof(filesiswa) do begin
43. read(filesiswa,siswa[i]);
44. inc(i);
45. end;
46. close(filesiswa);
47. for j:= 0 to i-1 do begin
48. writeln(siswa[j].npm);
49. writeln(siswa[j].nama);
50. writeln(siswa[j].jurusan);
51. end;
TIPE BERKAS
Bekerja dengan tipe data text 16

52. end
53. else
54. writeln('File bermasalah');
55. end;
56. begin
57. clrscr;
58. inputsiswa;
59. bacaberkas;
60. readln;
61. end.
62.
Program 3-4 Proses penulisan dan pembacaan data beruntun
Linked List
Contoh Penerapan Linked list Dasar 17

4. Linked List

Linked List juga disebut sebagai one-way list, adalah koleksi linier dari elemen data yang
disebut simpul atau node. cara untuk melinierkannya adalah dengan menggunakan penunjuk atau
pointer. Setiap node terdiri dari dua bagian, yaitu 1. bagian yang menyimpan data(Info) dan 2.
bagian yang berisi alamat pointer penghubung(Link). link inilah yang menghubungkan satu elemen
data dengan elemen data lainnya.

4.1. Contoh Penerapan Linked list Dasar

1. uses crt;
2. type
3. PSimpul= ^TSimpul;
4. TSimpul = record
5. indeks:integer;
6. berikut: PSimpul;
7. end;
8. var
9. akar,simpul: PSimpul;
10.
11. function sisipSimpul(mSimpul: PSimpul;mElement: integer
):PSimpul;
12. var tmpSimpul: PSimpul;
13. begin
14. new(tmpSimpul);
15. tmpSimpul^.indeks := mElement;
16. tmpsimpul^.berikut:= nil;
17. if msimpul <> nil then begin
18. if msimpul^.berikut <> nil then begin
19. tmpsimpul^.berikut :=
msimpul^.berikut;
20. msimpul^.berikut := tmpsimpul;
21. end
22. else
23. msimpul^.berikut := tmpsimpul;
24. end;
25. sisipSimpul:= tmpSimpul;
26. end;
27.
28. procedure hapusSimpul(msimpul:Psimpul; indeks:integer);
29. var p,next,prev:PSimpul;i:integer=0;
30. begin
31. p := msimpul;
Linked List
Contoh Penerapan Linked list Dasar 18

32. while p <> nil do begin


33. next:= p^.berikut;
34. inc(i);
35. if i = indeks-1 then begin
36. prev := p;
37. p := next;
38. next := p^.berikut;
39. dispose(p);
40. prev^.berikut := next;
41. end;
42. p:= next;
43. end;
44.
45. end;
46.
47. procedure Cetak(mSimpul:PSimpul);
48. begin
49. if mSimpul = nil then
50. writeln('List Kosong') else begin
51. while msimpul <> nil do begin
52. writeln(msimpul^.indeks);
53. msimpul := msimpul^.berikut;
54. end;
55. end;
56. end;
57.
58. function getIndeks(msimpul:PSimpul;mIndeks: integer):PSimpul;
59. var i: integer; p,next: Psimpul;
60. begin
61. i:=0;
62. p:= mSimpul;
63. while p <> nil do begin
64. inc(i);
65. next:=p^.berikut;
66. if i = mindeks then begin
67. getindeks := p;
68. break;
69. end;
70. p := next;
71. end;
72. end;
73.
74. procedure hapusPointer;
75. var p,next:PSimpul;
76. begin
77. p := akar;
Linked List
Contoh Penerapan Linked list Dasar 19

78. while p <> nil do begin


79. next := p^.berikut;
80. dispose(p);
81. p:=next;
82. end;
83. end;
84.
85. var i,j, element: integer;
86. begin
87. clrscr;
88. write('masukan jumlah elemen :'); readln(j);
89. for i:= 0 to j-1 do begin
90. write('Masukan elemen ke-',i,' :'); readln(element);
91. simpul := sisipSimpul(simpul,element);
92. if akar = nil then
93. akar := simpul;
94. end;
95. cetak(akar);
96. write('Pilih baris yang akan disisipkan : '); readln(j);
97. simpul := getindeks(akar,j);
98. write('Masukan Nilai yang akan disisipkan :'); readln(j);
99. simpul := sisipSimpul(simpul, j);
100. cetak(akar);
101. write('Pilih baris simpul yang akan dihapus : '); readln(j);
102. hapussimpul(akar,j);
103. cetak(akar);
104. hapusPointer;
105. readln;
106. end.
Program 4-1 Penerapan Linked List Sederhana
Linked List
Algoritma Program 20

Gambar 4-1Hasil Keluaran Program 5.1

4.2. Algoritma Program

3. PSimpul= ^TSimpul;
4. TSimpul = record
5. indeks:integer;
6. berikut: PSimpul;
7. end;
8. var
9. akar,simpul: PSimpul;
Keterangan:
Mendefinisikan pointer dan struktur dari simpul
indeks menyimpan nilai dari larik dan berikut menyimpan pointer
tautan berikutnya.
baris 9 pendeklarasian variable akar dan simpul. variable akar
menyimpan pointer awal(start), simpul menyimpan posisi terakhir
atau berikut(link) sama dengan nil

85. var i,j, element: integer;


86. begin
87. clrscr;
88. write('masukan jumlah elemen :'); readln(j);
89. for i:= 0 to j-1 do begin
90. write('Masukan elemen ke-',i,' :'); readln(element);
91. simpul := sisipSimpul(simpul,element);
92. if akar = nil then
93. akar := simpul;
94. end;
95. cetak(akar);
96. write('Pilih baris yang akan disisipkan : '); readln(j);
Linked List
Algoritma Program 21

97. simpul := getindeks(akar,j);


98. write('Masukan Nilai yang akan disisipkan :'); readln(j);
99. simpul := sisipSimpul(simpul, j);
100. cetak(akar);
101. write('Pilih baris simpul yang akan dihapus : '); readln(j);
102. hapussimpul(akar,j);
103. cetak(akar);
104. hapusPointer;
105. readln;
106. end.
Keterangan:
baris 110 meminta masukan jumlah elemen yang akan diinput, baris
111 sampai dengan 116 proses penginputan data masukan.
fungsi sisipSimpul mengembalikan nilai pointer terakhir saat ini
yang nilai variable berikut(link) nya berisi nil.
pada saat pengulangan pertama kali nilai variable root sama
dengan nil, sehingga pada saat pengulangan pertama pada baris 114
dan 115 program memberikan nilai pointer sebagai awal dari
simpul.
prosedure cetak akar digunakan untuk mendaftar list yang
tersedia, parameter berisi posisi pointer dari mana daftar
ditampilkan.
fungsi getIndeks mengembalikan pointer berdasarkan indeks yang
diberikan pada parameternya, dimulai dari parameter simpul yang
dimasukan.
procedure hapussimpul digunakan untuk menghapus simpul pada
parameter indeks yang diberikan.
procedura hapuspointer melakukan penghapusan pointer yang tidak
terpakai lagi dari dalam memori.

11. function sisipSimpul(mSimpul: PSimpul;mElement: integer


):PSimpul;
12. var tmpSimpul: PSimpul;
13. begin
14. new(tmpSimpul);
15. tmpSimpul^.indeks := mElement;
16. tmpsimpul^.berikut:= nil;
17. if msimpul <> nil then begin
18. if msimpul^.berikut <> nil then begin
19. tmpsimpul^.berikut :=
msimpul^.berikut;
20. msimpul^.berikut := tmpsimpul;
21. end
22. else
23. msimpul^.berikut := tmpsimpul;
Linked List
Algoritma Program 22

24. end;
25. sisipSimpul:= tmpSimpul;
26. end;
keterangan:
Fungsi sisipSimpul memiliki dua parameter, mSimpul bertipe
pointer Psimpul dan mElemen bertipe integer.
mSimpul adalah parameter yang berisi simpul yang akan disisipkan,
bisa berupa posisi simpul akhir maupun simpul pertengahan,
element berisi nilai yang akan diberikan pada simpul tersebut.
variable tmpSimpul pada baris 12 merupakan variable bantu,
menyimpan alamat pointer sementara sebelum dilakukan relokasi
didalam simpul utama nilai dari tmpSimpul^.berikut diberi nilai
nil.
baris 17 melakukan pengecekan apakah isi dari parameter mSimpul
tidak sama dengan nil(bukan simpul baru), jika benar lakukan
pengecekan(baris 18) apakah variable mSimpul^.berikut tidak sama
dengan nil(bukan merupakan simpul terakhir, biasanya digunakan
untuk menyisipkan simpul pada posisi tengah) jika benar beri
nilia tmpSimpul^.berikut := mSimpul^.berikut dan mSimpul^.berikut
:= tmpSimpul(simpul baru diletakan pada posisi setelahnya).
jika nilai pembanding dari baris 18 adalah false(variable
mSimpul^.berikut = nil) maka berikan nilai mSimpul^.berikut :=
tmpSimpul(baris 25).

47. procedure Cetak(mSimpul:PSimpul);


48. begin
49. if mSimpul = nil then
50. writeln('List Kosong') else begin
51. while msimpul <> nil do begin
52. writeln(msimpul^.indeks);
53. msimpul := msimpul^.berikut;
54. end;
55. end;
56. end;
Penjelasan:
procedute cetak memiliki parameter mSimpul, yang menentukan
posisi pointer dari simpul yang akan dicetak.
baris 49 mencek apakah mSimpul bernilai Nil.
baris 51 sampai dengan baris 54 merupakan proses pengulangan
pendaftaran simpul untuk dicetak, proses akan berlanjut selama
variable msimpul tidak sama dengan nil(akhir dari simpul).
variable mSimpul merubah isi alamat pointer selama proses
pengulangan dengan nilai dari isi variable mSimpul^.berikut
Linked List
Algoritma Program 23

28. procedure hapusSimpul(msimpul:Psimpul; indeks:integer);


29. var p,next,prev:PSimpul;i:integer=0;
30. begin
31. p := msimpul;
32. while p <> nil do begin
33. next:= p^.berikut;
34. inc(i);
35. if i = indeks-1 then begin
36. prev := p;
37. p := next;
38. next := p^.berikut;
39. dispose(p);
40. prev^.berikut := next;
41. end;
42. p:= next;
43. end;
44. end;
Penjelasan:
procedure hapus simpul berfungsi untuk menghapus simpul dari
indeks yang diinginkan. memiliki parameter msimpul yang berisi
pointer simpul yang akan dihapus dan indeks dimana simpul akan
dihapus.
prosedur ini memiliki variable bantu P sebagai penampung nilai
sementara msimpul, next untuk menyimpan nilai pointer simpul
berikutnya dan prev nilai pointer sebelumnya.
baris 31 memberikan p dengan nilai msimpul(dilakukan demi
pengamanan terjadinya perubahan pada variable msimpul).
baris 32 lakukan pengulangan selama p tidak sama dengan nil.
baris 33 beri nilai next untuk mengamankan isi variable
p^.berikut.
variable i digunakan sebagai counter untuk menunjukan posisi dari
indeks pengulangan. jika nilai variable i sama dengan nilai
variable indeks-1(posisi indeks pointer sebelum indeks yang
dimaksud) (35)amankan nilai variable p kedalam variable prev(36)
dan beri nilai variable p dengan next(yang menyimpan nilai
berikutnya pada p)(37), beri nilai next dengan nilai pada
p^.berikut(menghubungkan pada simpul setelah simpul yang
dihapus)(38), hapus simpul p dengan perintah dispose atau p:=
nil(39). beri nilai prev^.berikut := next(posisi sebelumnya
dihubungkan ke pointer next berikutnya)(40).
lakukan pngulangan dengan merubah pointer p := next.
58. function getIndeks(msimpul:PSimpul;mIndeks: integer):PSimpul;
59. var i: integer; p,next: Psimpul;
60. begin
61. i:=0;
62. p:= mSimpul;
Linked List
Algoritma Program 24

63. while p <> nil do begin


64. inc(i);
65. next:=p^.berikut;
66. if i = mindeks then begin
67. getindeks := p;
68. break;
69. end;
70. p := next;
71. end;
72. end;
keterangan:
fungsi getindeks digunakan untuk mendapat pointer pada posisi
indeks yang ditentukan.
jika posisi indeks yang dicari(66) ditemukan fungsi akan
mengembalikan nilai pointer(67), lalu keluar dari proses
pengulangan(68).

2. Tugas latihan
Buatlah program linked list yang akan mendaftar informasi mahasiswa disertai
dengan fasilitas penambahan/penyisipan data dan penghapusan data.
STACK ATAU TUMPUKAN
Contoh Program stack sederhana 25

5. STACK ATAU TUMPUKAN

Stack atau tumpukan adalah bentuk khusus dari list linier. Pada penghapusan dan
pemasukan elemennya hanya dapat dilakukan pada satu sisi yaitu sisi terakhir pada list yang
disebut top.

5.1. Contoh Program stack sederhana

1. uses crt;
2. type
3. TStack = record
4. Stacks: array[0..10] of integer;
5. top: integer;
6. end;
7. var
8. tumpukan : TStack;
9.
10. // menginisialisasikan stack
11. function initStack(var stack:TStack): boolean;
12. begin
13. stack.top:= -1; // kondisi stack kosong
14. initStack:= true;
15. end;
16.
17. function push(var stack:TStack; data: integer): boolean;
18. begin
19. if high(stack.stacks) = stack.top then begin
20. writeln('Ups..! tumpukan penuh');
21. push:= false;
22. exit;
23. end
24. else begin
25. inc(stack.top);
26. stack.stacks[stack.top]:= data;
27. push := true;
28. end;
29. end;
30.
31. function pop(var stack: TStack): integer;
32. begin
33. if stack.top = -1 then begin
34. writeln('Ups..! tumpukan telah kosong');
35. pop := -1
36. end else begin
STACK ATAU TUMPUKAN
Contoh Program stack sederhana 26

37. pop := stack.stacks[stack.top];


38. stack.stacks[stack.top]:=0;
39. dec(stack.top);
40. end;
41. end;
42.
43. var jawab, data: byte;
44. begin
45. clrscr;
46. initStack(tumpukan);
47. repeat
48. writeln('1. Masukan data kedalam tumpukan ');
49. writeln('2. Keluarkan data dari tumpukan ');
50. writeln('0. Keluar ');
51. write('Masukan pilihan anda :'); readln(jawab);
52. case jawab of
53. 1: begin
54. write('Masukan datanya :'); readln(data);
55. push(tumpukan, data);
56. end;
57. 2: begin
58. writeln('Data Tumpukan teratas = ',
pop(tumpukan));
59. end;
60. 0:;
61. else writeln('Maaf! salah memasukan tombol');
62. end;
63. readln;
64. until jawab =0;
65. end.
Program 5-1 Program Stack sederhana

 Algoritma program

3. TStack = record
4. Stacks: array[0..10] of integer;
5. top: integer;
6. end;
Penjelasan:
Data yang disimpan dimasukan didalam variable stacks, variable
top digunakan untuk menandakan posisi teratas tumpukan

11. function initStack(var stack:TStack): boolean;


12. begin
STACK ATAU TUMPUKAN
Contoh Program stack sederhana 27

13. stack.top:= -1; // kondisi stack kosong


14. initStack:= true;
15. end;
Penjelasan:
Menginisialisasi nilai awal top, dengan menset variable top sama
dengan -1 yang artinya data kosong

17. function push(var stack:TStack; data: integer): boolean;


18. begin
19. if high(stack.stacks) = stack.top then begin
20. writeln('Ups..! tumpukan penuh');
21. push:= false;
22. exit;
23. end
24. else begin
25. inc(stack.top);
26. stack.stacks[stack.top]:= data;
27. push := true;
28. end;
29. end;
Penjelasan:
Berfungsi untuk memasukan data kedalam tumpukan, baris 19 sampai
dengan baris 23 mencek apakah jumlah tumpukan melebihi batas
atas tumpukan dengan membandingkan variable top dan posisi batas
atas tumpukan(19). Jika belum penuh jalankan perintah dibaris
bawahnya.
Baris 25 mengalokasikan indeks tumpukan dengan menambah dengan
1. Kemudian array disimpan pada posisi indeks tersebut.

31. function pop(var stack: TStack): integer;


32. begin
33. if stack.top = -1 then begin
34. writeln('Ups..! tumpukan telah kosong');
35. pop := -1
36. end else begin
37. pop := stack.stacks[stack.top];
38. stack.stacks[stack.top]:=0;
39. dec(stack.top);
40. end;
41. end;
Penjelasan:
Berfungsi untuk mengeluarkan data dari tumpukan. Baris 33 hingga 35
mengecek apakah masih ada data didalam tumpukan. Jika masih jalankan
STACK ATAU TUMPUKAN
Contoh Program stack sederhana 28

perintah berikutnya. Pada baris 38 setelah data dikeluarkan isi dari


lokasi data diset menjadi 0 dan mengurangi variable top dengan 1
QUEUE ATAU ANTRIAN
Deklarasi QUEUE atau antrian 29

6. QUEUE ATAU ANTRIAN

Queue atau antrian adalah suatu bentuk khusus dari list linier dengan operasi penyisipan
hanya diperbolehkan pada satu sisi saja yang disebut sisi belakang (REAR), sedangkan operasi
penghapusan hanya boleh pada sisi lainnya yang disebut sisi depan (FRONT).

6.1. Deklarasi QUEUE atau antrian

Deklarasi antrian
const max_elemen=100;
type
TQueue = array[1..max_elemen] of integer;
var antrian:Tqueue; depan, belakang:integer;
6.2. Contoh Program sederhana Queue atau antrian

1. uses crt;
2. const Max_Elemen=10;
3. type
4. TAntri = array[1..max_elemen] of char;
5. var head,tail,pilih: byte; antri:TAntri;
6. masukan:char;
7. procedure init;
8. var i: byte;
9. begin
10. head:=0; tail:=0;
11. for i:=1 to max_elemen do
12. antri[i]:='-';
13. end;
14.
15. function Kosong: boolean;
16. begin
17. kosong:=(tail=0);
18. end;
19.
20. function penuh: boolean;
21. begin
22. penuh:=(tail=max_elemen);
23. end;
24.
25. procedure tambahElemen(elemen:char);
26. begin
27. if not penuh then begin
28. if kosong then begin
QUEUE ATAU ANTRIAN
Contoh Program sederhana Queue atau antrian 30

29. head:=1; tail:=1;


30. end else
31. inc(tail);
32. antri[tail]:= elemen;
33. end;
34. end;
35.
36. function keluarkan:char;
37. var i: byte;
38. begin
39. if not kosong then begin
40. if tail=1 then begin
41. antri[tail]:='-';
42. tail:= 0; head:=0;
43. end else begin
44. keluarkan:=antri[head];
45. for i:=head to tail-1 do begin
46. antri[i]:= antri[i+1];
47. end;
48. dec(tail);
49. end;
50. if not kosong then
51. antri[tail+1]:='-' else
52. antri[tail]:='-';
53. end;
54. end;
55.
56. procedure tampilkan;
57. var i:byte;
58. begin
59. gotoxy(10,8); writeln(' ':20);
60. gotoxy(10,8);
61. for i:= 1 to 10 do
62. write('|',antri[i]:3);
63. write('|');
64. end;
65.
66. begin
67. clrscr;
68. init;
69. begin
70. writeln('1-Masukan Antrian');
71. writeln('2-Keluarkan Antrian');
72. writeln('0-Keluar');
73.
74. while not pilih <> 0 do begin
QUEUE ATAU ANTRIAN
Hasil keluaran program 31

75. gotoxy(1,4); write(' ':30);gotoxy(1,4);


76. write('Pilihan anda?'); readln(pilih);
77. case pilih of
78. 1: begin
79. if not penuh then begin
80. gotoxy(30,4); write('Masukan karakter:');
readln(masukan);
81. tambahElemen(masukan);tampilkan;
82. end else begin
83. gotoxy(30,4); write('antrian penuh'); readln;
84. end;
85. end;
86. 2: begin
87. if not kosong then begin
88. gotoxy(30,4); write(keluarkan,' telah
dikeluarkan');
89. readln;tampilkan;
90. end else begin
91. gotoxy(30,4); write('Upss! Kosong'); readln;
92. end;
93. end;
94. 0:exit;
95. end;
96. gotoxy(30,4);writeln(' ':30);
97. end;
98. end;
99. end.
Program 6-1 Contoh penggunaan Queue
6.3. Hasil keluaran program

Вам также может понравиться