• Tidak ada hasil yang ditemukan

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

N/A
N/A
Protected

Academic year: 2021

Membagikan "LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS"

Copied!
23
0
0

Teks penuh

(1)

LINKED LIST

TUJUAN UMUM

Memahami konsep linked

list

TUJUAN KHUSUS

z

Mempelajari prasarat linked

list, pointer, sruct to pointer

(2)

LINKED LIST

Variabel bertipe data pointer adalah variabel yang isinya alamat (address) dari variabel lainnya.

Contoh

:

int a, b; /* a dan b adalah variabel integer*/

int *pa, *pb; /* pa dan pb adalah variabel pointer*/

Saat ini isi dari pa dan pb belum ditentukan, dengan assigment berikut:

pa = &a; pb = &b;

Maka pa berisi alamat a dan pb berisi alamat b.

Bial alamat a = 400 dan b = 402, maka pa berisi 400 dan pb berisi 402

400 a 400 pa

402 b 402 pb

Variabel a dan b dapa diisi secara tidak langsung (onderct assigment) memalui pa dan pb yaitu dengan :

*pa = 30; *pb = 20

400 30 a 400 pa 402 20 b 402 pb

(3)

Lebih Jauh tentang Pointer

Reference operator (&)

int A;

P = &A;

P merupakan alamat dari variabel A.

andy = 25;

fred = andy

ted = &andy;

Pertama kita memberikan nilai 25 pada variabel andy,

dimana setiap variabel yang dideklarasikan selalu mempunyai alamat di memori dalam hal ini dimisalkan 1776.

Kedua mengkopi isi dari variabel andy ke fred.

Ketiga mengkopi ke ted reference atau alamat dari

variabel andy.

Dereference operator (*)

Pointer dapat digunakan untuk mengisi nilai dari variabel yang ditunjuk.

*ted = 75

& is the reference operator and can be read as "address of" * is the dereference operator and can be read as "value

(4)

Variabel pointer dapat dibuat atau diciptakan

secara dinamis, yaitu mengalokasikan suatu

tempat di memori ketika program sedang

berjalan .

Dengan kemampuan seperti ini maka penggunaan

variabel pointer tidak hanya sekedar indirect

assigment seperti contoh di atas, melainkan

dapat membuat suatu struktur data di mana

banyak atau kurang sesuai dengan kebutukan.

Struktur tersebut di antaranya adalah Linked List.

DATA POINTER Elemen

Oleh karena itu diperlukan deklarasi untuk pointer: Head, Current dan Tail.

Struct node *Head, * Tail, * Current;

- Pointer Head selalu menunjuk ke node awal

- Pointer Tail selalu menunjuk ke node akhir

- Pointer Current dapat bergerak dari node awal

hingga node akhir

Struktur Linked List

Setiap elemen terdiri dari data dan pointer, bagian data

akan berisi informasi, bagian pointer akan berisi alamat

yang akan mengaitkan satu elemen dengan elemen

lainnya.

(5)

Pointer Current bergerak sesuai dengan arah anak panah. Node yang sedang ditunjuk oleh current disebut node aktif.

Linked list dapat dibangun dengan cara:

1. Insert depan, node baru selalu berada di depan

2. Insert belakang, node baru selalu berada di

belakang

(6)

// my first pointer #include <iostream> using namespace std; int main ()

{

int firstvalue, secondvalue;

int * mypointer; mypointer = &firstvalue; *mypointer = 10;

mypointer = &secondvalue; *mypointer = 20;

cout<<"firstvalue is "<<firstvalue<<endl; cout<< "secondvalue is "<<secondvalue<< endl; return 0; } // more pointers #include <iostream> using namespace std; int main () {

int firstvalue = 5, secondvalue = 15; int *p1, *p2; p1=&firstvalue; p2=&secondvalue; *p1= 10; *p2= *p1; p1 = p2; *p1 = 20;

cout<<"firstvalue is"<<firstvalue<< endl; cout<<"secondvalue is"<<secondvalue<< endl;

return 0; }

(7)

// more pointers #include <iostream> using namespace std; int main () { int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50;

