Lembar Kerja Praktikum 7 : Queue Lanjutan
5. Buat file main driver mlist.c
V. Hasil LKP (ditulis tangan di kertas A4)
No Deskripsi Jawaban
1 . . 4
VI. Evaluasi dan Pertanyaan
1. Tuliskan algoritma untuk nilai maksimum list dan minimum list ? 2. Tambahkan program untuk mencetak address max dan address min ?
VII. Kesimpulan
Lembar Kerja Praktikum 9 : List (lanjutan)
I. Tujuan
1. Memahami konsep list dan mampu mengimplementasikannya ke bahasa C. 2. Mampu melakukan operasi insert dan delete berdasarkan value pada list.
II. Dasar Teori
List Linier
Tidak ada perbedaan dengan teori pada Modul List (bagian 1) sebelumnya hanyasaja pada modul ini proses pada list berdasarkan value
Prototipe dan Primitif /Algoritma /*file : list1.h*/
/*contoh ADT list berkait dengan representasi fisik pointer*/ /*representasi address dengan pointer*/
/*infotype adalah integer*/ #ifndef list_H
#define list_H
#include "boolean.h" #define Nil NULL
#define info(P) (*P).info #define next(P) (P)->next #define First(L) ((L).First) #define infotype int
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) = Nil*/ typedef struct
{
address First; } List;
void InsertAfter(List *L, address P, address Prec); /*Prec pastilah elemen list dan bukan elemen terakhir*/ void InsertLast(List *L, address P);
/*P ditambahkan sebagai elemen terakhir yang baru*/ void DelP(List *L, infotype X);
/*jika ada elemen list beraddress P, dengan info(P) = X*/ /*maka P dihapus dari list dan didealokasi*/
/*jika tak ada, maka list tetap*/ void DelLast (List *L, address *P);
/*P adalah alamat elemen terakhir list sebelum penghapusan*/
/*Last Elemen yang baru adalah predesesor elemen pertama yang lama*/ void DelAfter(List *L, address *Pdel, address Prec);
/*Prec adalah anggota list*/ /*menghapus Next (Prec)*/ int NbElmt(List L);
/*mengirimkan banyaknya elemen list, 0 bila list kosong*/ infotype Max(List L);
/*mengirimkan nilai info(P) yang maksimum*/ infotype Min(List L);
/*mengirimkan nilai info(P) yang minimum*/ /*PRIMITIF BERDASARKAN NILAI*/
void InsVFirst (List *L, infotype X);
/*melakukan alokasi sebuah elemen, dan menambahkan elemen pertama dengan nilai X*/
/*bila alokasi berhasil*/
void InsVLast (List *L, infotype X);
/*menambahkan elemen list di akhir, elemen terakhir yang baru*/ /*PENCARIAN SEBUAH ELEMEN LIST*/
address Search (List L, infotype X);
/*mencari apakah ada elemen list dengan info(P) = X*/ /*Jika ada, kirimkan address. Jika tak ada kirimkan Nil*/
III. Kegiatan Praktikum
1. Ketik kode program dibawah ini kemudian simpan dengan nama boolean.h
2. Ketik prototipe/primitif di atas dan simpan dengan namalist.h. 3. Buat file list.c yang berisi implementasi dari list.h.
6. Buat file main driver mlist.c.
IV. Hasil LKP (ditulis tangan di kertas A4)
1 . . 4
V. Evaluasi dan Pertanyaan
1. Apa perbedaan operasi list berdasarkan address dengan operasi list berdasarkanvalue ?beri penjelasan ?
2. Sehubungan dengan pertanyaan 1, bagaimana dengan algoritmanya ?
VI. Kesimpulan
Lembar Kerja Praktikum 11: Multi List
I. Tujuan
Setelah mengerjakan LKP 4 ini, anda diharapkan dapat:
1. Memahami konsep list dan mampu mengimplementasikannya ke bahasa C. 2. Mampu melakukan operasi insert dan delete berdasarkan value pada list.
II. Dasar Teori
Multi List
Salah satu alternatif merepresentasikan multi list :
Tidak ada perbedaan dengan teori pada Modul List (bagian 1) sebelumnya hanyasaja pada modul ini proses pada list berdasarkan value
III. Evaluasi dan Pertanyaan
1. Apa perbedaan operasi list dengan multi lis ?beri penjelasan ?
IV. Kesimpulan
Lembar Kerja Praktikum 12 : Binary Search Tree
I. Tujuan
Setelah mengerjakan LKP 7 ini, anda diharapkan dapat:
1. Memahami konsep binary search tree dan mengimplementasikannya ke bahasa C. 2. Mampu melakukan operasi add dan delete dan search pada tree.
II. Dasar Teori
Sebuah pohon biner adalah himpunan terbatas yang - mungkin kosong, atau
- terdiri dari sebuah simpul yang disebut akar
dan dua buah himpunan lain yang disjointyang merupakan pohon biner, yangdisebut sebagai sub pohon kiri dan sub pohon kanan dari pohon biner tersebut.Perhatikanlah perbedaan pohon biner dengan pohon biasa : pohon biner mungkinkosong, sedangkan pohon n-aire tidak mungkin kosong.
Contoh pohon ekspresi aritmatika
Karena adanya arti bagi sub pohon kiri dan sub pohon kanan, maka dua buah pohon biner sebagai berikut berbeda (pohon berikut disebut pohoncondong/skewed tree)
Sub pohon ditunjukkan dengan penulisan ()
Pohon Seimbang (balanced tree)
Pohon seimbang tingginya: perbedaan tinggi sub pohon kiri dengan sub pohon kanan maksimum 1
Pohon seimbang banyaknya simpul: perbedaan banyaknya simpul sub pohon kiri dengan sub pohon kanan maksimum 1
Pohon Biner Terurut (Binary serach tree) Pohon biner terurut P memenuhi sifat :
Semua simpul subpohon kiri selalu < dari Info(P) Semua simpul subpohon kiri selalu > dari Info(P)
Untuk simpul yang sama nilainya : disimpan berapa kali muncul. Maka sebuah node P akan menyimpan informasi : Info(P), Left(P), Right(P) , Count(P) yaitu banyaknya kemunculan Info(P).
III. Prepraktikum
1. Jelaskan struktur data tree/pohon!
2. Jelaskan masing - masing jenis traverse dan buatlah ilustrasinya! Prototipe dan Primitif /Algoritma
/* file : bst.h */ #ifndef BST_H_ #define BST_H_ #include <stdlib.h> #include <stdio.h> #define Nil NULL
/* Lengkapilah definisi selektor dibawah ini */ #define Akar(P) (P)->info
#define Left(P) (P)->left #define Right(P) (P)->right
#define IsUnerLeft(P) Left(P)!=Nil && Right(P)==Nil #define IsUnerRight(P) Left(P)==Nil && Right(P)!=Nil #define IsBin(P) Left(P)!=Nil && Right(P)!=Nil
#define IsDaun(P) Left(P)==Nil && Right(P)==Nil typedef int infotype;
typedef struct tElmtTree *addrTree; typedef struct tElmtTree {
infotype info; addrTree left; addrTree right; } ElmtTree;
typedef addrTree BinTree; BinTree Alokasi(infotype I);
/* Mengembalikan hasil alokasi sebuah BinTree P dengan Akar(P)=I, */ /* Left(P)=Nil dan Right(P)=Nil */
void Dealokasi(BinTree Node);
/* I.S : Node adalah sebuah BinTree dengan Left(Node)=Nil */ /* dan Right(Node)=Nil */
/* F.S : Node dihancurkan dan Node=Nil */
/* Proses : Menghancurkan alamat memori yang ditunjuk Node, dan */ /* nilai Node diset Nil */
void MakeTree(infotype I,BinTree L,BinTree R,BinTree *P);
/* I.S : I adalah infotype sembarang, L dan R mungkin Nil ,P */ /* sembarang */
/* F.S : P adalah sebuah pohon baru dengan Akar(*P)=I, */ /* Left(*P)=L, dan Right(*P)=Nil */
/* Proses : Mengalokasikan sebuah pohon baru *P dengan nilai */ /* Akar(*P)=I, Left(*P)=L, dan Right(*P)=Nil jika */
/* alokasi berhasil. Jika alokasi gagal P=Nil */ void DestroyTree(BinTree *P);
/* I.S : P adalah pointer ke BinTree, mungkin Nil */
/* F.S : Pohon Biner P dihancurkan, semua memori yang digunakan */ /* dikembalikan, dan P=Nil */
/* Proses : Menghancurkan pohon biner P, semua memori yang */ /* digunakan dihancurkan dan P=Nil */
void PrintTree(BinTree P);
/* I.S : P adalah pohon biner mungkin kosong */
/* F.S : P tidak berubah, semua nilai dituliskan ke layar */ /* Proses : Menuliskan semua nilai info dari setiap simpul pohon /* dengan notasi prefix contoh : (7(3()(5()()))(11()())) */ BinTree Search(BinTree P,infotype I);
/* Mengembalikan alamat simpul pohon P dimana nilai info = I, jika */ /* tidak ada mengembalikan Nil */
int NbElmt(BinTree P);
/* Mengembalikan jumlah simpul dari pohon P, P mungkin kosong */ int NbDaun(BinTree P);
/* Mengembalikan jumlah daun dari pohon P, P mungkin kosong */ int IsSkewLeft(BinTree P);
/* Mengembalikan 1 jika P adalah pohon condong kiri, atau 0 jika /* bukan condong kiri */
int IsSkewRight(BinTree P);
/* Mengembalikan 1 jika P adalah pohon condong kanan, atau 0 */ /* jika bukan condong kanan */
int Level(BinTree P,infotype I);
/* Mengembalikan level I dalam pohon P, jika I tidak ada dalam */ /* pohon P mengembalikan 0 */
void Add(BinTree *P,infotype I);
/* I.S : P adalah pointer ke pohon biner P mungkin kosong, */ /* Pohon P tidak mempunyai simpul dengan nilai I */
/* F.S : I menjadi salah satu simpul pohon P, dan P tetap */ /* memenuhi aturan biner search tree */
void Del(BinTree *P,infotype I);
/* I.S : P adalah pointer ke pohon biner P mungkin kosong, */ /* I bernilai sembarang */
/* F.S : Jika terdapat simpul dari P dengan nilai info = I, maka */ /* simpul dihapus */
/* Proses : Menghapus simpul dari pohon P jika nilai info = I dan P */ /* tetap memenuhi aturan biner search tree */
infotype Sum(BinTree P);
/* Mengembalikan hasil penjumlahan semua nilai info dari setiap */ /* simpul yang dimiliki pohon P */
#endif // BST_H
IV. Kegiatan Praktikum
1. Buat file boolean.h
2. Ketik prototipe/primitif di atas dan simpan dengan namabst.h