9/25/2017 IF2121/Sem I 2017/2018 1
List Linier (Bag. I)
IF2121/Algoritma dan Struktur Data
Sem. I 2016/2017
9/25/2017 IF2121/Sem I 2017/2018 2
List Linier
• List linier:
– Sekumpulan elemen ber-type sama yang mempunyai keterurutan tertentu dan setiap elemen terdiri atas 2 bagian:
• Informasi mengenai elemen (Info)
• Informasi mengenai alamat elemen suksesor (Next)
typedef struct { InfoType Info;
address Next;
} ElmtList;
Address
Nil
ElmtList Info Next
@
9/25/2017 IF2121/Sem I 2017/2018 3
List Linier
• Sebuah list linier dikenali dari:
– elemen pertama list, biasanya melalui alamat elemen pertama yang disebut: First.
– alamat elemen berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen, yang dapat diakses melalui informasi NEXT.
– setiap elemen mempunyai alamat (address), yaitu tempat elemen yang disimpan dapat diacu. Untuk mengacu sebuah elemen, alamat harus terdefinisi.
– elemen terakhirnya.
9/25/2017 IF2121/Sem I 2017/2018 4
List Linier
• Jika L adalah list, dan P adalah address:
– Untuk mengacu alamat elemen pertama list L digunakan notasi First(L)
– Elemen yang diacu oleh P dapat diakses informasinya dengan notasi Selektor:
• Info(P) : nilai yang disimpan
• Next(P) : alamat elemen berikutnya
• Definisi List Kosong
– List L adalah list kosong: First(L) = Nil
• Definisi Elemen terakhir
– Next(Last) = Nil, dengan Last adalah alamat elemen
terakhir
9/25/2017 IF2121/Sem I 2017/2018 5
List Linier
List dengan 3 elemen First
List Kosong
First
9/25/2017 IF2110R/Sem. I 2016/2017/Dari bahan IF2110 ITB
6
Representasi Fisik
• Implementasi dalam struktur data yang nantinya dapat ditangani oleh pemroses bahasa-bahasa pemrograman
• Tidak semua bahasa dapat mengimplementasi semua struktur fisik yang diuraikan
• Implementasi struktur fisik harus sesuai permasalahan dan ketersediaan bahasa untuk memperoleh
algoritma yang optimal
• Pada tahapan analisis, yang harus dipakai sebagai pegangan adalah struktur lojik
– mempermudah analisis masalah dan pengembangan algoritma.
• Setelah suatu struktur fisik dipilih, algoritma dalam
struktur lojik yang telah dibahas tinggal diterjemahkan ke
dalam struktur fisik yang dipilih.
Representasi Berkait Dengan Pointer (1/3)
• Memanfaatkan struktur “pointer” yang
disediakan bahasa pemrograman (contoh bahasa C)
9/25/2017 IF2110R/Sem. I 2016/2017/Dari bahan IF2110 ITB
7
Representasi Berkait Dengan Pointer (1/3)
#define Nil NULL
typedef ... infotype;
typedef struct tElmtlist *address; /*pointer ke ElmtList*/
typedef struct tElmtlist { infotype info;
address next;
} ElmtList;
typedef struct { address First;
} List;
/* Selektor */
#define Info(P) (P)->info
#define Next(P) (P)->next
#define First(L) ((L).First)
9/25/2017 IF2110R/Sem. I 2016/2017/Dari bahan IF2110 ITB
8
Representasi First secara eksplisit (sebagai sebuah
komponen dari type List)
9/25/2017 IF2121/Sem I 2017/2018 9
Skema Dasar Pemrosesan List
• Traversal
• Sequential Searching
9/25/2017 IF2121/Sem I 2017/2018 10
Skema Traversal
• Skema traversal digunakan untuk
memroses setiap elemen list dengan cara yang sama
– Mekanisme: mengunjungi setiap elemen list dimulai dari elemen pertama, suksesornya, dst. sampai elemen terakhir.
• Skema Traversal 1, 2, 3: Diktat Struktur
Data (List Linier) hlm. 2-3.
9/25/2017 IF2121/Sem I 2017/2018 11
Skema Traversal 1
void SKEMAListTraversal1 (List L)
/* 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 */
{ /* KAMUS LOKAL */
address P; /* address untuk traversal, type terdefinisi */
void Proses (address P); /* pemrosesan elemen ber-address P */
void Inisialisasi(); /* aksi sebelum proses dilakukan */
void Terminasi(); /* aksi sesudah semua pemrosesan elemen selesai */
/* ALGORITMA */
Inisialisasi();
P = First(L);
while (P != Nil) { Proses(P);
P = Next(P);
}
Terminasi();
}
9/25/2017 IF2121/Sem I 2017/2018 12
Skema Traversal 2
void SKEMAListTraversal2 (List L)
/* 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 */
/* Skema sekuensial dengan MARK dan pemrosesan khusus pada list kosong */
{ /* KAMUS LOKAL */
address P; /*address untuk traversal */
void Proses (address P); /* pemrosesan elemen beraddress P */
void Inisialisasi(); /* aksi sebelum proses dilakukan */
void Terminasi(); /* aksi sesudah semua pemrosesan elemen selesai */
/* ALGORITMA */
if (First(L) == Nil) { printf("List kosong");
} else {
Inisialisasi();
P = First(L);
do {
Proses(P);
P = Next(P);
} while (P != Nil);
Terminasi();
} }
9/25/2017 IF2121/Sem I 2017/2018 13
Skema Traversal 3
void SKEMAListTraversal3 (List L)
/* 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 */
{ /* KAMUS LOKAL */
address P; /* address untuk traversal, type terdefinisi*/
boolean stop; /* penanda berhenti loop dengan iterate-stop */
void Proses (address P); /* pemrosesas elemen beraddress P */
void Inisialisasi(); /* aksi sebelum proses dilakukan */
void Terminasi(); /* aksi sesudah semua pemrosesan elemen selesai */
/* ALGORITMA */
Inisialisasi();
P = First(L);
stop = false;
do {
Proses(P);
if (Next(P) == Nil) { stop = true;
} else {
P = Next(P);
}
} while (!stop);
Terminasi();
}
9/25/2017 IF2121/Sem I 2017/2018 14
Skema Sequential Search
• Skema sequential search digunakan untuk mencari suatu elemen list
• Searching dapat dilakukan berdasarkan nilai atau berdasarkan alamat
– Lihat kembali skema sequential search pada array (tabel)
• Diktat Struktur Data (List Linier) hlm. 3 – 5:
– Search suatu nilai, output adalah address
– Search suatu elemen yang beralamat tertentu
– Search suatu elemen dengan kondisi tertentu
9/25/2017 IF2121/Sem I 2017/2018 15
Search Nilai, Output Address
(Pencarian dengan boolean)
void SKEMAListSearch1 (List L, InfoType X, address * P, boolean * Found)
/* I.S. List linier L sudah terdefinisi dan siap dikonsultasi, X terdefinisi */
/* F.S. P adalah address dimana X diketemukan pada pencarian berurutan, P = Nil jika tidak ketemu */
/* Found berharga true jika harga X yang dicari ketemu, false jika tidak ketemu */
/* Sequential Search harga X pada sebuah list linier L */
/* Elemen diperiksa dengan instruksi yang sama, versi dengan boolean */
{ /* KAMUS LOKAL */
/* ALGORITMA */
*P = First(L);
*Found = false;
while ((*P != Nil) && !(*Found)) { if (X == Info(*P)) {
*Found = true;
} else {
*P = Next(*P);
}
} /* P = Nil or Found*/
/* Jika Found maka P = address dari harga yg dicari diketemukan */
/* Jika not Found maka P = Nil */
}
9/25/2017 IF2121/Sem I 2017/2018 16
Search Nilai, Output Address
(Pencarian tanpa boolean)
void SKEMAListSearch2 (List L, InfoType X, address * P, boolean * Found)
/* I.S. List linier L sudah terdefinisi dan siap dikonsultasi, X terdefinisi */
/* F.S. P adalah address dimana X ditemukan pada pencarian beurutan, P = Nil jika tidak ketemu */
/* Found berharga true jika harga X yang dicari ketemu, false jika tidak ditemukan */
/* Sequential Search harga X pada sebuah list linier L */
/* Elemen terakhir diperiksa secara khusus, versi tanpa boolean */
{ /* KAMUS LOKAL */
/* ALGORITMA */
/* List linier L sudah terdefinisi dan siap dikonsultasi */
if (First(L) == Nil) { printf ("List kosong");
*Found = false; *P = Nil;
} else { /* First(L) != Nil, elemen pertama ada*/
*P = First(L);
while ((Next(*P) != Nil) && (X != Info(*P)) {
*P = Next(*P);
} /* Next(P) = Nil or X = Info(P) */
if (X == Info(*P)) {
*Found = true;
} else { /* X != Info(P) */
*Found = false; *P = Nil;
} } }
9/25/2017 IF2121/Sem I 2017/2018 17
Search Elemen Beralamat Tertentu
void SKEMAListSearch@ (List L, address P, boolean * Found)
/* I.S. List linier L sudah terdefinisi dan siap dikonsultasi, P terdefinisi */
/* F.S. Jika ada elemen list yang beralamat P, Found berharga true */
/* Jika tidak ada elemen list beralamat P, Found berharga false */
/* Sequential Search address P pada sebuah list linier L */
/* Semua elemen diperiksa dengan instruksi yang sama */
{ /* KAMUS LOKAL */
address Pt;
/* ALGORITMA */
Pt = First(L);
*Found = false;
while ((Pt != Nil) && !(*Found)) { if (Pt = P) [
*Found = true;
} else {
Pt = Next(Pt);
}
} /* Pt = Nil or Found */
/* Jika Found maka P adalah elemen list */
}
9/25/2017 IF2121/Sem I 2017/2018 18
Search Elemen Berkondisi Tertentu
void SKEMAListSearchX (List L, boolean Kondisi(P), address * P, boolean * Found) /* I.S. List linier L sudah terdefinisi dan siap dikonsultasi, Kondisi(P) adalah
suatu ekspresi boolean yang merupakan fungsi dari elemen beralamat P */
/* F.S. Jika ada elemen list P yang memenuhi Kondisi (P), maka P adalah alamat dari elemen yang memenuhi kondisi tersebut, Found berharga true */
/* Jika tidak ada elemen list P yang memenuhi Kondisi(P), maka Found berharga false dan P adalah Nil */
/* Semua elemen diperiksa dengan instruksi yang sama */
{ /* KAMUS LOKAL */
address P;
/* ALGORITMA */
/* List linier L sudah terdefinisi dan siap dikonsultasi */
*P = First(L);
*Found = false;
while ((P* != Nil) && !(*Found)) { if (Kondisi(*P)) {
*Found = true;
} else {
*P = Next(*P);
} /* P = Nil or Found */
/* Jika Found maka P adalah elemen list dengan Kondisi(P) true */
}