• Tidak ada hasil yang ditemukan

Struktur Data Modul 09 Circular Linked L

N/A
N/A
Protected

Academic year: 2018

Membagikan "Struktur Data Modul 09 Circular Linked L"

Copied!
6
0
0

Teks penuh

(1)

MODUL 09

CIRCULAR LINKED LIST

I. TUJUAN

- Mengenalkan linked list sirkular kepada praktikan.

- Praktikan dapat memahami penggunaan linked list sirkuler dan

mengimplementasikannya

ke

dalam

program

sederhana

dan

mampu

mengembangkannya.

II. DASAR TEORI

Linked list sirkuler adalah list yang jika ditelusuri maka nantinya akan kembali ke

simpul pertama dan tidak berhenti pada simpul terakhir. Di situlah letak perbedaan

linked list sirkuler dengan linked list linear. Kelebihan linked list sirkuler adalah setiap

simpul dari list ini dapat dicapai dari sembarang simpul yang lain.

Berikut adalah contoh pendeklarasian simpul linked list dalam bahasa C:

typedef int infotype;

typedef struct tNode *address; typedef struct tNode

{ infotype info;

address Next; } Node;

Linked list sirkuler bisa diilustrasikan sebagai berikut:

A

B

C

Operasi-operasi yang bisa dilakukan pada linked list sirkuler sama dengan operasi-

operasi pada linked list linear.

Prosedur penambahan node bisa dilakukan dengan 3 cara, yaitu insert first

(penambahan di depan), insert after (penambahan di tengah), dan insert last (penambahan

di akhir).

Sementara penghapusannya pun bisa dilakukan dengan 3 cara, yaitu delete first

(penghapusan depan), delete after (penghapusan di tengah), dan delete last (penghapusan

akhir).

Pada saat melakukan penelusuran pada linked list sirkuler harus diketahui terlebih

dahulu simpul pertamanya. Oleh karena itu biasanya digunakan linked list berkepala.

III. DEMO

Ketikkan program di bawah ini dan pahami cara kerjanya :

header.h

//FILE HEADER

#include <iostream.h>

typedef struct tNode

{

}Node;

int info;

tNode* next;

(2)

typedef struct

{

}List;

address first;

//header

void createEmpty(List &L);

//IS: L sembarang,

//FS: L terdefinisi dan kosong

bool isEmpty(List L);

//I: L terdefinisi,

//O: returnkan true jika L kosong, returnkan false jika isi

bool isOneElmt(List L);

//I: L terdefinisi tidak kosong,

//O: returnkan true jika L Cuma berisi 1 node saja, returnkan false jika

// berisi lebih dari 1 node

address alokasi(int X);

//I: X terdefinisi, ada isinya,

//O: returnkan alamat node baru yg info-nya=X dan next-nya NULL

address findLast(List L);

//I: L terdefinisi mungkin kosong

//O: returnkan node terakhir dari L, kalau L kosong returnkan NULL

address prevNode(List L, address P);

//I: L terdefinisi tdk kosong, P valid dalam L //O: returnkan node dalam L sebelum P

void insertFirst(List &L, address P);

//IS: L terdefinisi, mungkin kosong, P alamat terdefinisi tdk NULL //FS: Node yg alamatnya P menjadi node pertama dalam List L

void insertLast(List &L, address P);

//IS: L terdefinisi, mungkin kosong, P alamat terdefinisi tdk NULL //FS: Node yg alamatnya P menjadi node terakhir dalam List L

void insVFirst(List &L, int X);

//IS: L terdefinisi, mungkin kosong, X value terdefinisi tdk kosong //FS: Node baru yg info-nya=X menjadi node pertama dalam List L

void insVLast(List &L, int X);

//IS: L terdefinisi, mungkin kosong, X value terdefinisi tdk kosong //FS: Node baru yg info-nya=X menjadi node terakhir dalam List L

void delFirst(List &L);

//IS: L terdefinisi, mungkin kosong

//FS: Node awal dalam List L terhapus, kalau L kosong tdk terjadi apa2

void delAll(List &L);

//IS: L terdefinisi, tidak kosong

//FS: Semua Node dalam List L terhapus, L menjadi kosong

void print(List L);

//IS: L terdefinisi, mungkin kosong

//FS: Semua info Node dari List L tercetak ke layar monitor

void printFrom(List L, address P);

//IS: L terdefinisi, tidak kosong, P alamat valid dari salah node dalam L //FS: Semua info Node dari List L tercetak mulai dari P sampai ke prev ke

(3)

int nbNode(List L);

//I: L terdefinisi, mungkin kosong

//O: returnkan cacah (banyaknya) node dalam L

int nbNode2(List L); //nBNode versi 2

//I&O: sama dengan nbNode

bool isFound(List L, int X);

//I: L terdefinisi tidak kosong, X terdefinisi

//O: returnkan true jika ada node dalam L yang info-nya=X, returnkan false

// jika tidak

address search(List L, int X);

//I: L terdefinisi tidak kosong, X terdefinisi

//O: returnkan alamat node dalam L yang info-nya=X, returnkan NULL jika

// tidak ada node seperti itu

List Clone(List L);

//I: L terdefinisi tidak kosong

//O: returnkan List yg sama sekali baru dan yang info-info serta urutannya

// sama persis dengan L

