INF202: Struktur Data

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

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

BAB II Senarai Berantai (Linked List)

Praktikum Algoritma dan Struktur Data

KONSEP POINTER DAN LINKED LIST

MODUL 6 SINGLE & DOUBLE LINKED LIST

Single Linked List (1)

LIST. Dewi Sartika, M.Kom

STRUKTUR DATA (2) Single Linked List

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

SENARAI BERANTAI (LINK LIST)

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

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

Praktikum 2. Senarai Berantai (Linked List) POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

Struktur Data II. Single Linked List - Non circular

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

KONSEP POINTER DAN LINKED LIST

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

BAB IX LINKED LIST (SENARAI BERANTAI)

Algoritma Pemrograman & Struktur Data

Algoritma dan Struktur Data. Linked List

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

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

STRUKTUR DATA single linked list non circular

04. Single Linked List

SINGLE LINKED LIST (NON CIRCULAR)

BAB IX LINKED LIST (SENARAI BERANTAI)

Algoritma dan Struktur Data. Pertemuan 7 Linked List

Single Linked List (2)

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

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

LAPORAN PRAKTIKUM IX. Oleh:

A. TUJUAN PEMBELAJARAN

Algoritma Pemrograman & Struktur Data

Array VS Linked List

Algoritma dan Struktur Data. Ramos Somya

LAPORAN PRAKTIKUM RESMI QUEUE

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

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

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

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

ALGORITMA DAN STRUKTUR DATA

Lab. Teknik Informatika Struktur Data 1

05. Double Linked List

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

Kode : IF2121 NIM :... Matakuliah : Algoritma dan Struktur Data Nama :... Hari, Tanggal : Senin, 13 November 2017 Waktu : 150 Menit

Linked List 6.3 & 7.3 NESTED LOOP

BAB VIII QUEUE (ANTRIAN)

Review : Sifat Implementasi Linear List dengan Array

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

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

PENGANTAR KOMPUTER & SOFTWARE II

A. TUJUAN PEMBELAJARAN

Algoritma dan Struktur Data

List akan disimpan dalam bagian memori komputer yang dinamakan HEAP

Pertemuan 7. REVIEW dan QUIS

Tutorial - Single Linked List

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

BAB VI. STATEMENT CONTROL

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

DIG1G3 Implementasi Struktur Data

Praktikum Algoritma dan Struktur Data 2010

KERUGIAN DAN KEUNTUNGAN LINKED LIST

Apakah Anda sering kesulitan untuk

STL DLL STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 3 : 29 Juni 2015

MODUL 6 PERULANGAN. Contoh1: 1. Pernyataan while Digunakan untuk pengambilan keputusan dan looping. Bentuk Umum:

PERTEMUAN 2 KONSEP DASAR PEMROGRAMAN

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

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

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

Spesifikasi: Ukuran: 14x21 cm Tebal: 225 hlm Harga: Rp Terbit pertama: Februari 2005 Sinopsis singkat:

STRUKTUR DATA Pertemuan 1 s.d 8

Gambar 3.1. Circular Single Linked List. Deklarasi bisa dilihat kembali di Single Linked List atau Double Linked List.

STL DLL STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 3 : 27 Juni 2016

Modul Praktikum Algoritma dan Struktur Data

Object Oriented Programming (OOP)

OPERATOR, PERULANGAN DAN SELEKSI KONDISI

IF IF ELSE. ELSE IF SWITCH CASE STATEMENT F NT OR, W HILE D O WHILE I 2

Array (Larik) Modul 7

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

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

Array ARRAY BERDIMENSI SATU. Representasi (Pemetaan) di memori. Lihat gambar dibawah ini, nilai data A (18) dismpan mulai dari alamat 1136 di memori.

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

# FOUR LOOPING. JAWABAN 1. #include <stdio.h> #include <conio.h> #define pi void main(){

Manage Sort STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 4 : 30 Juni 2015

