Variasi List Linier (Bagian 2)

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

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

Variasi List Linier. Nisa ul Hafidhoh, MT

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

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

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

Representasi Logic List Linier

Bagian I. Studi Kasus [82] Tanda tangan:

LIST LINIER 1. DEFINISI

IKG2A3/ Pemrograman Terstruktur 2

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

A. Bagian I. Studi Kasus

QUEUE Antrian 1. DEFINISI

MODUL 6 SINGLE & DOUBLE LINKED LIST

Struktur Data. Queue (Antrian)

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

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

A. Bagian I. Studi Kasus [82]

LIST. Dewi Sartika, M.Kom

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

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

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

SENARAI BERANTAI (LINK LIST)

MODUL PRAKTIKUM STRUKTUR DATA

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

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

Implementasi Struktur Data Stack (Tumpukan) dalam Tower of Hanoi Game

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

Pohon Biner (Bagian 1)

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

BAB 1 KONSEP DASAR. Algoritma adalah urutan langkah-langkah logis untuk menyelesaikan sebuah masalah yang disusun secara sistematis.

ALGORITMA & PEMROGRAMAN

DIG1G3 Implementasi Struktur Data

BAB II STACK Atau TUMPUKAN

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

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

1. Traversing Untuk algoritma traversing sama seperti pada single Link List

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

PERTEMUAN KE 11. Linked List. Apa Itu Linked List?

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

BAB XI Manipulasi Binary Tree

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

MODUL PRAKTIKUM STRUKTUR DATA

DOUBLE LINKED LIST. Danang Wahyu Utomo Danang Wahyu Utomo, M.Kom, M.CS

STACK Tumpukan TOP TOP BOTTOM BOTTOM

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

LAPORAN PRAKTIKUM IX. Oleh:

05. Double Linked List

REPRESENTASI FISIK LIST LINEAR

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

BAB II Senarai Berantai (Linked List)

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

Algoritma Pemrograman & Struktur Data

BAB IX LINKED LIST (SENARAI BERANTAI)

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

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

Modul Praktikum. Struktur Data. Oleh: M. Fachrurrozi, MT. Comlabs Fakultas Ilmu Komputer. Universitas Sriwijaya

Linked List 6.3 & 7.3 NESTED LOOP

Single Linked List (1)

BAB 1 PENGANTAR KE STRUKTUR DATA

Linked List. Bandung 2013

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Algoritma dan Struktur Data. Pertemuan 7 Linked List

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

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

TOPOLOGICAL SORT dengan DFS dan METODE LAIN

Algoritma dan Struktur Data. Linked List

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

Praktikum Algoritma dan Struktur Data 2010

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

Linked List dan Implementasinya dalam Bahasa Java

Jadi satu simpul di double linked list adalah sebagai berikut : Info. Kiri. Kanan

Gambar 3.1. Circular Single Linked List. Deklarasi bisa dilihat kembali di Single Linked List atau Double Linked List.

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

Lab. Teknik Informatika Struktur Data 1

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

Search And Insert Problem (Sorted Double Linkedlist Solution)

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

PENGENALAN List merupakan sebuah pemikiran/konsep struktur data yang sangat dasar pada pemrograman agar lebih fleksibel. Setiap elemen akan ditambahka

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

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

Data structure :Metode LINK LIST. Kusnawi, S.Kom, M.Eng STMIK AMIKOM Yogyakarta

UJIAN AKHIR SEMESTER GANJIL 2005/2006 ALGORITMA & STRUKTUR DATA / CS2014

Algoritma dan Struktur Data. Ramos Somya

RENCANA PEMBELAJARAN SEMESTER (RPS)

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

PENGANTAR KOMPUTER & SOFTWARE II. Pengulangan (For) Tim Pengajar KU Institut Teknologi Sumatera

DIG1G3 Implementasi Struktur Data

BAB IX LINKED LIST (SENARAI BERANTAI)

Review : Sifat Implementasi Linear List dengan Array

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 1)

TUGAS PENDAHULUAN MODUL 12 PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA STACK

Ujian Tengah Semester Struktur Data dan Algoritma Fakultas Ilmu Komputer, Universitas Indonesia 9 November 2006

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

MODUL PRAKTIKUM STRUKTUR DATA

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

Praktikum Algoritma dan Struktur Data

KONSEP POINTER DAN LINKED LIST

Mesin Karakter dan Mesin Kata

Transkripsi:

Variasi List Linier (Bagian 2) Tim Pengajar IF2030 Semester I/2009-2010 11/12/2009 FNA/IF2030/Sem. 1 2009-2010 1

List dengan elemen fiktif (dummy element) di akhir 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 2

