LIST LINIER 1. DEFINISI

dokumen-dokumen yang mirip
List Linier. IF2030/Algoritma dan Struktur Data. 11/6/2009 FNA+WDS/IF2030/Sem

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

Representasi Logic List Linier

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Variasi List Linier (Bagian 2)

Bagian I. Studi Kasus [82] Tanda tangan:

Struktur Data. Queue (Antrian)

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Stack (Tumpukan)

IKG2A3/ Pemrograman Terstruktur 2

Array (Tabel) Tim Pengajar KU1071 Sem /11/3 TW/KU1071 1

Pencarian pada Array. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

PENGULANGAN SKEMA PEMROSESAN SEKUENSIAL. Tim Pengajar KU1071 Sem

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Variasi List Linier

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Queue (Antrian)

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Mesin Abstrak

QUEUE Antrian 1. DEFINISI

MODUL PRAKTIKUM PERCABANGAN DAN PENGULANGAN

Kode : IF2121 NIM :... Matakuliah : Algoritma dan Struktur Data Nama :... Hari, Tanggal : Senin, 13 November 2017 Waktu : 150 Menit

STRUKTUR DATA. Pengajar Jaidan Jauhari,, MT. Alamat Halaman 1

STRUKTUR DATA. Pengajar Jaidan Jauhari,, MT. Alamat Halaman 1

A. Bagian I. Studi Kasus

BAB II STACK Atau TUMPUKAN

Algoritma dan Pemrograman Array/Tabel[2] Oleh: Eddy Prasetyo N

Variasi List Linier. Nisa ul Hafidhoh, MT

LATIHAN UTS Tim Pengajar KU1071 Sem

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

BAB XI Manipulasi Binary Tree

CCH1A4 / Dasar Algoritma & Pemrogramanan

ALGORITMA & PEMROGRAMAN

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Tree (Pohon)

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Array. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

BAB IX LINKED LIST (SENARAI BERANTAI)

Optimalisasi Algoritma Pencarian Data Memanfaatkan Pohon Biner Terurut

SEARCHING. Pusat Pengembangan Pendidikan Universitas Gadjah Mada 1

BAB 1 PENGANTAR KE STRUKTUR DATA

PENGULANGAN. Ada lima macam notasi pengulangan: 1. Berdasarkan jumlah pengulangan. repeat n times

Mesin Karakter dan Mesin Kata

Kode MK/ Pemrograman Terstruktur 2

DIKTAT KULIAH STRUKTUR DATA. Disusun oleh: Sri Primaini A.

GANJIL 2009/2010 NIM: Algoritma dan Struktur Data / CS2014 Nama :

A B C D E F. Gambar 1. Senarai berantai dengan 6 simpul

Linked List. Bandung 2013

A. Bagian I. Studi Kasus [82]

4 LINKED LIST. 4.1 Istilah-istilah 1. Simpul Simpul terdiri dari dua bagian, yaitu : Bagian data Bagian pointer yang menunjuk ke simpul berikutnya.

{ Kamus Umum } constant IdxMax : integer = 100 constant IdxMin : integer = 1 constant IdxUndef : integer = -999 { indeks tak terdefinisi}

ARRAY DINAMIS. Type. Pengenal = Simpul Simpul = Type. (Nama var) : ( Type data)

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

Menghapus Pointer Statement yang digunakan untuk menghapus pointer adalah Dispose, yang mempunyai bentuk umum : Dispose(peubah) ;

Lab. Teknik Informatika Struktur Data 1

Identitas dosen POKOK BAHASAN. Struktur Pengulangan. proses perhitungan dan mengulang. perhitungan PENGULANGAN PENGULANGAN. Suherman,, ST Address

PERULANGAN P E N G A N TA R P R O G R A M S T U D I. Institut Teknologi Sumatera

Algoritma & Pemrograman

TOPOLOGICAL SORT dengan DFS dan METODE LAIN

