Academia.eduAcademia.edu

algoritma struktur data II

Senarai berantai / linked list atau kadang-kadang disebut dengan senarai bertaut atau daftar bertaut dalam ilmu komputer merupakan sebuah struktur data yang digunakan untuk menyimpan sejumlah objek data biasanya secara terurut sehingga memungkinkan penambahan, pengurangan, dan pencarian atas elemen data yang tersimpan dalam senarai dilakukan secara lebih efektif. Pada praktiknya sebuah struktur data memiliki elemen yang digunakan untuk saling menyimpan rujukan antara satu dengan lainnya sehingga membentuk sebuah senarai abstrak, tiap-tiap elemen yang terdapat pada senarai abstrak ini seringkali disebut sebagai node. karena mekanisme rujukan yang saling terkait inilah disebut sebagai senarai berantai.

LAPORAN PRAKTIKUM ALGORITMA STRUKTUR DATA II MODUL 1 Linked List Di Susun oleh : Happy Sugiarto Candra 201501017 Dosen : Oskar ika Adi Nugroho S.T.,M.T. JURUSAN SISTEM INFORMASI SEKOLAH TINGGI ILMU KOMPUTER “ YOS SUDARSO” PURWOKERTO 2016 BAB I TEORI DASAR SENARAI BERANTAI Senarai berantai / linked list atau kadang-kadang disebut dengan senarai bertaut atau daftar bertaut dalam ilmu komputer merupakan sebuah struktur data yang digunakan untuk menyimpan sejumlah objek data biasanya secara terurut sehingga memungkinkan penambahan, pengurangan, dan pencarian atas elemen data yang tersimpan dalam senarai dilakukan secara lebih efektif. Pada praktiknya sebuah struktur data memiliki elemen yang digunakan untuk saling menyimpan rujukan antara satu dengan lainnya sehingga membentuk sebuah senarai abstrak, tiap-tiap elemen yang terdapat pada senarai abstrak ini seringkali disebut sebagai node. karena mekanisme rujukan yang saling terkait inilah disebut sebagai senarai berantai. Keuntungan utama pemanfaatan senarai berantai dibandingkan larik, ataupun senarai biasa adalah kemudahan dan efektifitas kerja yang lebih baik dalam hal menambah, mengurangi, serta mencari suatu elemen/node yang terdapat dalam senarai. Hal tersebut dimungkinkan karena elemen-elemen yang terdapat pada sebuah senarai berantai tidak ditempatkan pada sebuah blok memori komputer seperti halnya larik ataupun senarai biasa, melainkan tiap-tiap elemen/node tersebut tersimpan dalam blok memori terpisah, penambahan, pengurangan, ataupun penggantian node dapat dilakukan dengan mengubah elemen rujukan atas tiap-tiap node yang terkait. Kerugiannya, sebuah senarai berantai tidak memungkinkan pengaksesan elemen secara acak, dalam artian untuk dapat mengakses node ke tiga pada contoh di atas harus dilakukan dengan cara mengunjungi elemen-elemen sebelumnya, dimulai dari elemen pertama, ke dua, seterusnya hingga pada lokasi elemen yang dimaksudkan. Senarai tunggal Bila struktur data sebuah node hanya memiliki satu tautan atas node berikutnya dalam sebuah senarai, maka senarai tersebut dinamakan sebagai senarai tunggal. Senarai tunggal dengan tiap-tiap node yang terdiri atas dua elemen, data integer, dan elemen rujukan ke node berikutnya Senarai ganda Berbeda halnya dengan senarai tunggal, pada senarai ganda, struktur data atas tiap-tiap node memiliki rujukan pada node sebelum dan berikutnya. Sebagian algoritma membutuhkan taut ganda, contohnya sorting dan reverse traversing. Senarai ganda dengan tiap-tiap node yang terdiri atas tiga elemen, data integer, dan dua elemen rujukan ke node sebelum serta berikutnya Senarai sirkular Pada dua jenis senarai sebelumnya, node terakhir dalam senarai tersebut merujuk pada null yang artinya akhir dari sebuah senarai, begitu pula null sebagai rujukan node sebelumnya pada node pertama bila senarai yang dimaksudkan adalah senarai ganda. Pada senarai sirkular, informasi rujukan pada node terakhir akan merujuk pada node pertama, dan rujukan pada node pertama akan merujuk pada node terakhir bila yang digunakan sebagai dasar implementasi adalah senarai ganda. Senarai sirkular dengan menggunakan model implementasi senarai tungal. Node terakhir menyimpan rujukan pada node pertama OPERASI DASAR PADA LINKED LIST. Ada beberapa aturan yang didefinisikan pada operasi didalam linked list, yaitu : Jika P adalah suatu variabel pointer, maka nilainya adalah alamat atau lokasi dari variabel lain yang dituju. Operasi yang didefinisikan pada suatu variabel pointer adalah : Test apakah sama dengan NULL. Test untuk kesamaan dengan variabel pointer lain. Menetapkan sama dengan NULL. Menetapkan menuju ke node lain. Notasi yang didefinisikan sehubungan dengan operasi diatas adalah : NODE(P), artinya node yang ditunjuk oleh pointer P. INFO(P), artinya nilai INFO dari node yang ditunjuk pointer P. NEXT(P), artinya hubungan (link) selanjutnya dari node yang ditunjuk oleh pointer P. Operasi-Operasi yang ada pada Linked List Insert : Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list. IsEmpty : Fungsi ini menentukan apakah linked list kosong atau tidak. Find First : Fungsi ini mencari elemen pertama dari linked list Find Next : Fungsi ini mencari elemen sesudah elemen yang ditunjuk now Retrieve : Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan oleh fungsi. Update : Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu Delete Now : Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah elemen pertama dari linked list (head), head akan berpindah ke elemen berikut. Delete Head : Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen sesudahnya. Clear : Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya, data-data yang dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori. Operasi-operasi untuk Stack dengan Linked List IsEmpty : Fungsi memeriksa apakah stack yang adamasih kosong. Push : Fungsi memasukkan elemen baru ke dalam stack. Push di sini mirip dengan insert dalam single linked list biasa. Pop : Fungsi ini mengeluarkan elemen teratas dari stack. Clear : Fungsi ini akan menghapus stack yang ada. Operasi-operasi Queue dengan Double Linked List IsEmpty : Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head masih menunjukkan pada Null atau tidak. Jika benar berarti queue masih kosong. IsFull : Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bisa menampung data dengan cara mengecek apakah Jumlah Queue sudah sama dengan MAX_QUEUE atau belum. Jika benar maka queue sudah penuh. EnQueue : Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (head dan tail mula-mula meunjukkan ke NULL). DeQueue : Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan dengan cara menghapus satu simpul yang terletak paling depan (head). BAB II Penjelasan Program Penjelasan program 1 : #include merupakan pengarah preprocessor yang berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum compiling file. <iostream> berfungsi untuk memanggil library C++ yang mana digunakan untuk memunculkan IO stream(Input Output Stream) atau jalur masuk-keluar data yaitu cout<<(output stream) dan cin>>(input stream). #include <stdlib.h> merupakan file header yang berfungsi untuk operasi pembanding dan operasi konversi. #include <stdio.h> adalah library pada bahasa C++ yang digunakan untuk operasi input-output (stdio = Standar Input dan Output). Tanpa menggunakan library ini maka perintah-perintah input dan output tidak dapat dieksekusi. Using namespace std; dimaksudkan agar program menggunakan nama spasi standard (kepanjangan dari std). Mendeklarasikan struct bernama Node. Int data merupakan variable dalam struct Node. Field next yang bertipe pointer dari Node. Struct Node *head merupakan Deklarasi pointer penunjuk kepala single link list manipulasi linked list tidak bisa dilakukan langsung ke node yang di tuju melainkan harus menggunakan suatu pointer penunjuk pertama dalam linked list yaitu head. Void Masukin (int x) : int x adalah nilai keluaran data. Node*temp1 = new Node (); adalah menambahkan simpul baru yang masih kosong Temp->data = x; adalah temp menyambung pada simpul data yang bernilai x. Temp->next = NULL adalah temp yang menyambung pada simpul berikutnya bernilai NULL. Head = temp adalah head bernilai sama dengan temp. Void Print () adalah keluaran data. Printf (“senarainya adalah: “); untuk mencetak / mengeluarkan tulisan senarainya adalah pada layar, hampir sama dengan cout<<” “; While fungsi untuk melakukan perulangan. Head = NULL; adalah senarai kosong. Printf(“ “); adalah fungsi untuk mencetak / mengeluarkan tulisan pada layar. Scanf(“%d”,&x) untuk memasukan data yang user inginkan , sama seperti cin>>. Masukin(x) untuk memanggil fungsi void masukin. Print() memanggil fungsi print. Return 0; mengakhiri suatu program. Outputnya : Penjelasan program 2 : #include merupakan pengarah preprocessor yang berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum compiling file. <iostream> berfungsi untuk memanggil library C++ yang mana digunakan untuk memunculkan IO stream(Input Output Stream) atau jalur masuk-keluar data yaitu cout<<(output stream) dan cin>>(input stream). #include <stdlib.h> merupakan file header yang berfungsi untuk operasi pembanding dan operasi konversi. #include <stdio.h> adalah library pada bahasa C++ yang digunakan untuk operasi input-output (stdio = Standar Input dan Output). Tanpa menggunakan library ini maka perintah-perintah input dan output tidak dapat dieksekusi. Using namespace std; dimaksudkan agar program menggunakan nama spasi standard (kepanjangan dari std). Mendeklarasikan struct bernama Node. Int data merupakan variable dalam struct Node. Field next yang bertipe pointer dari Node. Struct Node *head merupakan Deklarasi pointer penunjuk kepala single link list manipulasi linked list tidak bisa dilakukan langsung ke node yang di tuju melainkan harus menggunakan suatu pointer penunjuk pertama dalam linked list yaitu head. Void insert (int data, int n ) : mengembalikan nilai keluaran data. Node*temp1 = new Node (); adalah menambahkan simpul baru yang masih kosong Temp->next = NULL adalah temp yang menyambung pada simpul berikutnya bernilai NULL. Head = temp1 adalah head bernilai sama dengan temp1. Return; untuk mengembalikan atau keluar dari instruksi kembali ke fungsi sebelumnya atau fungsi yang di tuju berikutnya. Fungsi for untuk melakukan perulangan. Void print () fungsi print yaitu fungsi untuk menampilkan apa yang akan di tampilkan. Fungsi while untuk melakukan perulangan juga . Printf(“ “); adalah fungsi untuk mencetak / mengeluarkan tulisan pada layar. Head =NULL adalah senarai kosong. Fungsi insert untuk menambahkan sebuah simpul. Return 0; akhir dari sebuah program. Outputnya : BAB III KESIMPULAN Senarai berantai / linked list merupakan sebuah struktur data yang digunakan untuk menyimpan sejumlah objek data biasanya secara terurut sehingga memungkinkan penambahan, pengurangan, dan pencarian atas elemen data yang tersimpan dalam senarai dilakukan secara lebih efektif. Bisa di artikan dengan komponen yang yang saling berhubungan degan bantuan pointer. Link list bisa di hapus dan bisa di sisipi berbeda dengan array.