//FILE IMPLEMENTASI

#include "circularList.h"

//implementasi

void createEmpty(List &L)

{

L.first=NULL; }

bool isEmpty(List L)

{

if(L.first==NULL) return true;

else return false;

}

bool isOneElmt(List L)

{

if(L.first->next==L.first) return true;

else return false;

}

address alokasi(int X)

{

address findLast(List L) {

address P;

if(isEmpty(L)) return NULL;

else

{

for(P=L.first;P->next!=L.first;P=P->next){}

return P;

} }

address prevNode(List L, address P) {

(4)

for(temp=L.first;temp->next!=P;temp=temp->next){}

return temp;

}

void insertFirst(List &L, address P)

{

address last;

if(isEmpty(L))

{

void insertLast(List &L, address P)

{

address temp;

if(isEmpty(L)) insertFirst(L,P);

else

insertLast(L, alokasi(X)); }

void delFirst(List &L)

{

if(!isEmpty(L))

{

address last=findLast(L); address P=L.first;

L.first=L.first->next;

last->next=L.first;//jika dari isOneElmt,

//maka last ini tdk ada artinya.. tapi tdk error

delete P;

} }

void delAll(List &L)

{

while(!isEmpty(L)) delFirst(L);

}

void print(List L)

{

if(!isEmpty(L))

{

address P=L.first;

do{

(5)

}while(P!=L.first);

cout<<endl; }

}

void printFrom(List L, address P)

{

address prev=prevNode(L,P);

for(address a=P;a!=prev;a=a->next)

{

cout<<a->info<<" "; }

for(address P=L.first;P->next!=L.first;P=P->next) cacah++;

return ++cacah; //plus one first for last node before return

//bisa gunakan do while, tanpa ++ lagi }

}

int nbNode2(List L) //nBNode versi 2

{

int cacah=0;

address P=L.first;

if(!isEmpty(L))

{

do

{

cacah++; P=P->next;

}while(P!=L.first);

} address last;

if(isEmpty(L)) return false;

else

{

last=findLast(L);

for(P=L.first;P!=last&&P->info!=X;P=P->next){}

return P->info==X || last->info==X; //X is either in last node

//or other nodes, if none then return false }

}

address search(List L, int X)

{

address P; address last;

if(isEmpty(L)) return NULL;

else

{

last=findLast(L);

for(P=L.first;P!=last && P->info!=X;P=P->next){}

if(P!=last) return P;

(6)

else return NULL; }

}

List Clone(List L) {

List temp; address P,last;

createEmpty(temp);

if(!isEmpty(L))

{

last=findLast(L);

for(P=L.first;P->next!=L.first;P=P->next)

insVLast(temp,P->info); insVLast(temp,last->info); }

return temp;

}

//FILE MAIN

#include "circularList.h"

void main()

{

List LC;

createEmpty(LC); insVLast(LC,10); insVLast(LC,11); insVLast(LC,12); insVLast(LC,13); insVLast(LC,14); insVFirst(LC,9); print(LC);

int x=nbNode(LC);

address y=findLast(LC);

cout<<"Banyaknya node : "<<x<<endl; cout<<"Node terakhir : "<<y->info<<endl; address z=search(LC,13);

if(z!=NULL) cout<<"Isi z (by search) adalah : "<<z->info<<endl;

else cout<<"tdk ditemukan by search"<<endl;

if(isFound(LC,9)) cout<<"isFound menemukan"<<endl;

else cout<<"tdk ditemukan by isFound"<<endl;

Referensi

Dokumen terkait

Hasil percobaan pada Tabel 2 menunjukkan bahwa perlakuan umur tanaman tidak mempengaruhi lama umur simpan, sedangkan semakin tua umur petik maka semakin cepat kematangan

Fungsi deletenode( ) akan menghapus node pada posisi curr jika linked list tidak kosong dan memindahkan pointer curr ke posisi node pertama, atau curr bernilai NULL apabila linked

Kemudian proses belajar mengajar pun dimulai dengan pembahasan materi Asmaul Husna dengan menggunakan metode The Learning Cell, setelah kegiatan pembelajaran

Monitoring dan evaluasi perencanaan pembangunan sanitasi dilakukan oleh Tim Anggaran, Kepala SKPD kegiatan sesuai dengan tugas pokok dan fungsinya serta masyarakat dapat

menguduskan hari Sabat di gereja dengan lebih baik adalah bahwa keuskupan, yang bertanggung jawab untuk merencanakan pertemuan sakramen diminta untuk berembuk dengan dewan-

25 SK SERI KOTA PUTERI MOHD SENIN BIN KASSIM 70 SJKT DESA CEMERLANG SHANTAKUMARI A/P SINGARAM. 26 SK PERIGI ACHEH MUHAMOD SUHAIMI BIN SULEIMAN 71 SJKT LADANG ULU TIRAM SUBRAMANIAM A/L

1) Jasa Akses Internet, maksudnya adalah penyedia jasa sebuah akses internet yang diberikan kepada masyarakat untuk digunakan dan diambil manfaatnya. 2) Alat

Penelitian ini bertujuan untuk mengetahui korelasi rata-rata jumlah konsumsi hasil laut dengan perkembangan visual-motor anak batita yang tinggal di sekitar Pantai Kenjeran, yaitu