• Tidak ada hasil yang ditemukan

Lembar Kerja Praktikum 8 : List

Dalam dokumen Modul Algoritma dan Struktur Data (1) (Halaman 51-59)

I.

Tujuan

Setelah mengerjakan LKP 8 ini, anda diharapkan dapat:

1. Memahami konsep list dan mampu mengimplementasikannya ke bahasa C. 2. Mampu melakukan operasi insert dan delete pada list.

II.

Dasar Teori

List Linier

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 :

dengan InfoType adalah sebuah type terdefinisi yang menyimpan informasi sebuah elemen list; Next adalah address ("alamat") dari elemen berikutnya (suksesor). Dengan demikian, jika didefinisikan First adalah alamat elemen pertama list, maka elemen berikutnya dapat diakses secara suksesif dari field Next 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

Jadi, sebuah list linier dikenali :

elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut : First alamat elemen berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen,yang dapat diakses melalui informasi NEXT. NEXT mungkin ada secaraeksplisit (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

52/77

Fakultas Ilmu Komputer – Universitas Sriwijaya pada elemen list dapat diakses elemen terakhirnya. Ada berbagai cara untuk mengenali elemen akhir Jika L adalah list, dan P adalah address:

Alamat elemen pertama list L dapat diacu dengan notasi : First(L)

Elemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi Selektor : Info(P)

Next(P) Beberapa definisi :

o List L adalah list kosong, jika First(L) = Nil

o Elemen terakhir dikenali, misalnya jika Last adalah alamat element terakhir, maka Next(Last) =Nil

INSERT-First

Menambahkan sebuah elemen yang diketahui alamatnya sebagai elemen pertama list.Insert elemen pertama, List kosong :

53/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Menambahkan sebuah elemen yang diketahui nilainya sebagai elemen pertama list. Tahap pertama :

Insert Nilai 3 sebagai elemen pertama, List : karena yang diketahui adalah nilai, maka harus dialokasikan dahulu sebuah elemen supaya nilai 3 dapat di-insert Jika alokasi berhasil, P tidak sama dengan Nil

54/77

Fakultas Ilmu Komputer – Universitas Sriwijaya INSERT-After :

Menyisipkan sebuah elemen beralamat P setelah sebagai suksesor dari sebuah elemen list linier yang beralamat Prec

INSERT-Last

Menyisipkan sebuah elemen beralamat P 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

DELETE-First : menghapus elemen pertama list linier Elemen yang dihapus dicatat alamatnya :

55/77

Fakultas Ilmu Komputer – Universitas Sriwijaya DELETE-After :

Penghapusan suksesor sebuah elemen :

DELETE-Last :

Menghapus elemen terakhir list dapat dilakukan jika alamat dari elemen sebelum

elemen terakhir diketahui. Persoalan 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 :

List tidak menjadi kosong (masih mengandung elemen) :

III.

Prepraktikum

1. Jelaskan struktur data linked list!

2. Jelaskan operasi-operasi pada linked list!

3. Jelaskan macam-macam linked list dan gambar dari macam-macam linked list tersebut!

56/77

Fakultas Ilmu Komputer – Universitas Sriwijaya 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;

/*PROTOTYPE*/

/*test list kosong*/

boolean ListEmpty (List L); /*true jika list kosong*/ /*PEMBUATAN LIST KOSONG*/ void CreateList (List *L);

/*membentuk list kosong*/ /*MANAJEMEN MEMORI*/

address alokasi (infotype X);

/*mengirimkan address hasil alokasi sebuah elemen*/ /*jika alokasi berhasil, maka address tidak nil, dan */ /*bila menghasilkan P, maka info(P) = X, Next(P) = Nil*/ /*jika alokasi gagal, mengirimkan Nil*/

void dealokasi (address P); /*mengembalikan P ke sistem*/

57/77

Fakultas Ilmu Komputer – Universitas Sriwijaya /*PRIMITF BERDASARKAN ALAMAT*/

void InsertFirst(List *L, address P);

/*menambahkan elemen beraddress P sebagai elemen pertama*/ 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*/

/*PENGHAPUSAN SEBUAH ELEMEN*/

void DelFirst(List *L, address *P);

/*P adalah alamat elemen pertama list sebelum penghapusan*/

/*elemen list berkurang satu, firstelemen baru adalah suksesor elemen pertama yang lama*/

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)*/ /*PROSES SEMUA ELEMEN LIST*/ void Printinfo(List L);

/*semua info yang disimpan pada elemen list diprint*/ /*jika list ksoong, hanya menuliskan "list kosong"*/ 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*/ #endif

IV.

Kegiatan Praktikum

58/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

2. Ketik prototipe/primitif di atas dan simpan dengan nama list.h. 3. Buat file list.c yang berisi implementasi dari list.h.

4. 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 ?

59/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Dalam dokumen Modul Algoritma dan Struktur Data (1) (Halaman 51-59)

Dokumen terkait