List dengan Elemen Fiktif pada Elemen Terakhir Elemen pertama : First (L) Elemen terakhir : dummy@ List kosong : First(L) = dummy@ 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 3

List dengan Elemen Fiktif di Akhir dan Pencatatan Alamat Elemen Akhir Elemen pertama : First(L) Elemen terakhir : Last(L); = dummy@ List kosong : First(L) = Last(L) = dummy@ 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 4

Beberapa catatan Sering dipakai jika dummy adalah sentinel, dan pencarian diperlukan sebelum penambahan elemen Nilai yang dicari dapat secara langsung disimpan untuk sementara pada dummy, kemudian dilakukan search Jika search tidak berhasil, dan elemen akan ditambahkan, maka dialokasi sebuah dummy yang baru, nilai Last berubah Contoh pemakaian dijelaskan pada topological sort (Lihat Studi Kasus 6) Dummy bisa berupa address yang tetap, bisa sebuah address yang berbeda (setiap kali dummy tersebut dipakai sebagai elemen list, dialokasi dummy yang baru) 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 5

Bahasan - 1 Buatlah ADT list + driver dengan elemen dummy di akhir: Penunjuk first dan last Alamat dummy: tetap Representasi fisik: berkait dengan pointer 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 6

Representasi Fisik dengan Pointer #define Nil NULL typedef int infotype; typedef struct telmtlist *address; typedef struct telmtlist { infotype info; address next; ElmtList; /* Definisi list : */ /* List kosong : First(L) = Last(L) = dummy@ */ /* Setiap elemen dengan address P dapat diacu Info(P), Next(P) */ /* Elemen dummy terletak pada last */ typedef struct { address First; address Last; List; /* Selektor */ #define Info(P) (P)->info #define Next(P) (P)->next #define First(L) ((L).First) #define Last(L) ((L).Last) 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 7

Beberapa primitif Buatlah sebagai latihan: /* PROTOTYPE */ /****************** TEST LIST KOSONG ******************/ boolean ListEmpty (List L); /* Mengirim true jika list kosong: First(L) = dummy@ dan Last(L) = dummy@ */ /****************** PEMBUATAN LIST KOSONG ******************/ void CreateList (List * L); /* I.S. sembarang */ /* F.S. Terbentuk list L kosong, dengan satu elemen dummy */ /* Jika gagal maka First = Last = Nil dan list gagal terbentuk */ /****************** SEARCHING ******************/ address Search (List L, infotype X) /* Mencari apakah ada elemen list dengan info(p)= X */ /* Jika ada, mengirimkan address elemen tersebut. */ /* Jika tidak ada, mengirimkan Nil */ 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 8

Beberapa primitif Buatlah sebagai latihan: void InsertFirst (List * L, address P); /* I.S. Sembarang, P sudah dialokasi */ /* F.S. Menambahkan elemen ber-address P sebagai elemen pertama */ void InsertLast (List * L, address P); /* I.S. Sembarang, P sudah dialokasi */ /* F.S. P ditambahkan sebagai elemen terakhir yang baru, */ /* yaitu menjadi elemen sebelum dummy */ void DelFirst (List * L, address * P); /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen pertama list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* First element yg baru adalah suksesor elemen pertama yang lama */ void DelLast (List * L, address * P); /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen terakhir sebelum dummy pada list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 9