Array (Tabel) bagian 2

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

MODUL 6 SINGLE & DOUBLE LINKED LIST

Pohon Biner. Tim Pengajar IF2030 Semester I/ /8/2009 FNA/IF2030/Sem

SENARAI BERANTAI (LINK LIST)

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

Array dan Matriks. IF2121 / Algoritma dan Struktur Data Sem / /7/2017 IF2121/sem /2018 1

MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: Senarai, Traversal

LINKED LIST. Altien Jonathan Rindengan, S.Si, M.Kom

TYPE. Inggriani Liem : Catatan Kuliah Algoritma & Pemrograman, Jurusan teknik Informatika - ITB TYPE.doc/TYPE- 21/08/03 16:04

PENGANTAR KOMPUTER & SOFTWARE II

Mesin Abstrak. Tim Pengajar KU1071 Sem

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Pohon Biner (Bagian 1)

1 Pencarian. 1.1 Tinjauan Singkat Larik

Algoritma dan Pemrograman. Oleh: Eddy Prasetyo N

Algoritma dan Pemrograman Searching/Pencarian

HARGA & EKSPRESI Input dan Output

3. DOUBLE LINK LIST. Lab. Teknik Informatika Struktur Data 1

CCH1A4 / Dasar Algoritma & Pemrogramanan

FUNGSI. {deretan instruksi algoritmik : pemberian harga, input, output, analisa kasus, pengulangan)

Pembahasan Kuis. KU1071/Pengantar Teknologi Informasi A Sem /2011

SEQUENTIAL SEARCH 11/11/2010. Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut

LIST. Dewi Sartika, M.Kom

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

Outline. Ekuivalensi Notasi Algoritmik Dengan ETNA. Struktur Umum

Games and Quiz PT II. Dr. Putu Harry Gunawan, MSi.,MSc. phg-simulation-laboratory.com

c. Hasil pencarian berupa nilai Boolean yang menyatakan status hasil pencarian. Versi 1 (Pembandingan elemen dilakukan sebagai kondisi pengulangan)

Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String)

Pencarian. 1. Memahami konsep pencarian 2. Mengenal beberapa algoritma pencarian 3. Menerapkan algoritma pencarian dalam program

MATRIKS. Dapat disimpan secara linier dan kontigu dengan dua alternatif sebagai berikut : a. Per baris

Analisis Perbandingan Algoritma Rekursif dan Non-Rekursif secara DFS (Depth First Search) dengan Memanfaatkan Graf

RESUME A B C D. Gambar 1 Double Linked list dengan Empat Simpul

BAB VI SEARCHING (PENCARIAN)

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

Penerapan Pohon Untuk Memanipulasi dan Meritrieve Data

: Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Linked List. Single Linked List

PENGANTAR KOMPUTER & SOFTWARE II

Senarai berantai. linked list. Pertemuan keenam Struktur data st3telkom.ac.id. by : tenia wahyuningrum & Sisilia Thya Safitri

Algoritma dan Struktur Data. Pertemuan 7 Linked List

Modul 1 Mesin Karakter 1

2 ATURAN PENULISAN TEKS ALGORITMA

SILABUS MATAKULIAH. Indikator Pokok Bahasan/Materi Aktifitas Pembelajaran

LOGO STRUKTUR DATA QUEUE

Transkripsi:

