04. Single Linked List

dokumen-dokumen yang mirip
A. TUJUAN PEMBELAJARAN

05. Double Linked List

Pengenalan Struktur Data. Farah Zakiyah Rahmanti 2014

Single Linked List (1)

ARNA FARIZA YULIANA SETIOWATI

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

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

01. Review Array, Pointer dan Struktur

Algoritma dan Struktur Data. Ramos Somya

Algoritma Pemrograman & Struktur Data

Review : Sifat Implementasi Linear List dengan Array

Algoritma dan Struktur Data. Linked List

BAB II Senarai Berantai (Linked List)

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

SINGLE LINKED LIST (NON CIRCULAR)

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

ARNA FARIZA YULIANA SETIOWATI

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

Algoritma dan Struktur Data. Pertemuan 7 Linked List

BAB IV Antrian(Queue)

LINKED LIST. Double Linked List adalah :

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

A. TUJUAN PEMBELAJARAN

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

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

Pertemuan 7. REVIEW dan QUIS

LIST. Dewi Sartika, M.Kom

ALGORITMA DAN STRUKTUR DATA

Linked List 6.3 & 7.3 NESTED LOOP

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

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

MODUL 6 SINGLE & DOUBLE LINKED LIST

Praktikum Algoritma dan Struktur Data

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

ASD. Alokasi Memori Dinamis

STRUKTUR DATA Pertemuan 1 s.d 8

SENARAI BERANTAI (LINK LIST)

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

POINTER. Tim Alpro Teknik Informatika

TIM ASISTEN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN 2017

Pointer dan Array Dinamik. IF2121 / Algoritma dan Struktur Data Sem /2018

Algoritme dan Pemrograman

Pointer. Yuliana Setiowati

Struktur Data II. Single Linked List - Non circular

A. TUJUAN PEMBELAJARAN

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

Lab. Teknik Informatika Struktur Data 1

Algoritma dan Struktur Data. Pertemuan 6 Alokasi Memori Dinamis

STRUKTUR DATA (2) Single Linked List

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

LAPORAN PRAKTIKUM RESMI QUEUE

STRUKTUR DATA single linked list non circular

Array VS Linked List

Algoritma dan Struktur Data. Ramos Somya

MODUL PRAKTIKUM STRUKTUR DATA

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

Struktur Data. Tumpukan : Definisi & Operasi. Pertemuan 4 PROBLEM ALGORITHM DATA IMPLEMENTATION. Pert. 4b Struktur Data - FMIPA USD

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

BAB VIII QUEUE (ANTRIAN)

Pendahuluan Pemrograman Mikrokontroler

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

BAB IX LINKED LIST (SENARAI BERANTAI)

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

Stack. Gambar 1.1 Stack

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

Algoritma Dan Struktur Data II

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

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

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

BAB VI LINKED LIST. Struktur data dinamis sederhana dapat dibagi menjadi empat jenis, yaitu : 1. Linked list 2. Stack 3. Queue 4.

Pemrograman Dasar C. Minggu 10

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

Stack. Pointer ke node pertama dari stack. Bagian deklarasi di atas kita asumsikan disimpan menjadi sebuah header file dengan nama stack.

Modul Praktikum Algoritma dan Struktur Data

A. TUJUAN PEMBELAJARAN

TUGAS PENDAHULUAN MODUL 12 PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA STACK

Pendahuluan Struktur Data. Nisa ul Hafidhoh

Achmad Solichin.

*Sekumpulan elemen yang diatur secara terurut. *Linear List tidak sama dengan Connected-List

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

POINTER. Tim Alpro Teknik Informatika

STRUKTUR DATA POKOK BAHASAN - 8 QUEUE ( ANTRIAN)

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

STACK DAN QUEUE (Muhammad Fachrie, STMIK Amikom Yogyakarta)

STRUKTUR DATA Pertemuan 1 s.d 8

Praktikum 4. Tumpukan (Stack)

LAPORAN PRAKTIKUM IX. Oleh:

Tipe Data dan Operator

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

Algoritma dan Struktur Data. Pertemuan 5 Pointer

Algoritma Dan Struktur Data II. Queue

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

REPRESENTASI FISIK LIST LINEAR

Transkripsi:

04. Single Linked List ARNA FARIZA YULIANA SETIOWATI Capaian Pembelajaran 1. Mahasiswa mengerti konsep alokasi memori secara dinamis menggunakan pointer. 2. Mahasiswa mengerti konsep single linked list dan operasi pada single linked list. 3. Mahasiswa dapat mengimplementasikan single linked list dalam bahasa pemrograman. 1

