SlideShare a Scribd company logo
1 of 3
SENARAI BERANTAI ( LINKED LIST )

         Cara lain untuk menyimpan sekumpulan data selain dengan menggunakan record
adalah dengan menggunakan bantuan tipe data pointer. Dalam hal ini, masing-masing data
dengan sebuah medan yang bertipe pointer perlu digunakan.
         Salah satu struktur data dinamis yang paling sederhana adalah Senarai Berantai
(Linked List). Yaitu kumpulan komponen (node) yang disusun secara berurutan dengan
menggunakan bantuan pointer. Node ini terbagi menjadi dua bagian yaitu bagian medan
informasi, yang berisi informasi yang akan disimpan atau diolah dan bagian penyambung (link
field), yang berisi alamat simpul selanjutnya.

Operasi Pada Senarai Berantai :

Inisialisasi, yakni mengisi variabel senarai berantai.
Misalnya digunakan deklarasi sebagai berikut
type
        TipeData = integer ;
        TipeSenarai = ˆRecordSenarai ;
        RecordSenarai = record
                data : integer ;
                next : TipeSenarai ;
        end;
var
        senaraiku : TipeSenarai ;

Contoh prosedur inisialisasi
procedure inisialisasi (var senarai : TipeSenarai ) ;
begin
       senarai := NIL;
end;

Menambah simpul baru pada ekor.
Contoh prosedurnya
procedure tambahSimpul (baru : TipeData ; var senarai : TipeSenarai ) ;
var
         pBaru, ekor: TipeSenarai;
begin
         ekor := senarai;

         if ekor <> NIL then
         begin
           new(pBaru);
           pBaru^.data := baru;
           pBaru^.next := nil;

            while ekor^.next <> NIL do
              ekor := ekor^.next ;

           ekor^.next := pBaru;
         end
         else
         begin
           new(senarai) ;
           senarai^.data := baru;
           senarai^.next := nil;
         end;
end;

       Sewaktu menambah atau menghapus suatu simpul, pointer yang simpul tersebut
haruslah telah dipegang. Dalam one way-list biasanya yang perlu dipegang adalah pointer
sebelum simpul tersebut.
Ide penambahan simpul dalam prosedur tambahSimpul di atas adalah memeriksa ekor
apakah bernilai NIL. Jika tidak, berarti senarai yang akan ditambah simpulnya berada pada
keadaan inisialisasi (masih kosong), sedangkan jika ya, berarti senarai tersebut tidak lagi
kosong.
Jika senarai tersebut tidak kosong, maka dicari letak ekornya (dengan memeriksa apakah
simpul setelah simpul yang diamati bernilai NIL).
        Setelah itu dibangun simpul baru dan digandengkan ke senarai. Sekarang ekor senarai
tersebut adalah simpul baru yang belum menunjuk apapun sedangkan jika tidak kosong,
maka cukup bangun sebuah simpul sebagai ekor. Setelah itu isi field data ekor dengan data
baru dan field next-nya dengan NIL.

Menyisipkan simpul baru.
          Jika urutan data yang disimpan tidak dipermasalahkan maka prosedur tambahNode()
di atas sudah mencukupi untuk menyimpan data. Namun jika urutan data menjadi penting
(misalnya terurut ascending) maka prosedur penyisipan data pada lokasi yang tepat menjadi
diperlukan
Contoh prosedurnya
procedure sisipSimpul ( baru : TipeData ; var senarai : TipeSenarai ) ;
var p , pBaru : TipeSenarai ;
begin
          if senarai = NIL then
          begin
                  new(senarai) ;
                  senaraiˆ.data := baru ;
                  senaraiˆ.next := NIL;
          end
          else
          begin
                  new(pBaru) ;
                  pBaruˆ.data := baru ;
                  pBaruˆ.next := NIL;
                  if baru < senaraiˆ.data then
                  begin
                         pBaruˆ.next := senarai ;
                         senarai := pBaru ;
                  end
                  else
                  begin
                         p := senarai ;
                         while (pˆ.next <> NIL) and (baru > pˆ.nextˆ.data ) do
                                 p := pˆ.next ;
                         pBaruˆ.next := pBaru ;
                  end;
          end;
end;
          Dalam menyisipkan simpul baru ada tiga kemungkinan