LIST LINIER 1. DEFINISI List linier adalah sekumpulan elemen bertype sama, yang mempunyai keterurutan tertentu, dan setiap elemennya terdiri dari dua bagian, yaitu informasi mengenai elemennya, dan informasi mengenai alamat elemen suksesornya : type ElmtList : < Info : InfoType, Next :address> dengan InfoType adalah sebuah type terdefinisi yang menyimpan informasi sebuah elemen list; Next adalah address ("alamat") dari elemen berikutnya (suksesor). Dengan demikian, jika didefinisikan adalah alamat elemen pertama list, maka elemen berikutnya dapat diakses secara suksesif dari field Mext elemen tersebut Alamat yang sudah didefinisikan disebut sudah di-alokasi. Didefinisikan suatu konstanta Nil, yang artinya alamat yang tidak terdefinisi. Alamat ini nantinya akan didefinisikan secara lebih konkret ketika list linier diimplementasi pada struktur data fisik Address @ ElmtList Nil Info Next Jadi, sebuah list linier dikenali : elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut : alamat elemen berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen, yang dapat diakses melalui informasi NEXT. NEXT mungkin ada secara eksplisit (seperti contoh di atas), atau secara implisit yaitu lewat kalkulasi atau fungsi suksesor. setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat diacu. Untuk mengacu sebuah elemen, alamat harus terdefinisi. Dengan alamat tersebut Informasi yang tersimpan pada elemen list dapat diakses. elemen terakhirnya. Ada berbagai cara untuk mengenali elemen akhir Jika L adalah list, dan adalah address: Alamat elemen pertama list L dapat diacu dengan notasi : (L) Elemen yang diacu oleh dapat dikonsultasi informasinya dengan notasi Selektor : Info() Next() Beberapa definisi : - List L adalah list kosong, jika (L) = Nil - Elemen terakhir dikenali, misalnya jika Last adalah alamat element terakhir, maka Next(Last) =Nil Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 1

Biasanya list linier paling sederhana digambarkan dengan ilustrasi sebagai berikut List dengan elemen List Kosong II. Skema traversal untuk list linier List adalah koleksi objek, yang terdiri dari sekumpulan elemen. Seringkali diperlukan proses terhadap setiap elemen list dengan cara yang sama. Karena itu salah satu primitif operasi konsultasi dasar pada struktur list adalah traversal, yaitu mengunjungi setiap elemen list untuk diproses. Karena definisi list linier, urutan akses adalah dari elemen pertama sampai dengan elemen terakhir, maka traversal list secara natural dilakukan dari elemen pertama, suksesornya, dan seterusnya sampai dengan elemen terakhir. Skema traversal yang dipakai adalah skema yang telah dipelajari pada Bagian I. rocedure SKEMAListTraversal1 (Input L : List) { I.S. List L terdefinisi, mungkin kosong } {F.S. semua elemen list L "dikunjungi" dan telah diproses } { Traversal sebuah list linier. Dengan MARK, tanpa pemrosesan khusus pada list kosong } : address {address untuk traversal, type terdefinisi} procedure roses (Input : address ){pemrosesan elemen beraddress } procedure Inisialisasi { aksi sebelum proses dilakukan } procedure Terminasi { aksi sesudah semua pemrosesan elemen selesai } Inisialisasi (L) while ( Nil) do roses () Next() Terminasi Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 2

rocedure SKEMAListTraversal2 (Input L: List) { I.S. List L terdefinisi, mungkin kosong } {F.S. semua elemen list L "dikunjungi" dan telah diproses } { Traversal sebuah list linier yang diidentifikasi oleh elemen pertamanya L} {Sekam sekuensial dengan MARK dan pemrosesan khusus pada list kosong } : address {address untuk traversal } procedure roses ( Input : address ){pemrosesan elemen ber-address } procedure Inisialisasi { aksi sebelum proses dilakukan } procedure Terminasi { aksi sesudah semua pemrosesan elemen selesai } if (L) = Nil then output ('List kosong') else Inisialisasi (L) repeat roses () Next() until ( = Nil) Terminasi rocedure SKEMAListTraversal(Input L : List) { I.S. List L terdefinisi, tidak kosong : minimal mengandung satu elemen} {F.S. semua elemen list L "dikunjungi" dan telah diproses } { Skema sekuensial tanpa MARK, tidak ada list kosong karena tanpa mark} : address {address untuk traversal, type terdefinisi} procedure roses ( Input : address ){pemrosesas elemen ber-address } procedure Inisialisasi { aksi sebelum proses dilakukan } procedure Terminasi { aksi sesudah semua pemrosesan elemen selesai } Inisialisasi (L) iterate roses () stop Next() = Nil Next() Terminasi III. Skema Sequential Search untuk list linier Selain traversal, proses pencarian suatu elemen list adalah primitif yang seringkali didefinisikan pada struktur list. encarain dapat berdasarkan nilai, atau berdasarkan alamat. Skema pencarian yang ditulis adalah skema pencarian berdasarkan pencarian pada tabel. III.1. Search suatu Nilai, output adalah address Search ini sering dipakai untuk mengenali suatu elemen list berdasarkan nilai informasi yang disimpan pada elemen yang dicari. Biasanya dengan alamat yang ditemukan, akan dilakukan suatu proses terhadap elemen list tersebut. Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB

