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

dokumen-dokumen yang mirip
BAB II Senarai Berantai (Linked List)

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

Single Linked List (1)

Praktikum 3. Konsep double linked list Struktur double linked list Implementasi double linked list dalam Bahasa C

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

Praktikum 1. Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa : tipe_data nama_var[ukuran];

A. TUJUAN PEMBELAJARAN

A. TUJUAN PEMBELAJARAN

Single Linked List (2)

04. Single Linked List

05. Double Linked List

KONSEP POINTER DAN LINKED LIST

B. DASAR TEORI B.1 Array Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa : tipe_data nama_var[ukuran];

LIST. Dewi Sartika, M.Kom

Pengenalan Struktur Data dan Algoritma

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

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

Konsep Pohon (Tree) Binary Tree Penyajian Tree dengan Array Penyajian Tree dengan Linked List Metode Traversal (Kunjungan Node pada Tree)

KONSEP POINTER DAN LINKED LIST

MODUL 6 SINGLE & DOUBLE LINKED LIST

Algoritma dan Struktur Data. Pertemuan 7 Linked List

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan

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

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

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

BAB IX LINKED LIST (SENARAI BERANTAI)

STRUKTUR DATA (2) Single Linked List

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

SINGLE LINKED LIST (NON CIRCULAR)

Array VS Linked List

Review : Sifat Implementasi Linear List dengan Array

Struktur Data II. Single Linked List - Non circular

LAPORAN PRAKTIKUM IX. Oleh:

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

Algoritma dan Struktur Data. Ramos Somya

Algoritma Pemrograman & Struktur Data

Praktikum Algoritma dan Struktur Data 2010

Modul Praktikum Algoritma dan Struktur Data

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

Praktikum Algoritma dan Struktur Data

Algoritma dan Struktur Data. Linked List

BAB IX LINKED LIST (SENARAI BERANTAI)

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

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

Lab. Teknik Informatika Struktur Data 1

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

Algoritma dan Struktur Data

STRUKTUR DATA single linked list non circular

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

A. TUJUAN PEMBELAJARAN

Algoritma Pemrograman & Struktur Data

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

LINKED LIST. Double Linked List adalah :

Tutorial - Single Linked List

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

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

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

SENARAI BERANTAI (LINK LIST)

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

ALGORITMA & PEMROGRAMAN

A. TUJUAN PEMBELAJARAN

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

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

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

Praktikum 4. Tumpukan (Stack)

STRUKTUR DATA Pertemuan 1 s.d 8

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

LAPORAN PRAKTIKUM RESMI QUEUE

TIM ASISTEN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN 2017

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

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

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

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

Linked List 6.3 & 7.3 NESTED LOOP

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

Search And Insert Problem (Sorted Double Linkedlist Solution)

LIST BERKAIT(LINKED LIST)

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

List akan disimpan dalam bagian memori komputer yang dinamakan HEAP

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

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

ALGORITMA DAN STRUKTUR DATA

PRAKTIKUM 7 FUNGSI 1

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

BAB VI BAHASA C Pendahuluan

A. TUJUAN PEMBELAJARAN

MODUL PRAKTIKUM STRUKTUR DATA. Dosen Pengampu M.Bahrul Ulum, S.Kom., M.Kom. Asisten Lab Mia Kastina PROGRAM STUDI TEKNIK INFORMATIKA

Tumpukan(Stack)!! " # $ %&' $ %& ( ) ( * +, / ( (

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

Apakah Anda sering kesulitan untuk

MODUL PRAKTIKUM STRUKTUR DATA

REPRESENTASI FISIK LIST LINEAR

Pengantar List Linier

Gambar 1. Single Linked List

Pertemuan 7. REVIEW dan QUIS

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

BAB IV Antrian(Queue)

Algoritma Dan Struktur Data II

Transkripsi:

Praktikum 2 Senarai Berantai (Linked List) POKOK BAHASAN: Konsep linked list Struktur linked list Implementasi linked list dalam Bahasa C TUJUAN BELAJAR: Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: Memahami konsep linked list dan mengerti kegunaannya Mengimplementasikan struktur linked list dalam pemrograman Mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan menggunakan linked list dan menyelesaikannya. DASAR TEORI: Secara konseptual, linked list merupakan deretan elemen yang berdampingan. Akan tetapi, karena elemen-elemen tersebut dialokasikan secara dinamis (menggunakan malloc), sangat penting untuk diingat bahwa kenyataannya, linked list akan terpencarpencar di memori. Pointer dari elemen ke elemen berarti sebagai penjamin bahwa semua elemen dapat diakses. Single linked list atau biasa disebut linked list terdiri dari elemen-elemen individu, dimana masing-masing dihubungkan dengan pointer tunggal. Masing-masing elemen terdiri dari dua bagian, yaitu sebuah data dan sebuah pointer yang disebut dengan pointer net. Dengan menggunakan struktur two-member seperti ini, linked list dibentuk dengan cara menunjuk pointer net suatu elemen ke elemen yang mengikutinya. Pointer net pada elemen terakhir merupakan NULL, yang menunjukkan 13

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 1 akhir dari suatu list. Elemen pada awal suatu list disebut, dan elemen terakhir dari suatu list disebut tail. 1. ALOKASI SIMPUL Ketika sebuah variabel dideklarasikan, terlebih dahulu harus diinisialisasi. Demikian juga dengan pengalokasian secara dinamis. Sehingga, fungsi untuk mengalokasikan sebuah node baru, fungsi allocate_node() menggunakan malloc() untuk mendapatkan memori aktual, yang akan menginisialisasi suatu field data. net selalu diinisialisasi sebagai NULL. Untuk melihat kemungkinan alokasi memori gagal, maka fungsi allocate_node menghasilkan 0, bila berhasil maka menghasilkan 1. Untuk membebaskan node digunakan fungsi free_node. Fungsi dari alokasi node adalah sebagai berikut : int allocate_node(int data, list *new) new = (list) malloc (sizeof(node)); if(new==null) return 0; new->datalist = data; new->net=null; return 1; Untuk inisialisasi list setelah alokasi untuk node pertama maka ditambahkan statement sebagai berikut: = new; Ilustrasi dari fungsi allocate_node() adalah sebagai berikut new = (list) malloc (sizeof(node)); new->datalist = data; new new->net=null; new Untuk inisialisasi list setelah alokasi untuk node pertama ilustrasinya adalah sebagai berikut:

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 15 = new; new Fungsi free_node() menggunakan memori dinamis dengan fungsi free(). free() akan menghancurkan node yang menunjuk ke pointer yang dilewati, sehingga tempat yang ada dapat dipakai untuk lainnya. Akan tetapi, pointer yang melewati free() tidak otomatis menjadi null, tetapi akan menunjuk ke node yang sudah tidak ada. Karena itu pointer harus didefinisikan dengan NULL. void free_node(list p_l) free(p_l); p_l=null; Ilustrasi dari fungsi free_node() dapat dilihat pada gambar berikut : free(*p_l); p_l *p_l=null; p_l 2. OPERASI PADA LINKED LIST Operasi yang terpenting pada linked list adalah menambahkan node () dan menghapus node (delete). 2.1 INSERT Fungsi pada linked list meliputi : - sebagai node awal () dari linked list - setelah node tertentu - sebelum node tertentu - sebagai node akhir (tail) dari linked list

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 16 Insert sebagai node awal () dari linked list Statement kelanjutan dengan deklarasi seperti diatas untuk sebagai node awal () dari linked list adalah sebagai berikut: void as(list ) ->net=; = ; ilustrasi dari fungsi diatas adalah sebagai berikut: kondisi awal ->net=; = ; Insert setelah node tertentu berikut: Statement untuk setelah node tertentu dari linked list adalah sebagai void afternode(int, list ) list after; after = ; do after = after->net;

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 17 while (after->datalist!= ); ->net = after->net; after->net = ; ilustrasi dari fungsi diatas adalah sebagai berikut: after = ; after do after = after->net; while (after->datalist!= ); ->net = after->net; after after after->net = ; after Langkah-langkah untuk proses di atas adalah sebagai berikut:

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 18 1. Pointer net dari elemen baru menunjuk elemen setelah elemen tertentu 2. Pointer net elemen sebelumnya menunjuk ke elemen baru Insert sebelum node tertentu berikut: Statement untuk setelah node tertentu dari linked list adalah sebagai void beforenode(int, list ) list before, prevbefore; if (->datalist = ) as() else before = ; do prevbefore = before; before = before->net; while (before->datalist!= ); ->net = before; prevbefore->net = ; ilustrasi dari fungsi diatas adalah sebagai berikut: before = ; before do prevbefore = before; before = before->net; while (before->datalist!= ); prevbefore before

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 19 ->net = before; prevbefore before prevbefore->net = ; prevbefore before Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Telusuri list sampai elemen tertentu, catat juga elemen sebelumnya 2. Lakukan penyisipan sebelum elemen tertentu tersebut Insert di akhir (tail) dari linked list Statement untuk di akhir dari list adalah sebagai berikut: void astail(list ) list tail; tail = ; do tail = tail->net; while (tail->net!= NULL); tail->net = ; tail = tail->net; ilustrasi dari fungsi diatas adalah sebagai berikut: tail = ; tail do

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 20 tail = tail->net; while (tail->net!= NULL); tail->net = ; tail tail = tail->net; tail tail Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Telusuri list sampai elemen terakhir (tail->net=null) 2. Lakukan pentisipan setelah elemen terakhir 2.2 DELETE Fungsi delete pada linked list meliputi : - delete sebagai simpul pertama() dari linked list - delete setelah simpul tertentu - delete simpul terakhir Penghapusan Simpul Pertama: first 1 2 3 first 1 2 3 p

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 21 first 2 3 1 first p 3 2 Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Pointer first diarahkan pada data ke-2 2. Pointer p diarahkan pada data ke-1 3. Bebaskan pointer p (secara otomatis data ke-1 terhapus) Penghapusan Setelah Simpul Tertentu 1 2 first 3 first 1 2 3 p first 1 2 3 first 1 2 p Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Arahkan pointer first s/d data yang ditunjuk 2. Pointer p diarahkan pada first->net 3. Arahkan pointer first->net pada p->net. Bebaskan pointer p (secara otomatis data setelah simpul tertentu terhapus)

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 22 Penghapusan Simpul Terakhir first 1 2 3 first 1 2 3 p first 1 2 3 first 1 2 3 Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Telusuri simpul s/d first->net = NULL 2. Arahkan pointer p ke first 3. Bebaskan pointer p->net (Simpul Terakhir). Arahkan p->net ke NULL 2.3 MERUBAH ISI DARI SUATU SIMPUL PADA LINKED LIST Untuk merubah isi dari suatu simpul pada linked list, maka yang harus dilakukan adalah: 1. Menulusuri linked list sampai didapatkan simpul yang akan dirubah do change = change->net; while (change->datalist!= ); chenge

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 23 2. Merubah isi dari simpul yang sudah didapatkan change->datalist!= y chenge TUGAS PENDAHULUAN: 1. Buatlah flowchart untuk tiap operasi pada linked list untuk Membuat Linked List sebagai Simpul Baru 2. Buatlah flowchart untuk menyisipkan Simpul setelah Simpul Tertentu 3. Buatlah flowchart untuk menyisipkan Simpul sebelum Simpul Tertentu. Buatlah flowchart untuk menyisipkan Simpul sebagai Simpul Terakhir 5. Buatlah flowchart untuk menghapus Simpul, baik Simpul Pertama, Simpul di Tengah ataupun Simpul di Akhir PERCOBAAN: 1. Buatlah workspace untuk praktikum Struktur Data dengan menggunakan Visual C++. 2. Buatlah project untuk praktikum kedua 3. Cobalah untuk masing-masing percobaan di bawah ini dengan menambahkan program utamanya.. Selesaikan soal-soal yang ada dengan mengimplementasikan flowchart yang anda buat pada Tugas Pendahuluan.

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 2 Percobaan 1 : Fungsi Menambahkan Simpul Baru sebagai LIFO struct dtnilai char nrp[10]; char nama[20]; double nilai; struct dtnilai *net; ; struct dtnilai *ujung; void sisip_awal_lifo() struct dtnilai *tampung; int j=0;char jawab[2]; while(1) ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai)); fflush(stdin); printf("nrp :");scanf("%s",&ujung->nrp); printf("nama :");scanf("%s",&ujung->nama); printf("nilai Test :");scanf("%lf",&ujung->nilai); if(j==0) ujung->net=null; tampung=ujung; else ujung->net=tampung; tampung=ujung; printf("ada data lagi(y/t):"); scanf("%s",&jawab); if((strcmp(jawab,"y")==0) (strcmp(jawab,"y")==0)) j++;continue; else if ((strcmp(jawab,"t")==0) (strcmp(jawab,"t")==0)) break; Percobaan 2 : Menambah Simpul Baru sebagai FIFO void sisip_awal_fifo() struct dtnilai *tampung, *awal; int j=0;char jawab[2];

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 25 while(1) awal=(struct dtnilai*)malloc(sizeof(struct dtnilai)); fflush(stdin); printf("nrp :");scanf("%s",&awal->nrp); printf("nama :" );scanf("%s",&awal->nama); printf("nilai Test :" );scanf("%lf",&awal->nilai); awal->net=null; if(j==0) ujung=awal; tampung=ujung; else tampung->net=awal; tampung=tampung->net; printf("ada data lagi(y/t):"); scanf("%s",&jawab); if((strcmp(jawab,"y")==0) (strcmp(jawab,"y")==0)) j++;continue; else if ((strcmp(jawab,"t")==0) (strcmp(jawab,"t")==0)) break; Percobaan 3 : Fungsi untuk Menyisipkan Simpul Setelah Simpul Tertentu void sisip_stl_simpul() struct dtnilai *sisip; struct dtnilai *stl; char cari[20]; if (ujung == NULL) pritnf("list Belum Terbentuk. Buatlah Dulu!"); else sisip=(struct dtnilai*)malloc(sizeof(struct dtnilai)); printf("masukkan Data Yang Akan Disisipkan \n"); printf("nrp :"); gets(sisip->nrp); printf("nama :"); gets(sisip->nama); printf("nilai Test :"); gets(sisip->nilai); printf("data disisipkan setelah data? (nama) : "; gets(cari); stl = ujung;

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 26 while(strcmp(stl->nama,cari)!=0) stl=stl->net; sisip->net = stl->net; stl->net = sisip; Percobaan : Fungsi untuk Menampilkan Isi dari List void tampil_list() struct dtnilai *tampil; printf("data Mahasiswa yang telah diinputkan :\n"); printf("nrp\tnama\tnilai\n"); tampil = ujung; while(tampil!=null) printf("%s\t%s\t%6.2f\n",tampil->nrp,tampil->nama, tampil->nilai); tampil=tampil->net; Percobaan 5 : Fungsi untuk Menghapus Simpul Tertentu void hapus_simpul_tertentu() struct dtnilai *hapus; struct dtnilai *sblhapus; char cari[20]; if (ujung == NULL) else printf("list Belum Terbentuk. Buatlah Dulu!"); printf("data yang akan dihapus? (nama) : "); gets(cari); hapus = ujung; if(strcmp(hapus->nama,cari)==0) ujung = ujung->net; free(hapus);

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 27 else while(strcmp(hapus->nama,cari)!=0) sblhapus=hapus; hapus=hapus->net; if (hapus->net == NULL) sblhapus->net=null; free(hapus); else sblhapus->net = hapus->net; free(hapus); Percobaan 6 : Fungsi untuk Merubah Data pada Simpul Tertentu void rubah_data() struct dtnilai *rubah; char cari[20]; char nrpbaru[10]; char namabaru[20]; double nilaibaru; rubah = ujung; fflush(stdin); printf("masukkan nama dari data yang akan dirubah : "); scanf("%s",&cari); while (strcmp(rubah->nama,cari)!=0) rubah = rubah->net; printf("masukkan data yang akan dirubah.\n"); printf("nrp :");scanf("%s",&nrpbaru); printf("nama :" );scanf("%s",&namabaru); printf("nilai Test :" );scanf("%lf",&nilaibaru); strcpy(rubah->nrp,nrpbaru); strcpy(rubah->nama,namabaru); rubah->nilai=nilaibaru;

PRAKTIKUM 2 SENARAI BERANTAI (LINKED LIST) 28 LATIHAN: 1. Masalah aritmatika polinom adalah membuat sekumpulan subrutin manipulasi terhadap polinom simbolis (symbolic Polynomial). Misalnya: P1 = 6 8 + 8 7 + 5 5 + 3 + 15 P2 = 3 9 + 7 + 3 + 2 3 + 2 2 + 10 P3 = 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. 2. Implementasikan sebuah single linked list yang merepresentasikan data mahasiswa. Data mahasiswa berupa nrp, nama, alamat, indeks prestasi. Buatlah fungsi-fungsi untuk membangun single linked list, menelusuri, menambah simpul, menghapus simpul. 3. Tambahkan tampilan di output setelah anda mengerjakan percobaan di atas dengan penghitungan indeks prestasi rata-rata, dimana iprata=total/jumlah_siswa; total didapatkan dari menambahkan IP yang didapat tiap mahasiswa.