Materi Alokasi Memori Fungsi malloc Fungsi free Konsep Single Linked List Operasi pada Single Linked List Operasi Menyisipkan data Operasi Menghapus data Implementasi Stack dengan Single Linked List Mengapa perlu Alokasi Memori Tipe data array mempunyai ukuran yang tetap Pada beberapa kasus, ukuran dari sebuah obyek tidak bisa dipastikan sampai dengan waktu dieksekusi(run time) Alokasi memori(memory allocation) memungkinkan untuk membuat ukuran buffer dan array secara dinamik artinya ruang dalam memori akan dialokasikan ketika program dieksekusi. 2

Fungsi-Fungsi Alokasi Memory sizeof() malloc() free() Berada pada library stdlib.h sizeof() Untukmendapatkanukurandariberbagaitipedata, variabelataupunstruktur. Return value: ukuran dari obyek yang bersangkutan dalambyte. Parameter dari sizeof() : sebuah obyek atau sebuah tipe data 3

typedef struct employee_st { char name[40]; int id; } Employee; void main() { int myint; Employee john; printf("size of int is %d\n",sizeof(myint)); printf("size of int is %d\n",sizeof(int)); printf("size of Employee is %d\n",sizeof(employee)); printf("size of john is %d\n",sizeof(john)); printf("size of char is %d\n",sizeof(char)); printf("size of short is %d\n",sizeof(short)); printf("size of int is %d\n",sizeof(int)); printf("size of long is %d\n",sizeof(long)); printf("size of float is %d\n",sizeof(float)); printf("size of double is %d\n",sizeof(double)); return 0; } Output 4

malloc() Fungsi standar yang digunakan untuk mengalokasikan memori Format : void *malloc(intjml_byte) Banyaknyabyte yang akandipesandinyatakansebagaiparameter fungsi. Return value dari fungsi ini adalah sebuah pointer yang tak bertipe (pointer to void) yang menunjuk ke buffer yang dialokasikan. Pointer tersebut haruslah dikonversi kepada tipe yang sesuai (denganmenggunakantype cast) agar bisamengaksesdata yang disimpandalambuffer. malloc() Jikaproses alokasigagaldilakukan, fungsiiniakan memberikanreturn value berupa sebuah pointer NULL. Sebelum dilakukan proses lebih lanjut, perlu terlebih dahulu dipastikan keberhasilan proses pemesanan memori, sebagaimana contoh berikut: int *x; x = (int *) malloc(3 * sizeof(int)); if (x== NULL) { printf("error on malloc\n"); exit(0); } else { lakukan operasi memori dinamis } 5

alamat data int *p; p=(int *) malloc(3 * sizeof(int)); 1000 1001 1002 3 p # 1000 Beberapa variasi malloc char *nama; nama=(char *) malloc (sizeof(char)); nama=(char *) malloc (20*sizeof(char)); char *nama[10]; nama[0]=(char *) malloc (20*sizeof(char)); nama[9]=(char *) malloc (20*sizeof(char)); 6