for (int n=0; n<5; n++) cout << numbers[n] << ", "; return 0;

}

// pointer to functions

#include <iostream> using namespace std; int addition (int a, int b) { return (a+b); }

int subtraction (int a, int b) { return (a-b); }

int (*minus)(int,int) = subtraction;

int operation (int x, int y, int (*functocall)(int,int)) { int g;

g = (*functocall)(x,y); return (g);}

int main () {

int m,n; m = operation (7, 5, addition); n = operation (20, m, minus);

cout <<n; return 0; }

(8)

INSERT DEPAN

struct node{ char data;

struct node *next; };

struct node *head, *current, *tail; void create( )

{

head = current = NULL; }

void insert_depan(char data) {

Struct node *p;/*temporary node*/

p=(struct node*)malloc(sizeof(struct node)); p->data = data; p->next = head; head = current = p; } void main( ) { char c; create( ); do {

cout <<“Input Data (A..Z):”; cin >> c;

insert_depan(c); }

while(c !=“.”); )

(9)

Proses Insert Depan

Create( ); . HEAD . CURR NULL NULL Insert(‘A’);

p =(stuct node*)malloc(sizeof(struct node));

. P . p->data=data; . P A . . P A . p->next=head; p->data=data NULL head= current=p; . P A . NULL . . HEAD CURR Insert(‘B’);

p =(stuct node*)malloc(sizeof(struct node));

.

P .

(10)

. P A . p->next=head; B . NULL . . HEAD CURR head = current = p . P B . A . NULL . . HEAD CURR

(11)

INSERT BELAKANG

struct node{ char data;

struct node *next; };

struct node *head, *current, *tail;

void create( ) {

head = current = tail = NULL; }

void insert_belakang(char data) {

Struct node *p;/*temporary node*/

p=(struct node*)malloc(sizeof(struct node)); p->data = data;

p->next = NULL;

if (head == NULL) head = current= tail = p; else {tail->next = p; tail = p;};

} head = current = p; } void main( ) { char c; create( ); do {

cout <<“Input Data (A..Z):”; cin >> c;

insert_belakang(c); }

while(c !=“.”);

(12)

Proses Insert Belakang

Insert(‘A’);

p =(stuct node*)malloc(sizeof(struct node));

. P . p->data=data; . P A . . P A . p->next=NULL; p->data=data NULL if (head == NULL) head = current = tail = p;

else {tail->next = p};tail = p;};

. P A . NULL . . HEAD CURR . Tail Insert(‘B’);

p =(stuct node*)malloc(sizeof(struct node));

. P . p->data=data; . P B . . P B . p->next=NULL; p->data=data NULL

(13)

if (head == NULL) head = current = tail = p; else {tail->next = p};tail = p;};

. P A . NULL . . HEAD CURR . B . . P A . NULL . . HEAD CURR . B . Tail Tail

(14)

Operasi pada Linked List

1. Create( )

Menciptakakn linked list baru dalam keadaan kosong 2. Insert(elemen_type e)

Menambahkan satu elemen ke dalama linked list di bagian depan *).

3. Empty( )

Memeriksa apakah linked list dalam keadaan kosong. 4. Retrieve(elemen_type *e)

Membaca informasi dari node yang sedang ditunjuk oleh current pointer ke variabel e.

5. Update(elemen_type e)

Mengubah informasi dari node yang sedang ditunjuk oleh currentpointer dengan data dari variabel e.

6. Find_First( )

Memindahkan current pointer node awal. 7. Find Next(fail)

Memindahkan current pointer node berikutnya, bila node berikutnya adalah node terakhi, maka operasi ini tidak berfungsi.

8. Delete( )

Menghapus node yang ditunjuk oleh current pointer, kemudian current pointer direset ke posisi awal.

9. Clear( )

(15)

Implementasi operasi Delete void delete()

{

struct node *p;

if (current == head) head =head ->next; else

{

p=head;

while (p->next !=current) p=p->next; p=->current->next; }; Free(current); Current = head; }

(16)

PROSES DELETE

1. Posisi Current = Head