i. Senarai dalam keadaan kosong —buat simpul baru
ii. Sisip di depan — arahkan ‘next’ simpul baru ke senarai lalu belokkan senarai ke simpul
baru.
iii. Sisip di tangah/belakang — dapatkan simpul yang tepat sebelum simpul baru akan
disisipkan, lalu arahkan ‘next’ simpul baru ke ‘next’ simpul tersebut kemudian arahkan ‘next’
simpul tersebut ke pointer baru.

Menghapus simpul yang berisi data tertentu
(a) Contoh prosedurnya
procedure hapusSimpul ( data : TipeData ; var senarai : TipeSenarai ) ;
var
        p , q : TipeSenarai ;
        d : TipeData ;
begin
        if senarai <> NIL then
begin
               p := senarai ;
               if senaraiˆ.data = data then
               begin
                      senarai := senaraiˆ.next ;
                      dispose (p);
               end
               else
               begin
                      while (pˆ.next <> NIL) and (pˆ.nextˆ.data <> data ) do
                             p := pˆ.next ;
                      if pˆ.next <> NIL then
                      begin
                             q := pˆ.next ;
                             pˆ.next := qˆ.next ;
                             dispose (q) ;
                      end;
               end;
          end;
end;
Ada tiga kemungkinan dalam menghapus simpul
i. List kosong —tidak terjadi apa-apa.
ii. Hapus simpul di depan — pertama simpan senarai ke dalam pointer bantu lalu arahkan list
    ke ‘next’ senarai dan dispose pointer bantu.
iii. Hapus simpul di tengah/belakang — mirip dengan hapus simpul di depan, hanya saja
    pointer yang digunakan berasal dari simpul lain yang memiliki pointer ke simpul tersebut.

Menghapus seluruh isi senarai.
       Dalam program yang baik, memori dibersihkan terlebih dahulu sebelum
program berhenti.
Contoh prosedurnya
procedure selesai (var senarai : TipeSenarai ) ;
var p : TipeSenarai ;
begin
       while senarai <> NIL do
       begin
              p := senarai ;
              senarai := senaraiˆ.next ;
              dispose (p);
       end;
end;

More Related Content

Similar to Senarai berantai

Similar to Senarai berantai (7)

Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3
 
Tistrukdat7
Tistrukdat7Tistrukdat7
Tistrukdat7
 
Sd bab 8a (senarai)
Sd bab 8a (senarai)Sd bab 8a (senarai)
Sd bab 8a (senarai)
 
DOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docxDOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docx
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circular
 
Tistrukdat6
Tistrukdat6Tistrukdat6
Tistrukdat6
 
Linked list
Linked listLinked list
Linked list
 