PERCABANGAN P E N G E N A L A N P R O G R A M S T U D I T E K N I K I N F O R M AT I K A. Institut Teknologi Sumatera

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

STRUKTUR DATA. Literatur

Struct Lanjutan: Studi Kasus

PRAKTIKUM STRUKTUR DATA QUEUE. SULIDAR FITRI, M.Sc

Algoritma dan Struktur Data Praktikum 3. Pointer

BAB IV Antrian(Queue)

ARRAY PENGANTAR PROGRAM STUDI. Institut Teknologi Sumatera

PENGANTAR KOMPUTER & SOFTWARE II. Pengulangan (For) Tim Pengajar KU Institut Teknologi Sumatera

REVIEW ARRAY. Institut Teknologi Sumatera

Transkripsi:

Pertemuan 12: INF202: Struktur Data LINKED LIST (Senarai Berantai) Dosen: Wayan Suparta, PhD

1. Dasar Teori Linked List merupakan deretan elemen yang berdampingan di memori namun masih terpencar-pencar. Untuk mengakses semua elemen digunakan pointer tunggal. Masing-masing elemen terdiri dari dua bagian, yaitu sebuah data dan sebuah pointer yang disebut dengan pointer next. Dengan menggunakan struktur two-member seperti ini, linked list dibentuk dengan cara menunjuk pointer next suatu elemen ke elemen yang mengikutinya. Pointer next pada elemen terakhir merupakan NULL, yang menunjukkan akhir dari suatu list. Elemen pada awal suatu list disebut head, dan elemen terakhir dari suatu list disebut tail.

Ketika sebuah variabel dideklarasikan, terlebih dahulu harus diinisialisasi termasuk juga pengalokasian secara dinamis. Fungsi untuk mengalokasikan sebuah node baru: fungsi allocate_node() menggunakan malloc() untuk mendapatkan memori aktual, yang akan menginisialisasi suatu field data. next selalu diinisialisasi sebagai NULL. Untuk melihat kemungkinan alokasi memori gagal, maka fungsi allocate_node menghasilkan 0, sebaliknya 1 jika berhasil. Untuk membebaskan node digunakan fungsi free_node. Fungsi dari alokasi node adalah sebagai berikut :

Inisialisasi LIST setelah alokasi untuk node pertama sebagai berikut: Fungsi free_node() akan menghancurkan node yang menunjuk ke pointer yang dilewati karena itu pointer didefinsikan dengan NULL:

2. Operasi Pada Linked List Opearsi penting pada Linked List: Insert Delete Fungsi INSERT meliputi insert sebagai node awal (head) dari linked list insert setelah node tertentu insert sebelum node tertentu insert sebagai node akhir (tail) dari linked list. Fungsi DELETE meliputi delete sebagai simpul pertama(head) dari linked list delete setelah simpul tertentu delete simpul terakhir

(a) Insert sebagai node awal (head) dari linked list

(b) Insert setelah node tertentu

(c) Insert sebelum node tertentu Statement untuk insert setelah node tertentu dari linked list adalah

(d) Insert di akhir (tail) dari linked list

do

(2) Fungsi DELETE (a) Langkah penghapusan 1. Pointer first diarahkan data ke-2 2. Pointer p diarahkan pada data ke-1 3. Bebaskan pointer p (secara otomatis data ke-1 terhapus)

(b)

(c) Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Telusuri simpul s/d first->next = NULL 2. Arahkan pointer p ke first 3. Bebaskan pointer p->next (Simpul Terakhir) 4. Arahkan p->next ke NULL

3. MERUBAH ISI DARI SUATU SIMPUL PADA LINKED LIST 1. Menulusuri linked list sampai didapatkan simpul yang akan dirubah.

