Anda di halaman 1dari 4

14/03/2011

Tujuan Instruksional Khusus


• Mahasiswa mengenal dasar-dasar dari list linear
• Mahasiswa dapat mengimplementasikan
PI1043 Struktur Data primitif list linear
Program Studi Diploma Teknik Informatika
Fakultas Informatika
IT Telkom Bandung
By Tjokorda Agung Budi Wirayuda, ST, MT

Pendahuluan Materi Bahasan


• Pada materi sebelumnya telah dibahas mengenai • Pada pertemuan kali ini kita akan membahas
implementasi List dan operasi yang meliputi: mengenai operasi:
▫ isEmptyList ▫ Delete
▫ createList  First
▫ Insert:  Element
 First  After
 After  Last
 Last • Harap diingat bahwa dalam bahasa C tidak ada
▫ Mekanisme Traversal List tipe boolean, kita harus mendefinisikan dengan:
▫ Searching pada List typedef enum {false=0,true=1} boolean;

Definisi Dasar List Linear [2] DeleteFirst


• Dalam bahasa C definsi dasar pada slide • Menghapus element pertama pada List
sebelumnya sama dengan:
• Kondisi yang mungkin ada:
▫ FIRST(L) = List -> Head
▫ NEXT(P) = P ->Next ▫ List Kosong tidak melakukan apapun
▫ INFO(P) = {primitif display info dari Elemen} ▫ List Tidak Kosong
▫ (dimana P adalah sebuah element) • Tahapan:
• Untuk mempermudah penulisan kode maka kita ▫ Mencari element pertama list kemudian
dapat menggunakan perintah #define menindahkan pointer Head ke elemen selanjutnya
▫ #define FIRST(l) l->Head (NEXT (ElementPertama))
▫ #define NEXT(P) P->Next
▫ #define INFO(P) displayInfo(P->Data)

1
14/03/2011

DeleteFirst DeleteFirst
Kasus Untuk List Kosong: PRIMITIF
Kondisi Awal void deleteFirstPtr(List *L,ElementPtr P);
Kasus Untuk List Kosong: tidak melakukan
ALGORITMA
apapun
Procedure deleteFirstPtr(Input/Output List L, Input Address P)
{ I.S: Terdefinisi List L tidak kosong,
Kasus Untuk List Tidak Kosong: Kondisi Awal F.S: Menghapus elemen pertama list L, dimana P adalah elemen pertama dalam List L
}
@ P<-FIRST(L)
Kasus Untuk List Tidak Kosong: Kondisi Akhir FIRST(L) <- NEXT(P)
Note : pada Tahap 2 link dari HEAD akan
Tahap 1 berpindah ke Element Kedua HEAD
@ P P

Tahap 1 : Mencari element Pertana List dan diacu dengan P


Tahap 2: Mengatur HEAD dari List a agar mengacu pada element
kedua yaitu NEXT(P)

Delete First DeleteAfter


KODE C
void deleteFirstPtr(List *L,ElementPtr P){
• Menghapus Element Selanjutnya dari sebuah
if (isEmpty(l)==false)//berarti list tidak kosong Element List (P)
{ P = FIRST(L); • Asumsi:
FIRST(L)=NEXT(P);
printf("Element pertama terhapus \n"); ▫ Posisi P telah diketahui dan NEXT(P) tidak Nil
} ▫ Proses yang dilakukan adalah mengatur NEXT(P)
else // berarti list kosong yang baru yaitu menjadi NEXT(NEXT(P))
{ printf("List Kosong\n");
}
}

DeleteAfter DeleteAfter
• Perlu diingatkan bahwa mekanisme ini terbatas Kondisi Akhir
Note : Bila P merupakan element Kedua
pada asumsi bahwa elemnt P bukan element dari List yang ada dalam contoh
terakhir dari List
@ P Prec

P dapat berupa elemen manapun asalkan NEXT(P) tidak Nil Tahap 1 : Mencari element selanjutnya dari P dan diacu dengan Prec
Tahap 2: Mengatur NEXT P menjadi NEXT Prec
@ P

2
14/03/2011

DeleteAfter DeleteAfter
PRIMITIF
Kondisi Akhir void deleteAfterPtr(ElementPtr P,ElementPtrPrec);
Note : Bila P merupakan element Pertama ALGORITMA
dari List yang ada dalam contoh
Procedure deleteAfterPtr(Input/Output Address P, Prec)
{ I.S: Terdefinisi Element P dimana NEXT(P) tidak Nil,
F.S: Elemen NEXT(P) dihapus dari list
@ P Prec }
Prec <- NEXT(P)
NEXT(P)<-NEXT(Prec)