typedef struct { int tanggal; int bulan; int tahun; } TGL; TGL *tgl_lahir; tgl_lahir=(tgl *) malloc (sizeof(tgl)); tgl_lahir=(tgl *) malloc (20*sizeof(TGL); TGL *tgl_lahira[10]; tgl_lahira[0]=(tgl *) malloc (2*sizeof(TGL)); tgl_lahira[9]=(tgl *) malloc (2*sizeof(TGL)); free() Jikamenggunakanmemoriyang dialokasikansecaradinamis, maka memori harus dibebaskan kembali untuk dikembalikan kepadasistem. Sehingga ruang tersebut bisa dipakai lagi untuk alokasi variabel dinamislainnya. Format : void free(void *pblok); dimana pblok adalah pointer yang menunjuk ke memori yang akan dibebaskan. 7

free() #include <stdio.h> #include <stdlib.h> main() { char *pblok; pblok = (char *) malloc(500 * sizeof(char)); if (pblok == NULL) puts("error on malloc"); else { puts("ok, alokasi memori sudah dilakukan"); puts("------"); free(pblok); puts("blok memori telah dibebaskan kembali"); } } Linked List Senarai berantai(linked list) : penyimpanan data dari sekelompok data yang diorganisasi secara dinamis dengan urutan tertentu Simpul (node) a b c pointer data/informasi 16 8

Single Linked List Terdiri dari elemen-elemen individu yang dihubungkan dengan pointer tunggal Masing-masing elemen terdiri dari dua bagian, yaitu bagian data/informasi yang disimpan dan bagian pointer yang disebut dengan pointer next Pointer next padaelementerakhirmerupakannull, yang menunjukkan akhir dari suatu list Elemen awal diakses oleh pointer 17 Contoh Single Linked List a b c null data next 18 9

Alokasi Memori pada Single Linked List Elemen-elemen linked list dialokasikan secara dinamis (menggunakan malloc) Lokasinya terpencar-pencar di memori Pointer menjamin semua elemen dapat diakses 19 Deklarasi Simpul pada Single Linked List typedef struct simpul Node; struct simpul { int data; Node *next; }; 20 10

Variabel dan baru adalah variabel pointer yang menunjuk ke awal list baru adalah variabel pointer yang menunjuk ke simpul baru Node * = NULL; Node *baru; 21 Alokasi Simpul Baru baru=(node *) malloc (sizeof(node)); baru->data = x; baru->next = NULL; Jika x=10, maka 10 baru 22 11

Membentuk Simpul Awal menunjukawallist, karenahanyaadasatusimpulmaka menunjuk baru. = baru; 10 baru 23 Operasi pada Single Linked List 1. Mencetak Simpul 2. Menyisipkan Simpul 3. Menghapus Simpul 12

Operasi Mencetak Simpul Operasi mencetak simpul dimulai dari posisi, dan mencetak data setiap simpul 10 6 15 null Mencetak Single Linked List Node *p = ; while (p!= NULL){ printf( %d, p->data); p = p->next; } printf( \n ); 13

Operasi Menyisipkan Simpul Operasi menyisipkan simpul terdiri dari: o Sisipawallist o Sisipakhirlist o Sisip sebelum simpul tertentu o Sisip setelah simpul tertentu 27 Sisip Awal List Buat simpul baru: Linked list: 8 10 baru 28 14

Sisip Awal List 1. baru->next menunjuk simpul 8 10 baru 29 Sisip Awal List 2. menunjuk baru 8 10 baru 30 15

Sisip Awal List baru->next = ; = baru; Sisip Akhir List Buat simpul baru: Linked list: 5 8 10 baru 32 16

Sisip Akhir List 1. tail menunjuk 8 10 tail 33 Sisip Akhir List 2. Arahkan tail pada akhir list 8 10 tail 34 17

Sisip Akhir List 3. tail->next menunjuk baru 8 10 5 tail baru 35 Sisip Akhir List Node *tail = ; while(tail->next!= NULL) tail = tail->next; tail->next = baru; 18

Sisip Sebelum Simpul x (misal: x=5) Buat simpul baru: Linked list: 6 8 10 5 baru 37 Sisip Sebelum Simpul x (misal: x=5) 1. before menunjuk 8 10 5 before 38 19

Sisip Sebelum Simpul x (misal: x=5) 2. Arahkanbeforepadasimpulsebelumx = 5 8 10 5 before 39 Sisip Sebelum Simpul x (misal: x=5) 3. baru->next menunjuk before->next 10 5 before 6 baru 40 20

Sisip Sebelum Simpul x (misal: x=5) 4. before->next menunjuk baru 10 5 before 6 baru 41 Sisip Sebelum Simpul Tertentu Node *before = ; while(before->next->data!= x) before = before->next; baru->next = before->next; before->next = baru; 21

Sisip Setelah Simpul x (misal: x=10) Buat simpul baru: Linked list: 12 8 10 6 5 baru 43 Sisip Setelah Simpul x (misal: x=10) 1. after menunjuk 8 10 6 5 after 44 22

Sisip Setelah Simpul x (misal: x=10) 2. Arahkanafterpadasimpulx = 10 8 10 6 5 after 45 Sisip Setelah Simpul x (misal: x=10) 3. baru->next menunjuk after->next 10 6 after 12 baru 46 23

Sisip Setelah Simpul x (misal: x=10) 4. after->next menunjuk baru 10 6 after 12 baru 47 Sisip Sebelum Simpul Tertentu Node *after = ; while(after->data!= x) after = after->next; baru->next = after->next; after->next = baru; 24

Operasi Menghapus Simpul Operasi menghapus simpul terdiri dari: o Hapus simpul awal o Hapus simpul akhir o Hapus simpul tertentu 49 Fungsi free_node Sebelum menghapus simpul, buat fungsi untuk membebaskan alokasi memori dengan fungsi free void free_node(node *p) { free(p); p=null; } 50 25

Hapus Simpul Awal 1. hapus menunjuk simpul yang sama dengan 8 10 12 6 5 hapus 51 Hapus Simpul Awal 2. menunjuk hapus->next 8 10 12 6 5 hapus 52 26

Hapus Simpul Awal 3. free_node(hapus) 8 10 12 6 5 hapus hapus 53 Hapus Simpul Awal Node *hapus = ; = hapus->next; free_node(hapus); 27

Hapus Simpul Akhir 1. hapus dan before menunjuk 10 12 6 5 hapus before 55 Hapus Simpul Akhir 2. Arahkanhapuskeakhirlist danbeforekenode sebelumnya 10 12 6 5 before hapus 56 28

Hapus Simpul Akhir 3. before->next menunjuk NULL 10 12 6 5 before hapus 57 Hapus Simpul Akhir 4. free_node(hapus) 10 12 6 5 before hapus hapus 58 29

Hapus Simpul Akhir Node *hapus =, before; while(hapus->next!= NULL){ before = hapus; hapus = hapus->next; } before->next = NULL; free_node(hapus); HapusSimpulTengah (misalx = 12) 1. hapus dan before menunjuk 10 12 6 hapus before 60 30

HapusSimpulTengah (misalx = 12) 2. Arahkan hapus ke simpul 12 dan before ke simpul sebelumnya 10 12 6 before hapus 61 HapusSimpulTengah (misalx = 12) 3. before->next menunjuk ke hapus->next 10 12 6 before hapus 62 31

HapusSimpulTengah (misalx = 12) 4. free_node(hapus) 10 12 6 before hapus 63 Hapus Simpul Tengah Node *hapus =, before; while(hapus->data!= x){ before = hapus; hapus = hapus->next; } before->next = hapus->next; free_node(hapus); 32

ImplementasiStack dengansingle Linked List Stack adalahpenyimpanandata dengankonseplast In First Out (LIFO) Terdapatsatupenunjukyaitufront Fungsi Push menambah simpul pada posisi front Fungsi Pop menghapus simpul pada posisi front Deklarasi Stack dengan Single Linked List typedef struct simpul Node; typedef int itemtype; struct simpul { itemtype item; Node *next; }; typedef struct { Node *front; int count; } Stack; 33

Fungsi pada Stack Inisialisasi front menunjuk NULL, count=0 Kosong jikafront= NULL Enqueue buat simpul, sisip awal list (posisi front) Dequeue hapusawallist (posisifront) Fungsi Inisialisasi void inisialisasi (Stack *s) { s->front = NULL; s->count = 0; } 34

Fungsi Kosong int Kosong (Stack *s) { return(s->front==null) } Fungsi Push void Push (Stack *s, itemtype x) { Node *baru = (Node *) malloc (sizeof(node)); if(baru==null) { printf( Alokasi gagal\n ); exit(1); } else { baru->item = x; baru->next = s->front; s->front = baru; s->count++; } } 35

Fungsi Pop itemtype Pop (Stack *s) { Node *hapus; itemtype temp; if(kosong(s)) { printf( Stack kosong\n ); return ; } else { temp = s->front->item; hapus = s->front; s->front = hapus->next; free(hapus); s->count-- return temp; } } Rangkuman Simpul pada single linked list terdiri dari bagian data dan pointer next Operasi pada single linked list terdiri dari operasi cetak, sisip dan hapus Operasi cetak dapat dilakukan dari sampai akhir list Operasi sisip terdiri dari sisip awal list, sisip akhir list, sisip setelah simpul tertentu, sisip sebelum simpul tertentu Operasihapusterdiridarihapusawallist, hapusakhirlist danhapus simpul tertentu Implementasi Stack dengan single linked list, pada operasi Push dengan sisipawallist danpadaoperasipop denganhapusawallist 36

Latihan 1. Buatlah single linked list dengan data bertipe integer yang dapat melakukan operasi sisip secara terurut dan hapus simpul tertentu dengan ketentuan sebagai berikut: a) Operasisisip, buatsebuahsimpulbaru, Jikadata simpulbaru< data pada, makagunakansisip awallist Jika pencarian data simpul baru mencapai NULL (data belum ada), sisip akhir list Jikadata simpulbaru= data padasimpultertentu makaberikanpesansimpulsudah ada(duplikat) Lainnya sisip sebelum simpul tertentu b) Operasi hapus, Jika posisi simpul yang dihapus pada, gunakan hapus awal list Jika posisi simpul yang dihapus pada tail, gunakan hapus akhir list Lainnya hapus simpul tengah Latihan 2. ImplementasikanStack dengansingle linked list, buatlahmenu Push, Pop dan Tampil 3. Buatlah single linked list dengan simpul berupa data mahasiswa yang terdiri dari NRP, Nama dan Kelas. Buatlah operasi Sisip secaraterurut, Hapusdata mahasiswatertentudanupdate data (nama dan kelas saja) 37