KONSEP POINTER DAN LINKED LIST

dokumen-dokumen yang mirip
KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

Struktur Data II. Single Linked List - Non circular

STRUKTUR DATA (2) Single Linked List

KONSEP POINTER DAN LINKED LIST

Pertemuan 4. Single Linked List non Circular Menggunakan Head dan Tail

Pertemuan 3. Perubah Dinamis (Dinamic variable) Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

Data structure :Metode LINK LIST. Kusnawi, S.Kom, M.Eng STMIK AMIKOM Yogyakarta

STRUKTUR DATA single linked list non circular

Praktikum Algoritma dan Struktur Data

SINGLE LINKED LIST (NON CIRCULAR)

Array VS Linked List

DOUBLE LINKED LIST. Danang Wahyu Utomo Danang Wahyu Utomo, M.Kom, M.CS

MODUL 6 SINGLE & DOUBLE LINKED LIST

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

SINGLE LINKED LIST NON CIRCULAR (SENARAI BERANTAI TUNGGAL TIDAK BERPUTAR)

//membuat sebuah tipe data baru yang terdiri dari. //field data bertipe integer //field next merupakan pointer dari list

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

LAPORAN PRAKTIKUM IX. Oleh:

BAB IX LINKED LIST (SENARAI BERANTAI)

DIKTAT PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

Pertemuan 7. REVIEW dan QUIS

Senarai berantai. linked list. Pertemuan keenam Struktur data st3telkom.ac.id. by : tenia wahyuningrum & Sisilia Thya Safitri

Single Linked List (1)

Algoritma dan Struktur Data

LIST. Dewi Sartika, M.Kom

Tutorial - Single Linked List

MODUL PRAKTIKUM STRUKTUR DATA FAKULTAS ILMU KOMPUTER UNIVERSITAS ESA UNGGUL

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Algoritma dan Struktur Data. Linked List

SENARAI BERANTAI (LINK LIST)

Review : Sifat Implementasi Linear List dengan Array

ALGORITMA DAN STRUKTUR DATA

BAB IX LINKED LIST (SENARAI BERANTAI)

Algoritma dan Struktur Data. Ramos Somya

Double linked list. Gambar 1. Double linket list dengan empat simpul Deklarasi Double Linked List di dalam Pascal :

PERTEMUAN KE 11. Linked List. Apa Itu Linked List?

05. Double Linked List

BAB II Senarai Berantai (Linked List)

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

Linked List 6.3 & 7.3 NESTED LOOP

Algoritma Pemrograman & Struktur Data

A. TUJUAN PEMBELAJARAN

04. Single Linked List

Modul Praktikum Algoritma dan Struktur Data

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

1. Traversing Untuk algoritma traversing sama seperti pada single Link List

Lab. Teknik Informatika Struktur Data 1

Algoritma dan Struktur Data. Pertemuan 7 Linked List

Pertemuan 3 RECORD. Contoh penggunaan record (dalam program PASCAL) : Type Siswa = record Nama : string[25]; Kelas : 1..6; Nilai : real; end;

PENGENALAN List merupakan sebuah pemikiran/konsep struktur data yang sangat dasar pada pemrograman agar lebih fleksibel. Setiap elemen akan ditambahka

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

LAPORAN PRAKTIKUM RESMI QUEUE

STRUKTUR DATA POKOK BAHASAN - 8 QUEUE ( ANTRIAN)

Menghapus Pointer Statement yang digunakan untuk menghapus pointer adalah Dispose, yang mempunyai bentuk umum : Dispose(peubah) ;

List akan disimpan dalam bagian memori komputer yang dinamakan HEAP

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

Algoritma dan Struktur Data. Ramos Somya

ALGORITMA & PEMROGRAMAN

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

Linked List dan Implementasinya dalam Bahasa Java

LIST BERKAIT(LINKED LIST)

REPRESENTASI FISIK LIST LINEAR

DIG1G3 Implementasi Struktur Data

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Pointer & Function. Alfa Faridh Suni, S.T., M.T. PTIK

QUEUE (ANTREAN) Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu

01. Review Array, Pointer dan Struktur

Pada kondisi ini proses penghapusan tidak bisa dilakukan Kondisi linked list memiliki hanya 1 data{satu simpul} Akhir. Akhir

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