HEAD
Tahap 1 : Mencari element selanjutnya dari P dan diacu dengan Prec
Tahap 2: Mengatur NEXT P menjadi NEXT Prec P Prec

DeleteAfter DeleteLast
Kode C
void deleteAfterPtr(ElementPtr P, ElementPtr Prec){ • Penghapusan element terakhir pada sebuah list
Prec <- NEXT(P) • Kondisi yang perlu diperhatikan
NEXT(P)<-NEXT(Prec)
▫ List 1 Elemen = gunakan deleteFirst
HEAD ▫ List > 1 elemen= gunakan deleteAfter
• Proses:
▫ Mencari elemen terakhir dari list diacu oleh P dan
P Prec
Prev adalah satu elemen sebelum elemen akhir
▫ Bila list 1 elemen maka Prev adalah Nil

DeleteLast DeleteLast
PRIMITIF
P dapat berupa elemen void deleteLastPtr(List *L, ElementPtr P);
Terakhir dari List, dan list ALGORITMA
Procedure deleteLastPtr(Input/Output List L,Address P)
P terdiri atas 1 element maka
@ { I.S: Terdefinisi List L dimana P adalah element Terakhir
kita gunakan deleteFirst F.S: Element List L berkurang 1 yaitu pada element terakhir
}
Kamus Lokal : Address Prev
P <-FIRST(L)
@ Prev P Prev <-Nill
/{lakukan iterasi}
While NEXT(P)<>Nil
P dapat berupa elemen Terakhir dari List, dan list terdiri atas >1 element Prev<-P
maka kita gunakan deleteAfter P <-NEXT(P)
Untuk melakukan penghapusan element terakhir maka kita perlu berhenti 1 IF Prev = Nil {List 1 element}
elemen sebelum elemen terakhir sehingga kondisi traversal menjadi while deleteFirst(L,P)
(Next(Next(Element))<>Nil atau kita tambahkan sebuah element ELSE
penyimpan element sebelum element terakhir (Prev) deleteAfter(Prev,P)

3
14/03/2011

DeleteLast DeleteElement
KODE C
void deleteLastPtr(List *L, ElementPtr P){
• Menghapus sebuah Element P yang telah
ElementPtrPrev; diketahui menjadi element dari List namun
P =FIRST(L); posisi belum diketahui
Prev =NULL;
/{lakukan iterasi} • Ide:
While (NEXT(P)!=NULL) ▫ Mencari posisi P dalam List, kita berhenti 1
Prev=P; element sebelum P yang diacu oleh tmp
P =NEXT(P);
if (Prev == NULL) {List 1 element} ▫ Kondisi traversal yang digunakan
deleteFirstPtr(L,P);  while NEXT(tmp)<>P
else
deleteAfterPtr(Prev,P);

DeleteElement DeleteElement
KODE C
Kita tahu P ada dalam list namun tidak
void deleteElementPtr(List *L, ElementPtr P){
tau lokasi pastinya. Bila List 1 element
P maka gunakan DeleteFirst ElementPtr Prev;
@
if (P==FIRST(L))
deleteFirstPtr(L,P);
else{
Prev=FIRST(L);
@ Prev P
While(NEXT(Prev)!=P)
Prev=(NEXT(Prev));
P merupakan element dalam list L yang lokasinya belum diketahui deleteAfterPtr(Prev,P);
apakah di awal, tengah atau akhir. Untuk penghapusan maka kita harus }
menemukan Posisi sebelum P dan menggunakan deleter After
Pencarian traversal dengan aturan berhenti: while (Next(Prev)<>P

DeleteElement Latihan
PRIMITIF
void deleteElementPtr(List *L, ElementPtr P); • Bagaimana bila kita ingin mengupdate informasi
ILUSTRASI
sebuah element List, dimana ada 2
ALGORITMA
Procedure deleteElementPtr(Input/Output List L,Address P)
kemungkinan:
{ I.S: Terdefinisi List L dimana P adalah element dari List ▫ 1 Kita sudah mengetahui Alamat Element
F.S: Element List L berkurang 1 yaitu pada element P
} ▫ 2. Kita hanya mengetahui info awal element saja
Kamus Lokal : Address Prev
IF P=FIRST(L) • Misalkan pada kasus List Mahasiswa adalah
deleteFirstPtr(L,P)
ELSE
proses mengupdate Nilai dimana diketahui Nim
Prev <-FIRST(L) mahasiswa yang bersangkutan
{lakukan iterasi mencari 1 element sebelum P}
While NEXT(Prev)<>P
Prev<-NEXT(Prev)
deleteAfterPtr(Prev,P)

Anda mungkin juga menyukai