Linked List Alokasi Memori Dinamis Berbagai jenis variabel
Linked List
Alokasi Memori Dinamis • Berbagai jenis variabel yang berisi data, alamat, variabel tunggal, dan struktur data digunakan pada saat menulis program. • Variabel-variabel tersebut dideklarasikan lalu akan dialokasikan pada memori komputer(segmen memori) ketika program dijalankan. • Ketika tempat alokasi yang diperlukan pada memori melebihi kapasitas segmen memorinya maka akan timbul kesalahan pada saat compiling.
Ilustrasi • Jika compiler yang digunakan modus pengalamatan 16 bit maka segmen memori berukuran 65 kilobyte (65535 byte). • Jika terdapat deklarasi int nilai[40000]; akan menimbulkan kesalahan pada saat di-compile. Karna sebuah array dengan 40000 elemen memerlukan tempat 80000 byte pada segmen memori. ( integer size memori = 2 byte)
• Alokasi dinamis disediakan penggunaannya oleh bahasa pemrograman. • Heap memory merupakan tempat dikumpulkannya sisa(free) memori yang belum terpakai yang besarnya ditentukan oleh manajemen memori sistem operasi. • Pendekatan alokasi dinamis, pada saat program dijalankan memori belum perlu dialokasikan seluruhnya, pada saat program meminta sejumlah memori, baru dialokasikan pada saat itu juga.
Fungsi Alokasi Dinamis pada C++ • Menggunakan instruksi malloc() yang function prototype nya dideklarasikan di header file malloc. h void *malloc(size_t size); • Fungsi ini akan mengalokasikan blok memori sebesar size. Jika berhasil maka function mengembalikan address awal blok memori, jika gagal akan mengembailkan nilai NULL. • Hasil alokasi di-typecast dan di-assign kepada variabel pointer. Mengakses dengan menggunakan operator
Linked List • Linked List(Senarai Berkait) adalah struktur data yang terdiri atas node(simpul) yang dikaitkan secara linier dengan bantuan pointer. • Linier karna satu simpul dikaitkan dengan satu simpul lainnya. • Simpul menempati memori yang dialokasikan secara dinamis. • Simpul berbentuk struct, satu atau beberapa field bertipe pointer berfungsi sebagai link(kait) ke simpul lainnya.
Deklarasi Algoritma • Algoritma : <nama variabel list berkait/ pointer>: ^Data • C/ C++: <tipe data>*<nama variable list berkait/ pointer> • List berkait terdiri dari 2 komponen yaitu nilai/ info dari list dan alamat dari suatu nilai/ list berikutnya. • Pointer adalah sebuah sel dalam suatu elemen yang berfungsi penunjuk letak elemen yang lain (nilai = alamat elemen yang lain).
Lanjutan …
Linked List: Insertion, Deleting Insertion: Membuat record baru Next pointer di-set untuk mengaitkan item/ simpul baru Next pointer pada item/ simpul baru dimodifikasi untuk mengaitkan dengan simpul sesudahnya. Deletion: Next pointer dengan segera memutuskan dengan simpul yang dihapus, dan mengaitkannya kembali dengan simpul setelah item yang dihapus.
Linked List V. S Array • Array – Insert/ delete elemen pada akhir – Mengakses elemen secara acak – Pencarian daftar, khususnya nilai • Linked List – Insert elemen – Delete elemen – Diaplikasikan ketika sequential access dibutuhkan – Dalam situasi dimana jumlah elemen tidak bisa diprediksikan sebelumnya
Types of Linked List 1. Linear - Singly Linked List § Merupakan senarai berkait yang masing-masing simpul pembentuknya mempunyai satu kait (link) ke simpul lainnya.
2. Circular Linked List § Pointer elemen terakhir kembali ke head elemen pertama
3. Doubly Linked List § Pointer ada diantara simpul yang berdekatan dikedua arah § List dapat dilalui bolak-balik baik forward maupun backward § Biasanya dua pointer yang di-maintain untuk keep -track list, head dan tail
Deklarasi Doubly Linked List
Operasi Dasar List • • • Membuat list Traversing list Memasukan(insert) item/ elemen dalam list Menghapus elemen/item dalam list Menghubungkan dua atau lebih list (concatenating list)
List = Type Data Abstrak • Abstract Data Type – Data yang didefinisikan oleh user – Biasanya lebih kompleks dari tipe data sederhana seperti int, float, char, etc. • Kenapa Abstrak? – Detail implementasi di sembunyikan – Ketika melakukan operasi pada list (e. g. insert), maka fungsi yang di panggil. – Rincian mengenai bagaimana list diimplementasikan atau bagaimana elemen di-insert atau di-delete dituliskan tidak diperlukan.
Deklarasi Tipe Simpul struct node_type { data_type var_name; [data_type var_name; … ] struct node_type *link_name; } Catatan: node_type = nama tipe node. link_nama = link untuk mengaitkan node yang satu dengan yang lain. struct stud { int roll; char name[25]; int age; struct stud *next; } /* A user-defined data type called “node” */ Typedef struct stud node; node *head;
Deklarasi Pointer: Penunjuk Head Linked List • Sebuah variabel bertipe pointer ke struct perlu dideklarasikan. • Umumnya variabel ini diberi nama head • Manipulasi harus melalui simpul pertama dalam list yang diacu oleh pointer head. • Setelah terbentuk lalu diinisialisasikan ke alamat Null struct stud *head, *node, *curr; … head = null; …
Pembentukan Simpul Baru • Untuk memulai, maka perlu dibuat simpul pertama, dan menentukan head. • Simpul yang dibentuk ditempatkan pada heap memory yang dialokasikan secara dinamis. • Pada C/ C++ Diperlukan instruksi malloc() untuk melakukan alokasi memori. node_var =(struct node_type*) malloc(sizeof(struct node_type));
Lanjutan ….
Contoh Lain
• Apabila ada sejumlah n simpul(node) pada awal(initial) list, maka: – Alokasi n, satu per satu – Membaca dalam field-field record – Memodifikasi link dari record sehingga bisa saling terkait.
Pengaitan Simpul ke Linked List • Melalui 3 cara: 1. Dikaitkan pada posisi setelah simpul terakhir linked list 2. Pada posisi terdepan linked list 3. Disisipkan diantara simpul lainnya //Membentuk simpul pertama linked list if (head == NULL) head = node; //Mengaitkan simpul di akhir curr= head; while (curr -> next !=NULL) curr = curr -> next; Curr -> next = node; // Mengaitkan simpul di awal linked list node -> next= head; head = node;
Lanjutan … • Permasalah yang muncul pada saat menyisipkan node sebelum node ditentukan; – Node yang ditentukan berarti ada beberapa nilai yang diberikan pada simpul yang disebut juga key. – Contoh roll • Konvensi yang diikuti: – Jika nilai roll yang diberikan sebagai ngetive, simpul akan disisipkan pada akhir list • Ketika simpul ditambahkan pada awal list; – Hanya satu next pointer yang dimodifikasi • Head menjadi point pada simpul baru • Point Simpul baru ke elemen sebelumnya
• Simpul ditambahkan di akhir list – Dua next pointer yang harus dimodifikasikan • Simpul terakhir (point saat ini) ke simpul baru yang ditambahkan • Pointer simpul baru NULL • Simpul ditambahkan di tengah – Dua next pointer yang dimodifikasi • Node sebelumnya menjadi point ke simpul baru • Point simpul baru ke next node
Aplikasi pada C++
Menambahkan Node pada Akhir
Traversing List • Ketika list terbentuk dan ada head yang menjadi simpul pertama, maka: – Mengikuti pointer selanjutnya – Tampilkan konten-konten dari simpul yang dilalui – Berhenti ketika next pointer NULL
Pencarian List
Delete Node • Tiga kondisi yang mungkin muncul: – Menghapus simpul pertama – Menghapus simpul terakhir – Menghapus penghubung simpul (simpul tengah)
LIFO Linked List • Last-In-First-Out
FIFO Linked List • First-In-First-Out
File & Stream • Stream adalah kumpulan karakter yang disusun dalam baris-baris yang berpindah dari satu media ke media lain pada sistem komputer. • Semua masukan dan keluaran berupa stream. Masing-masing stream berasosiasi dengan sebuah file. • 3 buah stream: FILE *ptvar; – Standard Input stream – Standard Output Stream – Standard Error Stream //Menyiapkan buffer area dan di-assign ke ptvar
TEXT File & BINARY File • Text File adalah berkas yang disimpan dalam format teks. • Format teks adalah format yang sama seperti tampilan di layar. • Binary File menyimpan data numerik dalam format yang tetap sesuai ketentuan microprocessor.
Instruksi I/O File Data • Dimulai dengan pengaktifan file tersebut melalui function fopen(). • Berbagai function untuk membaca isi file dan menulis data ke dalam file dikerjakan selama program berjalan. • Selesai proses maka file harus ditutup dengan memanggil function fclose atau fcloseall(). FILE *fopen(const char *filename, const char *mode);
Sequential Access
Prosedur & Fungsi
Keuntungan • Rancangan top-down dengan pendekatan divideand-conquer, program besar dapat dibagi menjadi modul-modul yang lebih kecil; • Dapat dikerjakan oleh beberapa orang dengan koordinasi yang relatif mudah • Lebih mudah dalam mencari kesalahan, lokalisasi dalam satu modul • Modifikasi dapat dilakukan tanpa mengganggu program secara keseluruhan • Mempermudah dokumentasi
Struktur • Dalam merancang fungsi harus ditentukan: – Data apa yang diperlukan function sebagai masukan untuk diolah – Informasi apa yang dihasilkan (dikembalikan) function kepada pemanggil – Algoritma yang digunakan untuk mrngolah data masukan menjadi informasi keluaran berserta variabel lokal • Penulisan function terbagi atas: – Function prototype(pendeklarasian fungsi) – Function Definition(pendefinisian fungsi)
Prosedur • Mengikuti mekanisme call-return: – Prosedur di panggil – Sekumpulan statement disimpan dalam prosedur dan dieksekusi – Kontrol dikembalikan pada kode pemanggilan // Deklarasi Procedure <procedure_name> Procedure Test. Procedure Begin // set of statements End // Memanggil Prosedur Call <procedure_name> Call Test. Procedure
Pseudocode // Deklarasi Procedure Average. Score(input numeric, input numrtic, output numeric) Begin character c. Student. Name numeric n. Test 1, n. Test 2, n. Test 3, n. Average display “Enter Student name” accept c. Student. Name display “Enter Test Score 1” accept c. Student. Name display “Enter Student name” accept c. Student. Name call Average. Score (n. Test 1, n. Test 2, ntest 3, n. Average) display c. Studentname, n. Average End // Definition Procedure Average. Score(input numeric, output numeric, n. Test 1, n. Test 2, n. Ttest 3, n. Average) Begin n. Average=ntest 1+ntest 2+n. Test 3 end
Function /Fungsi • Merupakan sejumlah instruksi yang dikelompokan menjadi satu, berdiri sendiri, membentuk suatu subprogram yang sering juga disebut subroutine. • Function atau subprogram dibuat untuk melaksanakan suatu pekerjaan(fungsi) tertentu. • Setiap fungsi mempunyai nama.
• Salah satu metode perancangan program yang baik adalah menggunakan konsep modular atau sering disebut dengan pemrograman modular. • Modul = program kecil. • Dengan menggunakan metode ini maka masalah akan mudah disusun dan dipahami. Serta memliki manfaat software reusability, yaitu function yang diuat satu kali diharapkan dapat digunakan oleh program lain.
Sifat & Kategori • Sifat – Fan-in yang tinggi: makin sering suatu fungsi dipanggil oleh pemakai, nilai fan-in tinggi – Fan-out rendah, makin sedikit(spesifik) tugas yang dilakukan suatu modul, makin rendah nilai fan-out – Self-contained: kemampuan memenuhi kebutuhannya sendiri • Kategori – Standard Library Function: fungsi-fungsi yang disediakan compiler-nya. – Programmer-defined function: fungsi yang dibuat programmer untuk digunakan dalam program
// Deklarasi function <function_name> function Tes Begin // set of statements End // Memanggil Prosedur Call <procedure_name> Call Test. Procedure
Notasi Algoritmik Untuk Fungsi
Pemanggilan Fungsi
Notasi Algoritmik Untuk Prosedur
Pemanggilan Prosedur
Contoh Pseudo. Code Begin numeric n. Number 1, n. Number 2, n. Result display “Enter the First Number” accept n. Number 1 display “Enter the second number” accept n. Number 2 // the return value of the function Product. Of. Number is Accepted in the Variabel Result n. Result = call Product. Of. Numbers(n. Number 1, n. Number 2) display n. Result End Function Product. Of. Numbers(numeric n. Num 1, n. Num 2) Begin numeric n. Number 3 = n. Num 1*n. Num 2 return n. Number 3 end
Problem Statement… • Diberikan pseudocode yang menggunakan prosedur untuk memproses 5 nomer dari user dan di cek apakah yang diberikan user itu genap atau bukan. Selain itu, ditampilkan jumlah semua nomer yang dimasukan oleh user. Carilah error dalam pseudocode dan tulis pseudocode yang benarnya. begin call addevennumbers // procedure is called display sum // sum of even numbers is displayed end procedure addevennumbers begin numeric n. Counter, n. Number // procedure definition containing procedure body // number and counter to count the number // of input numbers are declared numeric n. Sum numeric n. Limit=5 for (n. Counter=0; n. Counter<limit; n. Counter=n. Counter+1) // for loop to accept 5 numbers begin numeric n. Sum=0 display “enter the number” accept n. Number if n. Number%2=0 // check if the number even n. Sum=n. Sum+n. Number else display “number is odd” end
- Slides: 59