# NINE Queue dengan Array

Dinamik Linked List. hari bulan tahun

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

STACK DAN QUEUE. Pengertian Stack Dan Queue. stack & queue. Last saved by KENKEINA Created by KENKEINA

KERUGIAN DAN KEUNTUNGAN LINKED LIST

Apakah Anda sering kesulitan untuk

3. DOUBLE LINK LIST. Lab. Teknik Informatika Struktur Data 1

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

Linked List. Bandung 2013

BAB III QUEUE (ANTRIAN)

// Created by Andri Andriyan // Linked List. #include <stdlib.h> #include <conio2.h> #include <stdio.h>

Lecture Notes On Algorithms and Data Structures. Oleh Thompson Susabda Ngoen

A B C D E F. Gambar 1. Senarai berantai dengan 6 simpul

Struktur Data Array. Rijal Fadilah S.Si

Pengenalan Struktur Data. Farah Zakiyah Rahmanti 2014

: Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Linked List. Single Linked List

Algoritma Pemrograman & Struktur Data

03 LINKED LIST. Slide 0 voice. Slide 1 voice. Slide 2 voice. Thompson Susabda Ngoen 1 P a g e

BAB IV Antrian(Queue)

DOUBLY LINKED LIST PROGRAM : DOUBLY LINKED LIST (TAMBAH SIMPUL DI BELAKANG)

Struct Lanjutan: Studi Kasus

Penambahan Simpul (Node)

Bab 4 Pointer dan Struktur Data Dinamik 16 BAB IV POINTER DAN STRUKTUR DATA DINAMIK TUJUAN PRAKTIKUM TEORI PENUNJANG

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 1)

A. TUJUAN PEMBELAJARAN

Transkripsi:

Pertemuan 4

KONSEP POINTER DAN LINKED LIST Untuk mengolah data yang banyaknya tidak bisa ditentukan sebelumnya, maka disediakan satu fasilitas yang memungkinan untuk menggunakan suatu perubah yang disebut dengan perubah dinamis (Dinamic variable) Perubah Dinamis (Dinamic variable) Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

KONSEP POINTER DAN LINKED LIST Perbedaan Perubah Statis & Dinamis Pada perubah statis, isi Memory pada lokasi tertentu (nilai perubah) adalah data sesungguhnya yang akan diolah. Pada perubah dinamis, nilai perubah adalah alamat lokasi lain yang menyimpan data sesungguhnya. Dengan demikian data yang sesungguhnya dapat dimasukkan secara langsung. Dalam hal cara pemasukkan data dapat diilustrasikan seperti dibawah ini.

DEKLARASI POINTER Pointer digunakan sebagai penunjuk ke suatu alamat memori Dalam pemrograman C++, Type Data Pointer dideklarasikan dengan bentuk umum : Type Data * Nama Variabel; Type Data dapat berupa sembarang type data, misalnya char, int atau float. Sedangkan Nama veriabel merupakan nama variabel pointer