Contoh KASUS Polinomial Pertimbangkan dua polinomial f(x) dan g(x), yang dapat diwakili menggunakan linked list. h (x) dapat direpresentasikan dengan h(x)= f(x)+ g(x)= f(x) = ax3 + bx + c dan g(x) = mx4 + nx3 + ox2 + px + q Yaitu menambahkan konstanta dari polynomial yang sesuai dari eksponensial sama. Kedua polinomial dapat ditambahkan dengan: h(x)= f(x)+ g(x)= mx4 + (a + n) x3 + ox 2 + (b + p)x + (c + q) yaitu menambahkan konstanta dari polinomial yang sesuai dari eksponensial sama. Hasil dari H(x) dapat dijabarkan seperti gambar berikut:

Contoh Program 1: Menambah data di depan dan di akhir //Program linked list for Node Insert Kiri dan Insert Kanan #include <iostream> #include <cstdlib> #include <stdlib.h> #include <conio.h> using namespace std; struct node int urut; node *next; ; node *awal_ptr = NULL; node *posisi; //digunakan untuk membaca sepanjang list int option = 0; //Tambah data di depan void tambah_awal_list() node *baru; baru = new node; cout << "Masukkan Data : "; cin >> baru->urut; baru->next = NULL; if(awal_ptr == NULL) awal_ptr=baru; awal_ptr->next = NULL; else baru->next = awal_ptr; awal_ptr = baru;

//Tambah data di akhir void menambah_node_di_akhir() node *temp, *temp2; // Temporary pointers // menciptakan node baru temp = new node; cout << "Masukkan urut : "; cin >> temp->urut; temp->next = NULL; // Set up link pada node if (awal_ptr == NULL) awal_ptr = temp; posisi = awal_ptr; else temp2 = awal_ptr; // node tidak NULL list tidak kosong while (temp2->next!= NULL) temp2 = temp2->next; // Memindahkan pada next link dalam rantai temp2->next = temp; //Menampilkan data void display_list() node *temp; temp = awal_ptr; cout << endl; cout << "DATA ["; if (temp == NULL) cout << "List kosong!" << endl; else while (temp!= NULL) // Menampilkan detail data cout << "" << temp->urut << ","; if (temp == posisi) cout << " <<<< posisi node"; // cout << endl; temp = temp->next; cout << "] "; cout << "Akhir list!" << endl;

//Inisialisasi Nilai int init(int nilai) node *baru; baru = new node; baru->urut=nilai; baru->next = NULL; if(awal_ptr == NULL) awal_ptr=baru; awal_ptr->next = NULL; else baru->next = awal_ptr; awal_ptr = baru; //Program Utama int main() cout << "===================" << endl; cout << "STRUKTUR DATA - LINKED LIST" << endl; cout << "===================" << endl; awal_ptr = NULL; init(10); //data kanan init(12); init(5); init(7); init(22); //data kiri do // clrscr(); display_list(); cout << endl; cout << "MENU PILIHAN : " << endl; cout << "1. Tambah Sebelah Kiri" << endl; cout << "2. Tambah Sebelah Kanan" << endl; cout << "3. EXIT" << endl; cout << endl << " Pilihan >> "; cin >> option;

switch (option) case 1 : tambah_awal_list(); break; case 2 : menambah_node_di_akhir(); break; while (option!= 3); Tambah data kiri: Output Program: Tambah data kanan:

Contoh Program 2: Fungsi lainnya //Hapus data di depan void hapus_awal_node() node *temp; temp = awal_ptr; awal_ptr = awal_ptr->next; delete temp; //Hapus data di akhir void hapus_akhir_node() node *temp1, *temp2; if (awal_ptr == NULL) cout << "List kosong!" << endl; else temp1 = awal_ptr; if (temp1->next == NULL) delete temp1; awal_ptr = NULL; else while (temp1->next!= NULL) temp2 = temp1; temp1 = temp1->next; delete temp1; temp2->next = NULL;