A . . . HEAD CURR . B . Tail E . C . D . NULL head = head->next; . A . . CURR . B . Tail E . C . D . NULL HEAD free(current); . . . B . Tail . E . C . D . NULL HEAD CURR current = head; B . . . CURR . C . Tail E . D . NULL HEAD

(17)

2. Posisi Current ≠ Head A . . . HEAD CURR . B . Tail E . C . D . NULL p =head;

while (p->next != current) p = p->next;

A . . . HEAD CURR . B . Tail E . C . D . NULL . P . P . P p ->next = current->next; A . . . HEAD CURR . B . Tail E . C . D . NULL . P free(current); A . . . HEAD CURR . B . Tail E . C . . NULL . P

(18)

current = head; A . . . HEAD CURR . B . Tail E . C . NULL Latihan:

1. Buat modul untuk melakukan operasi: Insert (after

current), Find_First, Find_Next, Update, Retrieve, Delete, Empty, dan Clear.

(19)

Empty

void empty()

{ if (head = NULL) ;return 0; return (1);}

Find First

Void findfirst() { current = head;}

Find Next

void findnext()

{ if (current->next !=NULL) current = current->next; }

Retrieve void retrieve(e) { e = current->isi;} Update void update(e) { current->isi = e;} Delete Current void delete() int *x; { if (current != head) {x = head;

while (x->next != current) {x= x->next; x->next =curent->next;} else head = head->next; free(current); current = head; }

(20)

Clear

void clear();

{ while (head !=NULL) {current = head;

head = head ->next; free(current);}}

(21)

Double Linked List

Struktur double linked list mempunyai bentuk umum:

. . . Head Next Data NULL . . . . . . . . . . . Current . Tail NULL Prev

Deklarasi untuk Node: struct node {

int data;

struct node *next; struct node *prev; };

Double linked list dapat dibangun dengan 2 cara:

1. Insert Before; node baru berada sebelum posisi

current pointer

2. Insert After; node baru berada setelah posisi

(22)

Implementasi Circular Double Linked list

struct node {

int data;

struct node *next; struct node *prev; };

struct node *head, *current; int n; /*jumlah node*/

void create( )

{head = current = NULL; n=0;}

void insert_after(int data) {

struct node *p; /*temporary node*/

p =(struct node*)malloc(sizeof(struct node)); p->data=data; if(head==NULL) {head = p; p->next = p; p->prev=p;} else {current->next->prev = p; p->next =current->next; p->prev=current; current->next=p;} current=p; n++; }

(23)

void insert_before(int data) {

if head == NULL) current =current->prev; insert_after(data);

if (current->next == head) head = current; } void delete( ) {struct node *p; p=current; current->prev->next=current->next; current->next->prev=current->prev; current=current->next; if (n==1) head= NULL;

elseif (head=p) head=current; n--;free(p);} void find_next( ); { current=current->next; } void find_prev( ) { current=current->prev; }

Referensi

Dokumen terkait

Dengan mengikuti training SW 03, Anda diharapkan dapat menggunakan software AnswerTree yang memiliki berbagai metode analisis untuk melakukan prediksi

Namun secara umum apabila efektivitas kinerja tersebut dikaitkan dengan kegiatan pelayanan jasa, suatu kinerja layanan akan dikatakan efektif jika pelanggan merasa puas

Otitis media akut dapat dise#a#kan invasi virus Campak ke dalam telin$a ten$a!% Gendan$ telin$a #iasana !peremia pada fase prodormal dan stadium erupsi% 4ika terjadi invasi

positi untuk (at bermuatan negati !anoda#. 3lektrolit dalam jam lemon bertenaga adalah asam sitrat. erakan elektron dimulai ketika lapisan seng pada salah satu paku

Melihat keberagaman atraksi yang dimiliki oleh Desa Wisata Pentingsari, penulis melihat bahwa atraksi-atraksi yang dimiliki menjadi daya tarik yang dapat diolah

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

Buatlah method untuk menambahkan Node di Double Linked List, setelah Node tertentu (pembacaan List menggunakan pembacaan mundur). public

– Pada linked list : rear akan menunjuk ke node baru yang ditunjuk oleh tail... Penambahan element baru pada bagian