DEKLARASI POINTER Contoh penggunaan pointer dalam program C++: Void main() { int x,y,*z; x = 75; //nilai x = 75 y = x; //nilai y diambil dari nilai x z = &x; //nilai z menunjuk kealamat pointer dari nilai x getch();

LINKED LIST (LINKED LIST) Salah satu Struktur Data Dinamis yang paling sederhana adalah Linked List atau Struktur Berkait atau Senarai Berantai, yaitu suatu kumpulan komponen yang disusun secara berurutan dengan bantuan Pointer. Linked List (Senarai Berantai) disebut juga dengan Senarai Satu Arah (One-Way List). Masing-masing komponen dinamakan dengan Simpul (Node).

Perbedaan Karakteristik Array dan Linked List

LINKED LIST (LINKED LIST) Setiap simpul dalam suatu Linked List terbagi menjadi dua bagian,yaitu : 1. Medan Informasi Berisi informasi yang akan disimpan dan diolah. 2. Medan Penyambung (Link Field) Berisi alamat berikutnya. Bernilai 0, Jika Link tersebut tidak menunjuk ke Data (Simpul) lainnya. Penunjuk ini disebut Penunjuk Nol.

LINKED LIST (LINKED LIST)

PENYAJIAN LINKED LIST DALAM MEMORI

Bentuk Node Single Linked List non Circular Single : field pointer-nya hanya satu dan satu arah,pada akhir node pointernya menunjuk NULL Menempati alamat memori tertentu Linked List : node-node tersebut saling terhubung satu sama lain.

Bentuk Node Single Linked List non Circular Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.

Pembuatan Single Linked List non Circular Deklarasi Node : typedef struct TNode{ int data; TNode *next; ; Keterangan: Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan field next yang bertipe pointer dari TNode

Pembuatan Single Linked List non Circular Setelah pembuatan struct, buat variabel head yang bertipe pointer dari TNode yang berguna sebagai kepala linked list. Digunakan perintah new untuk mempersiapkan sebuah node baru berserta alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya ditunjuk ke NULL. TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL;

Single Linked List non Circular Menggunakan Head Dibutuhkan satu buah variabel pointer : head yang akan selalu menunjuk pada node pertama

Deklarasi Pointer Penunjuk Head Single Linked List Manipulasi linked list tidak dapat dilakukan langsung ke node yang dituju, melainkan harus menggunakan suatu pointer penunjuk ke node pertama (Head) dalam linked list Deklarasinya sebagai berikut: TNode *head;

Fungsi Inisialisasi Single Linked List void init() { head = NULL; Function untuk mengetahui kondisi Single Linked List Jika pointer head tidak menunjuk pada suatu node maka kosong int isempty() { if (head == NULL) return 1; else return 0;

Menambah Node di Depan Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara: node head ditunjukkan ke node baru tersebut. Prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan.

Menambah Node di Depan dengan C++ void insertdepan(int databaru) { TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isempty()==1) { head=baru; head->next = NULL; else { baru->next = head; head = baru; printf( Data masuk\n );

Ilustrasi penambahan node didepan

Ilustrasi penambahan node didepan

Menambah Node di Belakang Penambahan data dilakukan di belakang, namun pada saat pertama kali, node langsung ditunjuk oleh head. Penambahan di belakang membutuhkan pointer bantu untuk mengetahui node terbelakang. Kemudian, dikaitkan dengan node baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.

Menambahan node dibelakang dengan C++ void insertbelakang (int databaru) { TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isempty()==1) { head=baru; head->next = NULL; else { bantu=head; while(bantu->next!=null){ bantu=bantu->next; bantu->next = baru; printf("data masuk\n );

Ilustrasi penambahan node dibelakang

Ilustrasi penambahan node dibelakang

Menghapus Node di Depan Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunakan suatu pointer lain (hapus) yang digunakan untuk menunjuk node yang akan dihapus, barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete. Sebelum data terdepan dihapus, terlebih dahulu head harus menunjuk ke node berikutnya agar list tidak putus, sehingga node setelah head lama akan menjadi head baru Jika head masih NULL maka berarti data masih kosong!

Menghapus Node didepan dengan C++ void hapusdepan () { TNode *hapus; int d; if (isempty()==0){ if(head->next!= NULL){ hapus = head; d = hapus->data; head = head->next; delete hapus; else { d = head->data; head = NULL; printf( %d terhapus\n,d); else cout<<"masih kosong\n";

Ilustrasi penghapusan node didepan

Menghapus Node di Belakang Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus, pointer bantu untuk menunjuk node sebelum node yang dihapus yang akan menjadi node terakhir. Pointer bantu digunakan untuk menunjuk ke nilai NULL. Pointer bantu selalu bergerak sampai sebelum node yang akan dihapus, kemudian pointer hapus diletakkan setelah pointer bantu. Selanjutnya pointer hapus akan dihapus, pointer bantu akan menunjuk ke NULL.

Menghapus node dibelakang dengan C++ void hapusbelakang(){ TNode *hapus,*bantu; int d; if (isempty()==0){ if(head->next!= NULL){ bantu = head; while(bantu->next->next!=null){ bantu = bantu->next; hapus = bantu->next; d = hapus->data; bantu->next = NULL; delete hapus; else { d = head->data; head = NULL; printf( %d terhapus\n,d); else printf( Masih kosong\n );

Ilustrasi penghapusan node dibelakang

Function untuk menghapus semua elemen Linked List void clear() { TNode *bantu,*hapus; bantu = head; while(bantu!=null) { hapus = bantu; bantu = bantu->next; delete hapus; head = NULL;

Menampilkan / Membaca Isi Linked List Linked list ditelusuri satu-persatu dari awal sampai akhir node. Penelusuran dilakukan dengan menggunakan pointer bantu, karena pointer head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. Penelusuran dilakukan terus sampai ditemukan node terakhir yang menunjuk ke nilai NULL. Jika tidak NULL, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait. Jika head masih NULL berarti data masih kosong!

Menampilkan / Membaca Isi Linked List void tampil(){ TNode *bantu; bantu = head; if(isempty()==0){ while(bantu!=null){ cout<<bantu->data<<" "; bantu=bantu->next; printf( \n ); else printf( Masih kosong\n );

Single Linked List non Circular Menggunakan Head dan Tail Dibutuhkan dua variabel pointer : head dan tail Head selalu menunjuk pada node pertama, sedangkan tail selalu menunjuk pada node terakhir. Kelebihan dari Single Linked List dengan Head & Tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu.

Single Linked List non Circular Menggunakan Head dan Tail Inisialisasi Linked List TNode *head, *tail; Fungsi Inisialisasi Linked List void init(){ head = NULL; tail = NULL; Function untuk mengetahui kondisi LinkedList kosong / tidak int isempty(){ if(tail == NULL) return 1; else return 0;

Menambah Node di Depan Dengan Head dan Tail void insertdepan(int databaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isempty()==1){ head=tail=baru; tail->next=null; else { baru->next = head; head = baru; printf( Data masuk\n );

Ilustrasi penambahan node didepan dengan head dan tail

Ilustrasi penambahan node didepan dengan head dan tail

Menambah Node di Belakang Dengan Head dan Tail void tambahbelakang(int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isempty()==1){ head=baru; tail=baru; tail->next = NULL; else { tail->next = baru; tail=baru; printf("data masuk\n );

Ilustrasi penambahan node dibelakang dengan head dan tail

Ilustrasi penambahan node dibelakang dengan head dan tail

Menghapus Node di Depan (Dengan Head dan Tail) Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan pointer hapus pada head, kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus pointer hapus dengan menggunakan perintah delete. Jika tail masih NULL maka berarti list masih kosong!

Menghapus Node di Depan (Dengan Head dan Tail) void hapusdepan(){ TNode *hapus; int d; if (isempty()==0){ if(head!=tail){ hapus = head; d = hapus->data; head = head->next; delete hapus; else { d = tail->data; head=tail=null; printf( %d terhapus\n,d); else printf("masih kosong\n );

Ilustrasi Menghapus Node di Depan (Dengan Head dan Tail)

Menghapus Node di Belakang (Dengan Head dan Tail) Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada tail. Jika tail masih NULL maka berarti list masih kosong! Dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu, dan bantu tersebut akan menjadi tail yang baru. Setelah itu hapus pointer hapus dengan menggunakan perintah delete.

Menghapus Node di Belakang (Dengan Head dan Tail) void hapusbelakang(){ TNode *bantu,*hapus; int d; if (isempty()==0){ bantu = head; if(head!=tail){ while(bantu->next!=tail){ bantu = bantu->next; hapus = tail; tail=bantu; d = hapus->data; delete hapus; tail->next = NULL; else { d = tail->data; head=tail=null; cout<<d<<" terhapus\n"; else cout<<"masih kosong\n";

Ilustrasi Menghapus Node di Belakang (Dengan Head dan Tail) null

Function untuk menghapus semua elemen LinkedList dengan HEAD & TAIL void clear() { TNode *bantu,*hapus; bantu = head; while(bantu!=null) { hapus = bantu; bantu = bantu->next; delete hapus; head = NULL; tail = NULL;

Latihan II Soal Struktur Data (Review Materi Pertemuan 4) Dikumpulkan pada pertemuan selanjutnya Buatlah Ilustrasi / Penggambaran untuk menambah dan menghapus node di posisi tengah pada : 1. Single Linked List dengan Head 2. Single Linked List dengan Head & Trail