Beberapa primitif boolean ListEmpty (List L) /* Mengirim true jika list kosong */ { /* Kamus Lokal */ /* Algoritma */ return ((First(L) == Last(L)) && (Last(L)!= Nil)); 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 10

Beberapa primitif void CreateList (List * L) /* I.S. sembarang */ /* F.S. Terbentuk list L kosong, dengan satu elemen dummy, jika alokasi dummy berhasil */ /* Jika gagal maka First = Last = Nil dan list gagal terbentuk */ { /* Kamus Lokal */ address Pdummy; /* Algoritma */ Pdummy = (address) malloc (sizeof(elmtlist)); if (Pdummy!= Nil) { Next(Pdummy) = Nil; /* Info(P) tidak didefinisikan */ First(*L) = Pdummy; Last(*L) = Pdummy; else /* List gagal terbentuk */ { First(*L) = Nil; Last(*L) = Nil; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 11

Beberapa primitif address Search (List L, infotype X) /* Mencari apakah ada elemen list dengan info(p)= X */ /* Jika ada, mengirimkan address elemen tersebut. */ /* Jika tidak ada, mengirimkan Nil */ { /* Kamus Lokal */ address Pt; /* Algoritma */ if (ListEmpty(L)) { return Nil; else /* list tidak kosong */ { Info(Last(L)) = X; /* letakkan sentinel */ Pt = First(L); while (Info(Pt)!= X) { Pt = Next(Pt); /* Info(Pt) = X */ if (Pt!= Last(L)) { /* tidak ketemu di sentinel */ return Pt; else /* Pt = Last(L), ketemu di sentinel */ { return Nil; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 12

Beberapa primitif void InsertFirst (List * L, address P) /* I.S. Sembarang, P sudah dialokasi */ /* F.S. Menambahkan elemen ber-address P sebagai elemen pertama */ { /* Kamus Lokal */ /* Algoritma */ Next(P) = First(*L); First(*L) = P; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 13

Beberapa primitif void InsertLast (List * L, address P) /* I.S. Sembarang, P sudah dialokasi */ /* F.S. P ditambahkan sebagai elemen terakhir yang baru */ { /* Kamus Lokal */ address last; /* Algoritma */ if (ListEmpty(*L)) { InsertFirst(L,P); else { last = First(*L); while (Next(last)!= Last(*L)) { last = Next(last); /* Next(last) == Last(*L) alias dummy */ InsertAfter(L,P,last); 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 14

Beberapa primitif void DelFirst (List * L, address * P) /* I.S. List L tidak kosong */ /* F.S. P adalah alamat elemen pertama list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* First element yg baru adalah suksesor elemen pertama yang lama */ { /* Kamus Lokal */ /* Algoritma */ *P = First(*L); First(*L) = Next(First(*L)); Next(*P) = Nil; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 15

Beberapa primitif void DelLast (List * L, address * P) /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen terakhir list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* Last element baru adalah predesesor elemen pertama yg lama, */ /* jika ada */ { /* Kamus Lokal */ address last, preclast; /* Algoritma */ last = First(*L); preclast = Nil; while (Next(last)!= Last(*L)) { preclast = last; last = Next(last); *P = last; if (preclast == Nil) { /* kasus satu elemen */ First(*L) = Last(*L); else { Next(preclast) = Last(*L); 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 16

List dengan Double Pointer 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 17

List dengan Pointer Ganda Elemen pertama : First(L) Elemen terakhir : Last(L) = P; Next(P) = Nil List kosong : First(L) = Nil 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 18

List dengan Pointer Ganda, dicatat Last Elemen pertama : First(L) Elemen terakhir : Last(L); Next(Last(L)) = Nil List kosong : First(L) = Last (L) = Nil 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 19

Beberapa catatan Dibutuhkan jika harus dilakukan banyak operasi terhadap elemen suksesor dan juga predesesor. Dengan tersedianya alamat predesesor pada setiap elemen list, maka memorisasi Prec pada beberapa algoritma yang pernah ditulis dapat dihindari Operasi dasar menjadi sangat banyak Memori yang dibutuhkan membesar Jika list lojik semacam ini direpresentasi secara kontigu dengan tabel, maka sangat menguntungkan karena memorisasi Prev dan Next dilakukan dengan kalkulasi 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 20

Bahasan - 2 Buatlah ADT list dengan elemen berpointer ganda + driver : Representasi fisik: berkait dengan pointer Penunjuk First dan Last 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 21

Rep. Fisik dengan Pointer #define Nil NULL typedef int infotype; typedef struct telmtlist *address; typedef struct telmtlist { infotype info; address prev; address next; ElmtList; /* Definisi list : */ /* List kosong : First = Nil and Last = Nil */ /* Setiap elemen dengan address P dapat diacu Info(P), Prev(P), Next(P) */ typedef struct { address First; address Last; List; /* Selektor */ #define Info(P) (P)->info #define Prev(P) (P)->prev #define Next(P) (P)->next #define First(L) ((L).First) #define Last(L) ((L).Last) 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 22

Beberapa Primitif Buatlah sebagai latihan: void InsertFirst (List * L, address P); /* I.S. Sembarang, P sudah dialokasi */ /* F.S. Menambahkan elemen ber-address P sebagai elemen pertama */ void InsertAfter (List * L, address P, address Prec); /* I.S. Prec pastilah elemen list dan bukan elemen terakhir, */ /* P sudah dialokasi */ /* F.S. Insert P sebagai elemen sesudah elemen beralamat Prec */ void InsertLast (List * L, address P); /* I.S. Sembarang, P sudah dialokasi */ /* F.S. P ditambahkan sebagai elemen terakhir yang baru, */ 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 23

Beberapa Primitif Buatlah sebagai latihan: void DelFirst (List * L, address * P); /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen pertama list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* First element yg baru adalah suksesor elemen pertama yang lama */ void DelLast (List * L, address * P); /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen terakhir sebelum dummy pada list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ void DelAfter (List * L, address * Pdel, address Prec); /* I.S. List tidak kosong. Prec adalah anggota list */ /* F.S. Menghapus Next(Prec): */ /* Pdel adalah alamat elemen list yang dihapus */ 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 24

Beberapa Primitif void InsertFirst (List * L, address P) /* I.S. Sembarang, P sudah dialokasi */ /* F.S. Menambahkan elemen ber-address P sebagai elemen pertama */ { /* Kamus Lokal */ /* Algoritma */ Next(P) = First(*L); if (!ListEmpty(*L)) { Prev(First(*L)) = P; else /* L kosong */ { Last(*L) = P; First(*L) = P; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 25

Beberapa Primitif void InsertAfter (List * L, address P, address Prec) /* I.S. Prec pastilah elemen list dan bukan elemen terakhir, */ /* P sudah dialokasi */ /* F.S. Insert P sebagai elemen sesudah elemen beralamat Prec */ { /* Kamus Lokal */ /* Algoritma */ Prev(Next(Prec)) = P; Next(P) = Next(Prec); Prev(P) = Prec; Next(Prec) = P; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 26

Beberapa Primitif void InsertLast (List * L, address P) /* I.S. Sembarang, P sudah dialokasi */ /* F.S. P ditambahkan sebagai elemen terakhir yang baru */ { /* Kamus Lokal */ /* Algoritma */ Prev(P) = Last(*L); if (!ListEmpty(*L)) { Next(Last(*L)) = P; else /* L kosong */ { First(*L) = P; Last(*L) = P; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 27

Beberapa Primitif void DelFirst (List * L, address * P) /* I.S. List L tidak kosong */ /* F.S. P adalah alamat elemen pertama list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* First element yg baru adalah suksesor elemen pertama yang lama */ { /* Kamus Lokal */ /* Algoritma */ *P = First(*L); if (First(*L) == Last(*L)) { Last(*L) = Nil; First(*L) = Next(First(*L)); if (First(*L)!= Nil) { Prev(First(*L)) = Nil; Next(*P) = Nil; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 28

Beberapa Primitif void DelLast (List * L, address * P) /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen terakhir list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* Last element baru adalah predesesor elemen pertama yg lama, */ /* jika ada */ { /* Kamus Lokal */ /* Algoritma */ *P = Last(*L); if (First(*L) == Last(*L)) { First(*L) = Nil; Last(*L) = Prev(Last(*L)); if (Last(*L)!= Nil) { Next(Last(*L)) = Nil; Prev(*P) = Nil; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 29

Beberapa Primitif void DelAfter (List * L, address * Pdel, address Prec) /* I.S. List tidak kosong. Prec adalah anggota list */ /* F.S. Menghapus Next(Prec): */ /* Pdel adalah alamat elemen list yang dihapus */ { /* Kamus Lokal */ /* Algoritma */ *Pdel = Next(Prec); Next(Prec) = Next(Next(Prec)); Prev(Next(Prec)) = Prec; Next(*Pdel) = Nil; Prev(*Pdel) = Nil; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 30

List Sirkuler 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 31

List Sirkuler Elemen pertama : First(L) Elemen terakhir : Last(L) = P; Next(P) = First(L) List kosong : First(L) = Nil 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 32

Beberapa catatan List dengan representasi ini sebenarnya tidak mempunyai First First adalah Current Pointer Representasi ini dipakai jika dilakukan proses terus menerus terhadap anggota list (misalnya dalam round robin services pada sistem operasi) Penambahan dan penghapusan pada elemen pertama akan berakibat harus melakukan traversal untuk mengubah Next dari elemen Last. 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 33

Bahasan - 3 Buatlah ADT list sirkuler + driver: Penunjuk First Representasi fisik: berkait dengan pointer 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 34

#define Nil NULL Rep. Fisik dengan Pointer typedef int infotype; typedef struct telmtlist *address; typedef struct telmtlist { infotype info; address next; ElmtList; /* Definisi list : */ /* List kosong : First(L) = Nil */ /* Setiap elemen dengan address P dapat diacu Info(P), Next(P) */ /* Elemen terakhir list : jika addressnya Last, maka Next(Last) = First */ typedef struct { address First; List; /* Selektor */ #define Info(P) (P)->info #define Next(P) (P)->next #define First(L) ((L).First) 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 35

Beberapa Primitif Buatlah sebagai latihan: boolean FSearch (List L, address P); /* Mencari apakah ada elemen list yang beralamat P */ /* Mengirimkan true jika ada, false jika tidak ada */ void InsertFirst (List * L, address P); /* I.S. Sembarang, P sudah dialokasi */ /* F.S. Menambahkan elemen ber-address P sebagai elemen pertama */ void InsertLast (List * L, address P); /* I.S. Sembarang, P sudah dialokasi */ /* F.S. P ditambahkan sebagai elemen terakhir yang baru */ 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 36

Beberapa Primitif Buatlah sebagai latihan: void DelFirst (List * L, address * P); /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen pertama list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* First element yg baru adalah suksesor elemen pertama yang lama */ void DelLast (List * L, address * P); /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen terakhir list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* Last element baru adalah predesesor elemen pertama yg lama, */ /* jika ada */ void PrintInfo (List L); /* I.S. List mungkin kosong */ /* F.S. Jika list tidak kosong, */ /* Semua info yg disimpan pada elemen list diprint */ /* Jika list kosong, hanya menuliskan "list kosong" */ 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 37

Beberapa Primitif boolean FSearch (List L, address P) /* Mencari apakah ada elemen list yang beralamat P */ /* Mengirimkan true jika ada, false jika tidak ada */ { /* Kamus Lokal */ address Pt; /* Algoritma */ if (ListEmpty(L)) { return false; else { Pt = First(L); while ((Next(Pt)!= First(L)) && (Pt!= P)) { Pt = Next(Pt); /* Next(Pt) = First(L) or Pt = P */ if (Pt == P) { return true; else { return false; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 38

Beberapa Primitif void InsertFirst (List * L, address P) /* I.S. Sembarang, P sudah dialokasi */ /* F.S. Menambahkan elemen ber-address P sebagai elemen pertama */ { /* Kamus Lokal */ address last; /* Algoritma */ if (ListEmpty(*L)) { Next(P) = P; else /* L tidak kosong */ { last = First(*L); while (Next(last)!= First(*L)) { last = Next(last); /* Next(last) = First(L) ==> elemen terakhir */ Next(P) = First(*L); Next(last) = P; First(*L) = P; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 39

Beberapa Primitif void InsertLast (List * L, address P) /* I.S. Sembarang, P sudah dialokasi */ /* F.S. P ditambahkan sebagai elemen terakhir yang baru */ { /* Kamus Lokal */ address last; /* Algoritma */ if (ListEmpty(*L)) { InsertFirst(L,P); else { last = First(*L); while (Next(last)!= First(*L)) { last = Next(last); /* Next(last) = First(L) */ InsertAfter(L,P,last); 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 40

Beberapa Primitif void DelFirst (List * L, address * P) /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen pertama list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* First element yg baru adalah suksesor elemen pertama yang lama */ { /* Kamus Lokal */ address last; /* Algoritma */ *P = First(*L); if (Next(First(*L)) == First(*L)) { /* satu elemen */ First(*L) = Nil; else { last = First(*L); while (Next(last)!= First(*L)) { last = Next(last); /* Next(last) = First(L) */ First(*L) = Next(First(*L)); Next(last) = First(*L); Next(*P) = Nil; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 41

Beberapa Primitif void DelLast (List * L, address * P) /* I.S. List tidak kosong */ /* F.S. P adalah alamat elemen terakhir list sebelum penghapusan */ /* Elemen list berkurang satu (mungkin menjadi kosong) */ /* Last element baru adalah predesesor elemen pertama yg lama, */ /* jika ada */ { /* Kamus Lokal */ address Last, PrecLast; /* Algoritma */ Last = First(*L); PrecLast = Nil; while (Next(Last)!= First(*L)) { PrecLast = Last; Last = Next(Last); /* Next(Last) = First(*L) */ *P = Last; if (PrecLast == Nil) { /* kasus satu elemen */ First(*L) = Nil; else { Next(PrecLast) = First(*L); Next(*P) = Nil; 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 42

Beberapa Primitif void PrintInfo (List L) /* I.S. List mungkin kosong */ /* F.S. Jika list tidak kosong, */ /* Semua info yg disimpan pada elemen list diprint */ /* Jika list kosong, hanya menuliskan "list kosong" */ { /* Kamus Lokal */ address P; /* Algoritma */ if (ListEmpty(L)) { printf("list Kosong \n"); else { P = First(L); printf("list : \n"); do { printf("%d \n", Info(P)); P = Next(P); while (P!= First(L)); 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 43

PR Untuk praktikum 11 (23-24 Nov 2009): Modul pra-praktikum: P11. Variasi List Linier Bagian 1. ADT List First-Last dengan Dummy pada Last Bagian 2. ADT List Sirkuler Bagian 3. ADT List dengan Double Pointer 11/12/2009 FNA/IF2030/Sem. 1 2008-2009 44