//Pindah pointer ke posisi sebelumnya void pindah_posisi_sebelumnya() if (posisi->next == NULL) cout << Pointer berada di akhir list" << endl; else posisi = posisi->next; //Pindah pointer ke posisi berikutnya void pindah_posisi_berikutnya() if (posisi == awal_ptr) cout << Pointer berada pada awal list" << endl; else node *previous; // deklarasi pointer previous = awal_ptr; while (previous->next!= posisi) previous = previous->next; posisi = previous; //Tambah data di tengah void tambah_tengah_list() node *baru, *bantu; int posisi_sisip; if(awal_ptr!= NULL) cout<<"akan diinsert setelah Data Ke? "; cin>>posisi_sisip; baru =new node; bantu=awal_ptr; for(int i=1;i<posisi_sisip-1;i++) if(bantu->next!= NULL) bantu=bantu->next; else break; cout << "Masukkan urut : "; cin >> baru -> urut; baru->next = bantu -> next; bantu->next=baru; else cout<<"belum ada data!! silahkan isi data dulu..."; getch();

//Hapus data di posisi tengah void Hapus_tengah_list() int bykdata,posisi_hapus,poshapus; node *hapus, *bantu; if(awal_ptr!= NULL) cout<<" Akan dihapus pada data ke : "; cin>>posisi_hapus; bykdata=1; bantu=awal_ptr; while(bantu->next!= NULL) bantu=bantu->next; bykdata++; if((posisi_hapus<1) (posisi_hapus>bykdata)) cout<<"belum ada data!! Boleh memasukkan data.\n"; else bantu=awal_ptr; poshapus=1; while(poshapus<(posisi_hapus-1)) bantu=bantu->next; poshapus++; hapus=bantu->next; bantu->next=hapus->next; delete hapus; else cout<<"data Masih kosong, tidak bisa menghapus data dari tengah! "; getch();

//Program Utama Lengkap display_list(); cout << endl; cout << "MENU PILIHAN: " << endl; cout << "1. Tambah data di awal" << endl; cout << "2. Tambah data di akhir." << endl; cout << "3. Tambah data di tengah."<< endl; cout << "4. Hapus data di awal" << endl; cout << "5. Hapus data di akhir" << endl; cout << "6. Hapus data di tengah" << endl; cout << "7. Pindah posisi pointer ke berikutnya" << endl; cout << "8. Pindah posisi pointer ke sebelumnya" << endl; cout << "9. EXIT" << endl; cout << endl << " Pilihan >> "; cin >> option; switch (option) case 1 : tambah_awal_list(); break; case 2 : menambah_node_di_akhir(); break; case 3 : tambah_tengah_list(); break; case 4 : hapus_awal_node(); break; case 5 : hapus_akhir_node(); break; case 6 : Hapus_tengah_list(); break; case 7 : pindah_posisi_sebelumnya(); break; case 8 : pindah_posisi_berikutnya(); while (option!= 9);

A. Diketahui: LATIHAN 18 P1 = 6x 8 + 8x 7 + 5x 5 + x 3 + 15 P2 = 3x 9 + 4x 7 + 3x 4 + 2x 3 + 2x 2 + 10 P3 = x 2 + 5 Representasikan bilangan polinom dengan menggunakan linked list dan buatlah prosedur-prosedur untuk : Menyisipkan simpul di awal jika pangkat yang dimasukkan lebih dari pangkat tertinggi dari bilangan polinomial. Menyisipkan simpul di tengah jika pangkat dari bilangan yang kita sisipkan berada di tengah. Menyisipkan simpul di akhir jika pangkat dari bilangan yang disisipkan adalah 0. Menghapus simpul, baik di awal, di tengah, ataupun di akhir.

B. Dari contoh program 1 dan 2, gabungkan program tersebut dengan output proram: MENU PILIHAN: 1. Tambah data di awal 2. Tambah data di akhir 3. Tambah data di tengah 4. Hapus data di awal 5. Hapus data di akhir 6. Hapus data di tengah 7. EXIT C. Implementasikan sebuah single linked list yang dapat merepresentasikan data mahasiswa. Data mahasiswa berupa NIM, Nama, Alamat dan Indeks Prestasi. Buatlah fungsi-fungsi untuk menelusuri, menambah simpul dan menghapus simpul.