Selamat Datang Sobat Meycelino di Blog saya, semoga bermanfaat... Hari ini

Linked List Pada Pemrograman Pascal

Senin, 04 Mei 2015

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;

Linked list merupakan struktur data yang memiliki kelebihan dalam efisiensi memori dan kecepatan dalam menyisipkan data. Linked list berguna untuk menyimpan beberapa data dalam memori. Pada pemrograman pascal menyediakan prosedur standar untuk membuat dan menghapus sebuah variabel dinamis, yaitu new dan dispose. Jika P telah dideklarasikan sebagai sebuah variabel pointer bertipe node, maka pernyataan new(P) akan menciptakan sebuah variabel dinamis baru bertipe node dan menandai lokasinya dengan pointer P. Sedangkan pernyataan dispose(p) akan mengembalikan ruang yang digunakan pada lokasi yang ditunjuk P ke sistem komputer.

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.


2 komentar

  1. Maaf kak, mau tanya.
    kak,untuk script hapus datanya satu-per-satu atau langsung semua,?

    BalasHapus
  2. Maaf kk mau tanya apakah program ini tentang penyisipan dan penghapusan

    BalasHapus