Ilustrasi penggunaannya adalah
sebagai berikut :
Deklarasi
inked List dengan Pointer
type
tipeinfo = record
nim
: string;
nilai
: integer;
end;
tipeptr =
^tienode;
tipelist =
tipeptr;
tipenode = record
info
: tipeinfo;
next
: tipeptr;
end;
var list : tipelist;
Elemen-elemen list berupa record yang memuat field berisi informasi data serta sebuah field bertipe pointer yang berisi alamat elemen berikutnya.
Operasi pada
Linked List
1.
Membuat List
Prosedur
ini untuk membuat list pertama kali, yaitu mengalokasikan pointer untuk head.
Nilai awal dari list adalah kosong (nil).
procedure
inisialisasi (var list : tipelist);
begin
new(list);
list :=
nil;
end;
2.
Mengetahui Panjang List (Jumlah Elemen)
Mengetahui
panjang list dilakukan dengan menghitung seluruh node. Caranya adalah
mengunjungi setiap node dan menaikkan nilai counter sehingga dijumpai node
terakhir. Contoh fungsinya adalah:
function
size (list : tipelist) : integer;
var i : integer;
begin
i := 0;
while list <> nil do
begin
i
:= i + 1;
list
:= list^.next;
end;
size :=
i;
end;
3.
Menyisipkan Node Baru
Menyisipkan
node baru pada ist diakukan dengan cara mencari lokasi tempat node baru akan
disisipkan, kemudn menyisipkan node baru tersebut. Hal ini dapat dilakukan
menggunakan bantuan sebuah pointer untuk mecari sebuah node yang akan
tersambung langsung dengan node baru. Kemudian, nade baru dapat disisipkan pada lokasi sebelum atau sesudah node terseut. Swebagai
contoh, prosedur berikut adalah untuk menyisispkan node baru sebelum node:
procedure
sisipnode (var list : tipelist; IB :
tipeinfo);
var
NB, ptr
: tipeptr;
ketemu :
boolean;
begin
new(NB);
NB^.info
:= IB;
NB^.next
:= nil;
if list = nil then list := NB
else
if IB.nim <= list^.info.nim then
begin
NB^.next
:= list;
list
:= NB;
end
else
begin
ketemu
:= false;
ptr
:= list;
while (ptr^.next <> nil) and not (ketemu) do
begin
if ptr^.next^.info.nim >= IB.nim then
ketemu
:= true'
else
ptr
:= ptr^.next
end;
NB^.next
:= ptr^.next;
ptr^.next
:= NB
end
end;
4.
Mengganti Nilai Informasi pada Suatu Node dalam List
Mengganti nilai inormasihanya akan menggan info pada
suatu node tanpa menghapus node tersebut. Hal ini dapat dilakukan dengan
mencari node yang sesuai dengan nilai yang akan diganti, selanjutnya mengganti
nilai lama dengan nilai yang baru.
Berikut ini contoh prosedur untuk mengganti nilai pada
suatu list:
a.
Mengganti nilai
mahasiswa berdasarkan nomor mahasiswa,
b.
Mengganti semua
node yang mempunyai nilai tertentu (niai lama) dengan nilai yang baru.
procedure gantinode1
(var list : tipelist; kunciGanti :
string; nilaibaru : integer;);
var ptr :
tipeptr;
begin
new(ptr);
ptr := list;
while (ptr <>
nil) and (ptr^.info.nim <> kunciganti) do
ptr := ptr^.next;
if ptr <> nil then
ptr^.info.nilai := nilai baru
end;
procedure
gantinode2(var list : tipelist;
nlama, nbaru : integer);
var ptr :
tipeptr;
begin
new(ptr);
ptr := list;
while (ptr <>
nil) do
begin
if
ptr^.info.nilai := nlama then
ptr^.info.nilai := nbaru;
ptr := ptr^.next
end;
end;
5.
Menghapus Node dari Suatu List
Menghapus node adalah menghapus sebuah elemen dari list.
Hal ini dapat dilakukan dengan mencari/menandai node yang akan dihapus, yaitu
node yang memuat nilai seperti yang akan dihapus, kemudian mengarahkan pointer
pada node sebelumnya ke arah node sesudah node yang akan dihapus, dan kemudian
menghapus node yang dimaksud.
procedure
hapusnode (var list : tipelist;
kuncihapus : string);
var ptr1, ptr2 :
tipeptr;
begin
new(ptr1);
new(ptr2);
ptr1 := nil;
ptr2 := nil;
while
(ptr2^.info.nim <> kuncihapus) do
begin
ptr1 := ptr2;
ptr2 := ptr2^.next;
end;
if
ptr1 = nil then
list := list^.next
else
ptr1^.next := ptr2^.next
dispose
(ptr2)
end;
Download script linkedlist
Program Pointer
Sekarang bagaimana menerapkan konsep FIFO(First In First Out) dan LIFO(Last In First Out) dalam satu program langsung sehingga saat program nanti di jalankan inputan yang dimasukkan user dapat menjadi pertama atau terakhir sesuai dengan menu yang ditentukan.
Gambar dibawah adalah proses inputan melalui MENU A. MENAMBAH SIMPUL BARU DI AWAL SENARAI, inputan ini menggunakan prosedur tambah_awal (bisa dicek pada script pascal diatas, bila kurang jelas. Klik kanan pada gambar->open new tab)
Gambar dibawah adalah proses inputan melalui MENU B. MENAMBAH SIMPUL BARU DI AKHIR SENARAI, inputan ini menggunakan prosedur tambah_akhir.
Gambar dibawah adalah hasil dari data yang di simpan pada memori sementara dengan cara memanggil MENU C. MENCETAK ISI SENARAI yang dimana scriptnya berada pada baca_senarai. Dapat dilihat perbedaan antara menu A yang akan menyisipkan data ke urutan awal(cth : Lionel Messi) dan menu B akan menyisipkan data ke urutan terakhir(cth : Komputer).
Download script program pointer
Catatan :
- Silahkan isi bagian kolom komentar apabila ada pertanyaan tentang 2 program di atas maupun mengenai linked list
- Laporan praktikum gunakan cover yang sudah saya sediakan
Sumber Referensi : diambil dari berbagai sumber dan Modul praktikum teknik informatika UNPAR cetakan 2014.
Maaf kak, mau tanya.
BalasHapuskak,untuk script hapus datanya satu-per-satu atau langsung semua,?
Maaf kk mau tanya apakah program ini tentang penyisipan dan penghapusan
BalasHapus