Senarai berantai

  • 1. SENARAI BERANTAI ( LINKED LIST ) Cara lain untuk menyimpan sekumpulan data selain dengan menggunakan record adalah dengan menggunakan bantuan tipe data pointer. Dalam hal ini, masing-masing data dengan sebuah medan yang bertipe pointer perlu digunakan. Salah satu struktur data dinamis yang paling sederhana adalah Senarai Berantai (Linked List). Yaitu kumpulan komponen (node) yang disusun secara berurutan dengan menggunakan bantuan pointer. Node ini terbagi menjadi dua bagian yaitu bagian medan informasi, yang berisi informasi yang akan disimpan atau diolah dan bagian penyambung (link field), yang berisi alamat simpul selanjutnya. Operasi Pada Senarai Berantai : Inisialisasi, yakni mengisi variabel senarai berantai. Misalnya digunakan deklarasi sebagai berikut type TipeData = integer ; TipeSenarai = ˆRecordSenarai ; RecordSenarai = record data : integer ; next : TipeSenarai ; end; var senaraiku : TipeSenarai ; Contoh prosedur inisialisasi procedure inisialisasi (var senarai : TipeSenarai ) ; begin senarai := NIL; end; Menambah simpul baru pada ekor. Contoh prosedurnya procedure tambahSimpul (baru : TipeData ; var senarai : TipeSenarai ) ; var pBaru, ekor: TipeSenarai; begin ekor := senarai; if ekor <> NIL then begin new(pBaru); pBaru^.data := baru; pBaru^.next := nil; while ekor^.next <> NIL do ekor := ekor^.next ; ekor^.next := pBaru; end else begin new(senarai) ; senarai^.data := baru; senarai^.next := nil; end; end; Sewaktu menambah atau menghapus suatu simpul, pointer yang simpul tersebut haruslah telah dipegang. Dalam one way-list biasanya yang perlu dipegang adalah pointer sebelum simpul tersebut.
  • 2. Ide penambahan simpul dalam prosedur tambahSimpul di atas adalah memeriksa ekor apakah bernilai NIL. Jika tidak, berarti senarai yang akan ditambah simpulnya berada pada keadaan inisialisasi (masih kosong), sedangkan jika ya, berarti senarai tersebut tidak lagi kosong. Jika senarai tersebut tidak kosong, maka dicari letak ekornya (dengan memeriksa apakah simpul setelah simpul yang diamati bernilai NIL). Setelah itu dibangun simpul baru dan digandengkan ke senarai. Sekarang ekor senarai tersebut adalah simpul baru yang belum menunjuk apapun sedangkan jika tidak kosong, maka cukup bangun sebuah simpul sebagai ekor. Setelah itu isi field data ekor dengan data baru dan field next-nya dengan NIL. Menyisipkan simpul baru. Jika urutan data yang disimpan tidak dipermasalahkan maka prosedur tambahNode() di atas sudah mencukupi untuk menyimpan data. Namun jika urutan data menjadi penting (misalnya terurut ascending) maka prosedur penyisipan data pada lokasi yang tepat menjadi diperlukan Contoh prosedurnya procedure sisipSimpul ( baru : TipeData ; var senarai : TipeSenarai ) ; var p , pBaru : TipeSenarai ; begin if senarai = NIL then begin new(senarai) ; senaraiˆ.data := baru ; senaraiˆ.next := NIL; end else begin new(pBaru) ; pBaruˆ.data := baru ; pBaruˆ.next := NIL; if baru < senaraiˆ.data then begin pBaruˆ.next := senarai ; senarai := pBaru ; end else begin p := senarai ; while (pˆ.next <> NIL) and (baru > pˆ.nextˆ.data ) do p := pˆ.next ; pBaruˆ.next := pBaru ; end; end; end; Dalam menyisipkan simpul baru ada tiga kemungkinan i. Senarai dalam keadaan kosong —buat simpul baru ii. Sisip di depan — arahkan ‘next’ simpul baru ke senarai lalu belokkan senarai ke simpul baru. iii. Sisip di tangah/belakang — dapatkan simpul yang tepat sebelum simpul baru akan disisipkan, lalu arahkan ‘next’ simpul baru ke ‘next’ simpul tersebut kemudian arahkan ‘next’ simpul tersebut ke pointer baru. Menghapus simpul yang berisi data tertentu (a) Contoh prosedurnya procedure hapusSimpul ( data : TipeData ; var senarai : TipeSenarai ) ; var p , q : TipeSenarai ; d : TipeData ; begin if senarai <> NIL then
  • 3. begin p := senarai ; if senaraiˆ.data = data then begin senarai := senaraiˆ.next ; dispose (p); end else begin while (pˆ.next <> NIL) and (pˆ.nextˆ.data <> data ) do p := pˆ.next ; if pˆ.next <> NIL then begin q := pˆ.next ; pˆ.next := qˆ.next ; dispose (q) ; end; end; end; end; Ada tiga kemungkinan dalam menghapus simpul i. List kosong —tidak terjadi apa-apa. ii. Hapus simpul di depan — pertama simpan senarai ke dalam pointer bantu lalu arahkan list ke ‘next’ senarai dan dispose pointer bantu. iii. Hapus simpul di tengah/belakang — mirip dengan hapus simpul di depan, hanya saja pointer yang digunakan berasal dari simpul lain yang memiliki pointer ke simpul tersebut. Menghapus seluruh isi senarai. Dalam program yang baik, memori dibersihkan terlebih dahulu sebelum program berhenti. Contoh prosedurnya procedure selesai (var senarai : TipeSenarai ) ; var p : TipeSenarai ; begin while senarai <> NIL do begin p := senarai ; senarai := senaraiˆ.next ; dispose (p); end; end;