rocedure SKEMAListSearch1(Input L : List, X : InfoType, (Output :address, Found:boolean) {I.S. List linier L sudah terdefinisi dan siap dikonsultasi, X terdefinisi } {F.S. :address pada pencarian beurutan, dimana X diketemukan, = Nil jika tidak ketemu} {Found berharga true jika harga X yang dicari ketemu, false jika tidak} { Seq.Search harga X pd sebuah list linier L } {Elemen diperiksa dengan instruksi yang sama, versi dengan boolean } (L) Found false while ( Nil) and (not Found) do if X = Info() then Found true else Next() { = Nil or Found} { jika Found maka adalah address dimana harga yg dicari diketemukan} { jika not Found maka = Nil } rocedure SKEMAListSearch2(Input L : List, X : InfoType, Output :address, Found:boolean) {I.S. List linier L sudah terdefinisi dan siap dikonsultasi, X terdefinisi } {F.S. :address pada pencarian beurutan, dimana X diketemukan, = Nil jika tidak ketemu} {Found berharga true jika harga X yang dicari ketemu, false jika tidak} { Sequential Search harga X pada sebuah list linier L } { Elemen terakhir diperiksa secara khusus, versi tanpa boolean} { List linier L sudah terdefinisi dan siap dikonsultasi } if ((L)=Nil) then output ('List kosong') else { (L) Nil, suksesor elemen pertama ada } (L) while (Next() Nil) and (X Info()) do Next() { Next() = Nil or X = Info()} depend on, X X = Info() : Found true X Info() : Found false ; Nil Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 4

III.2. Search suatu Elemen yang beralamat tertentu Search ini sering dipakai untuk memposisikan "current pointer" pada suatu elemen list. rocedure SKEMAListSearch@(Input L : List, : address, (Output Found:boolean) {I.S. List linier L sudah terdefinisi dan siap dikonsultasi, terdefinisi } {F.S. Jika ada elemen list yang beralamat, Found berharga true} { Jika tidak ada elemen list beralamat, Found berharga false} { Seq.Search @ pada sebuah list linier L } {Semua elemen diperiksa dengan instruksi yang sama } t : address t (L) Found false while (t Nil) and (not Found) do if t = then Found true else t Next(t) { t = Nil or Found} {jika Found maka adalah elemen list } III.2. Search suatu Elemen dengan KONDISI tertentu rocedure SKEMAListSearchX (Input L : List, Kondisi (): boolean, (Output :address, Found:boolean) {I.S. List linier L sudah terdefinisi dan siap dikonsultasi, Kondisi() adalah suatu ekspresi boolean yang merupakan fungsi dari elemen beralamat } {F.S. Jika ada elemen list yang memenuhi Kondisi (), maka adalah alamat dari elemen yang memenuhi kondisi tsb, Found berharga true} {Jika tidak ada elemen list yang memenuhi Kondisi(), maka Found berharga false dan adalah Nil} {Semua elemen diperiksa dengan instruksi yang sama } : address {list linier L sudah terdefinisi dan siap dikonsultasi } (L) Found false while ( Nil) and (not Found) do if Kondisi() then Found true else Next() { t= Nil or Found} { jika Found maka adalah elemen list dengan Kondisi() true} Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 5

Contoh : - Kondisi() adalah elemen list dengan Info() bernilai 5, maka ekspresi adalah Info()=5 - Kondisi() adalah elemen terakhir, berarti ekspresi Kondisi() adalah Next()= Nil - Kondisi() adalah elemen sebelum terakhir, berarti ekspresi Kondisi() adalah : Next(Next()) = Nil - Kondisi() adalah elemen sebelum elemen beralamat X, berarti ekspresi Kondisi() adalah Next(X) = IV. Definisi fungsional list linier dan algoritmanya : Secara fungsional, pada sebuah list linier biasanya dilakukan pembuatan, penambahan, perubahan atau penghapusan elemen atau proses terhadap keseluruhan list, yang dapat ditulis sebagai berikut : Diberikan L, L1 dan L2 adalah list linier dengan elemen ElmtList ListEmpty : L boolean {test apakah list kosong} CreateList : L { Membentuk sebuah list linier kosong} Insert : ElmtList x L L{ Menyisipkan sebuah elemen ke dalam list } Delete : L L x ElmtList { Menghapus sebuah elemen list } UpdateList : ElmtList x L L {Mengubah informasi sebuah elemen list linier } Concat : L1 x L2 L { Menyambung L1 dengan L2 } Dari definisi fungsional tersebut, dapat diturunkan fungsi-fungsi lain. UpdateList tidak dibahas di sini, karena dapat dilakukan dengan skema search, kemudian mengubah info. Mengisi elemen sebuah list tidak dibahas di sini, karena dapat dijabarkan dari penyisipan satu per satu elemen list yang dibaca dari sebuah arsip atau dari alat masukan. Berikut ini hanya akan dibahas enyisipan, enghapusan dan Konkatenasi. IV.2 embuatan sebuah elemen pada list linier IsEmptyList : L boolean { Test apakah sebuah list kosong} emeriksaan apakah sebuah list kosong sangat penting, karena I.S. dan F.S. beberapa prosedur harus didefinisikan berdasarkan keadaan list. Operasi pada list kosong seringkali membutuhkan penanganan khusus Realisasi algoritmik dari definisi fungsional ini adalah sebuah fungsi sebagai berikut. function IsEmptyList (L :List) boolean { Test apakah sebuah list L kosong. Mengirimkan true jika list kosong, false jika tidak kosong } (L) = Nil IV.2 embuatan sebuah elemen pada list linier CreateList : L { Membentuk sebuah list linier kosong} embuatan sebuah list berarti membuat sebuah list KOSONG, yang selanjutnya siap diproses (diditambah elemennya, dsb). Realisasi algoritmik dari definisi fungsional ini adalah sebuah prosedur sebagai berikut. Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 6

procedure CreateList (Output L :List) { I.S. sembarang} {F.S. terbentuk list L yang kosong : (L) diinisialisasi dengan NIL } (L) Nil IV. enyisipan sebuah elemen pada list linier Insert : ElmtList x L L { Menyisipkan sebuah elemen ke dalam list } Fungsi insert (penyisipan) harus dijabarkan lebih rinci, karena dapat menjadi penyisipan sebagai elemen pertama, setelah sebuah address atau penyisipan menjadi elemen terakhir. Berikut ini akan diberikan skema prosedur penyisipan yang diturunkan dari definisi fungsional tersebut. enyisipan sebuah elemen dapat dilakukan terhadap sebuah elemen yang sudah dialokasi (diketahui address-nya), atau sebuah elemen yang hanya diketahui nilai Info-nya (berarti belum dialokasi). erhatikanlah perbedaan ini pada realisasi primitif. IV.2.1 INSERT- Menambahkan sebuah elemen yang diketahui alamatnya sebagai elemen pertama list. Insert elemen pertama, List kosong : Insert elemen pertama, List tidak kosong : Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 7

procedure Insert (Input/Output L :List, Input : address) { I.S. List L mungkin kosong, sudah dialokasi, Nil, Next()=Nil } {F.S. adalah elemen pertama list L } { Insert sebuah elemen beralamat sbg elmt pertama list linier L yang mungkin kosong} Next() (L) (L) IV.2.1 INSERT- Menambahkan sebuah elemen yang diketahui nilainya sebagai elemen pertama list. Tahap pertama : Insert Nilai sebagai elemen pertama, List : karena yang diketahui adalah nilai, maka harus dialokasikan dahulu sebuah elemen supaya nilai dapat di-insert Jika alokasi berhasil, tidak sama dengan Nil Tahap kedua : insert Insert ke list kosong Insert elemen pertama, List tidak kosong : 5 7 5 7 Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 8

procedure Ins (Input/Output L :List, Input InfoE: infotype) { I.S. List L mungkin kosong } {F.S. Sebuah elemen dialokasi dan menjadi elemen pertama list L, jika alokasi berhasil. Jika alokasi gagal list tetap seperti semula } { Insert sebuah elemen sbg elmt pertama list linier L yang mungkin kosong} Function Alokasi(X:infotype) :address; {Menghasilkan address yang dialokasi. Jika alokasi berhasil, Info()=InfoE, dan Next()=Nil. Jika alokasi gagal, =Nil} :address {perhatikan: adalah variabel lokal! Akan dibahas di kelas } Alokasi(InfoE) if Nil then Next() (L);(L) IV.2.2. INSERT-AFTER : menyisipkan sebuah elemen beralamat setelah sebagai suksesor dari sebuah elemen list linier yang beralamat rec rec rec procedure Insert-After (Input,rec: address) { I.S. rec adalah elemen list, rec Nil, sudah dialokasi, Nil, Next()=Nil } {F.S. menjadi suksesor rec } { Insert sebuah elemen beralamat pada List Linier L } Next() Next(rec) Next(rec) Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 9

IV.2.. INSERT-Last Menyisipkan sebuah elemen beralamat setelah sebagai elemen terakhir sebuah list linier. Ada dua kemungkinan list kosong atau tidak kosong Insert sebagai elemen terakhir list tidak kosong Insert sebagai elemen terakhir list tidak kosong: Last Last procedure Insert-Last (Input/Output L:List, Input : address) { I.S. List L mungkin kosong, sudah dialokasi, Nil, Next()=Nil } {F.S. adalah elemen trerakhir list L } {Insert sebuah elemen beralamat sbg elemen terakhir dari list linier L yg mungkin kosong} Kamus Last : address {address untuk traversal, pada akhirnya address elemen terakhir} if (L)=Nil then { insert sebagai elemen pertama } Insert (L,) else { Traversal list sampai address terakhir } {Bagaimana menghindari traversal list untuk mencapai last?} Last (L) while (Next(Last ) Nil) do Last Next(Last) {Next(Last) = Nil, Last adalah elemen terakhir; Insert after Last} Insert-After(,Last) Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 10

procedure InsLast (Input/Output L:List, Input InfoE : Infotype) { I.S. List L mungkin kosong } {F.S. Jika alokasi berhasil, InfoE adalah nilai elemen trerakhir list L } { Jika alokasi gagal, maka F.S. = I.S. } {Insert sebuah elemen beralamat (jika alokasi berhasil) sbg elemen terakhir dari list linier L yg mungkin kosong} Kamus Function Alokasi(X:infotype) :address; {Menghasilkan address yang dialokasi. Jika alokasi berhasil, Info()=InfoE, dan Next()=Nil. Jika alokasi gagal, =Nil} : address; Alokasi(InfoE) if Nil then {insert sebagai elemen pertama } InsertLast (L,) IV.. enghapusan sebuah elemen pada list linier Delete:L L x ElmtList { Menghapus sebuah elemen dalam list } enghapusan harus dijabarkan lebih rinci, karena penghapusan elemen dapat merupakan pertama, setelah sebuah address atau penghapusan elemen terakhir. erbedaan ini melahirkan tiga operasi dasar penghapusan elemen list yang diturunkan dari definisi fungsional ini menjadi realisasi algoritmik, yaitu penghapusan elemen pertama, di tengah dan terakhir. Operasi penghapusan dapat mengakibatkan list menjadi kosong, jika list semula hanya terdiri dari satu elemen. IV..1. DELETE : menghapus elemen pertama list linier a. Elemen yang dihapus dicatat alamatnya : Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 11

procedure Delete (Input/Output L : List, Output : address) {I.S : List L tidak kosong, minimal 1 elemen, elemen pertama pasti ada } {F.S : maju, mungkin bernilai Nil (list menjadi kosong) } { Menghapus elemen pertama L, adalah @ elemen pertama L sebelum penghapusan, L yang baru adalah Next(L) } (L) (L) Next ((L)) {erhatikan bahwa tetap benar jika list menjadi kosong } b. Elemen yang dihapus dicatat informasinya, dan alamat elemen yang dihapus didealokasi : procedure Delete (Input/Output L : List, Output E: infotype) {I.S : List L tidak kosong, minimal 1 elemen, elemen pertama pasti ada } {F.S : Menghapus elemen pertama L E adalah nilai elemen pertama L sebelum penghapusan, L yang baru adalah Next(L) } void DeAlokasi (Input :address); { I.S. pernah dialokasi. F.S : =Nil} {Mengembalikan address yang pernah dialokasi. =Nil} : address (L) E Info() (L) Next ((L)) {List kosong : (L) menjadi Nil } Dealokasi () IV..2. DeleteAfter : enghapusan suksesor sebuah elemen : rec rec Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 12

procedure DeleteAfter (Input rec : address, Output :address) {I.S : List tidak kosong, rec adalah elemen list, Next(rec) Nil} {F.S : Next(rec), yaitu elemen beralamat dihapus dari List. Next()=Nil} {Menghapus suksesor rec, adalah @ suksesor rec sebelum penghapusan, Next(rec) yang baru adalah suksesor dari suksesor rec sebelum penghapusan } Next(rec) Next(rec) Next(Next(rec)) Next() Nil; Dengan primitif ini, maka penghapusan sebuah elemen beralamat dapat dilakukan dengan : - mencari predesesor dari, yaitu alamat rec - memakai DELETEAfter(rec) procedure Delete (Input/Output L:List, Output : address) {I.S : List L tidak kosong, adalah elemen list L } {F.S : Menghapus dari list., mungkin elemen pertama, "tengah" atau terakhir } rec : address; { alamat predesesor } { Cari predesesor } if ( = (L)) then { Delete list dengan satu elemen } DELETE(L,) else rec (L) while (Next(rec) ) do rec Next (rec) { Next(rec) =, hapus } DELETEAfter(rec,) IV... DELETELast : Menghapus elemen terakhir list dapat dilakukan jika alamat dari eemen sebelum elemen terakhir diketahui. ersoalan selanjutnya menjadi persoalan DELETEAFTER, kalau Last bukan satu-satunya elemen list linier. Ada dua kasus, yaitu list menjadi kosong atau tidak. Kasus list menjadi kosong : Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 1

List tidak menjadi kosong (masih mengandung elemen) : Last Last procedure DeleteLast (Input Fisrt : List, Output : address) {I.S : List L tidak kosong, minimal mengandung 1 elemen} {F.S : berisi alamat elemen yang dihapus. Next()=Nil. List berkurang elemennya} { Menghapus elemen terakhir dari list., list mungkin menjadi kosong } Last, reclast : address {address untuk traversal, type terdefinisi} } {pd akhirnya Last adalah alamat elemen terakhir dan reclast adalah alamat sebelum yg terakhir } { Find Last dan address sebelum last } Last (L) reclast Nil { predesesor dari L tak terdefinisi } while (Next(Last ) Nil) do { Traversal list sampai@ terakhir } reclast Last; Last Next(Last) {Next(Last)= Nil,Last adalah elemen terakhir; reclast = sebelum Last} Last if reclast = Nil then {list dg 1 elemen, jadi kosong } (L) Nil else Next(recLast) Nil Catatan: Operasi delete yang tidak melakukan dealokasi address, ditawarkan jika address tersebut masih dibutuhkan. Misalnya elemen yang dihapus akan dijadikan anggota elemen list lain: dalam hal ini tidak perlu melakukan dealokasi, kemudian alokasi ulang ketika akan ditambahkan ke list yang baru. Beberapa list dengan elemen sejenis seringkali harus dikelola dalam program; misalnya list mahasiswa per matakuliah. Operasi delete yang sekaligus melakukan dealokasi address, biasanya ditawarkan ke pengguna yang tidak perlu mengetahui keberadaan address, dan yang hanya perlu memanipulasi informasi pada field info. Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 14

IV.5. Konkatenasi dua buah list linier Concat : L1 x L2 L { Menyambung L1 dengan L2 } Konkatenasi adalah menggabungkan dua list. Dalam contoh berikut list kedua disambungkan ke list pertama. Jadi Last(L1) menjadi predesesor (l2). Realisasi algoritmiknya adalah sebuah prosedur sebagai berikut. L1 L Last1 L2 L1 L Last1 L2 procedure CONCAT (Input L1, L2 : List; Output :L : List) {I.S. : L1 L2, L1 L dan L L 2; L1, L2 mungkin kosong} {F.S : L adalah hasil Konkatenasi ("Menyambung" ) dua buah list linier, L2 ditaruh di belakang L1 } { Catatan :elajari baik-baik algoritma berikut : apakah kedua list asal tetap dapat dikenali? } Last1 : address { alamat elemen terakhir list pertama} CreateList(L) {inisialisasi list hasil } if (L1) = Nil then (L) (L2) else { Traversal list 1 sampai address terakhir, hubungkan last dengan 2} (L) (L1) Last1 (L1) while (Next(Last1) Nil) do Last1 Next(Last1) { Next(Last1) = Nil, Last adalah elemen terakhir} Next(Last1) (L2) Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 15

Latihan soal : 1. Coba tuliskan skema sequential search untuk sesuah list linier yang informasi elemennya terurut membesar. 2. Apakah teknik sentinel layak untuk diterapkan pada sequential search untuk list linier? Jelaskanlah alasannya. Diskusikan kedua skema sequential search yang berbeda tsb. Sebagai bahan pemikiran, tinjau pemakaian mark dan tidak. 4. Skema berikut adalah skema yang mengandung kesalahan FATAL. Di mana letak kesalahannya? rocedure SKEMAListSearch(Input L : List, X : InfoType) { Sequential Search harga X pada sebuah list linier sederhana } : address {address pada pencarian beurutan, dimana X diketemukan } { = Nil jika tidak ketemu } Found : boolean { true jika tempat penyisipan yg benar ketemu} { List linier L sudah terdefinisi dan siap dikonsultasi } (L)(L) while (Next() Nil) and (X Info()) do Next() { Next() = Nil or X = Info()} Found X = Info() 5. Tuliskan skema sequential search untuk sebuah list linier jika yang dicari bukan suatu harga dari Inotype, tetapi sebuah alamat: SearchAdr(Input L:List, :address, Output Found:boolean) Inggriani Liem : "Algoritma dan emrograman rosedural Bagian II", Jurusan Teknik Informatika - ITB 16