Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Algoritma dan Struktur Data Linked List. Syntax: struct nama_struct { tipe_data_1nama_var_1; tipe_data_2nama_var_2; tipe_data_3nama_var_3; …… }; 2.

Presentasi serupa


Presentasi berjudul: "Algoritma dan Struktur Data Linked List. Syntax: struct nama_struct { tipe_data_1nama_var_1; tipe_data_2nama_var_2; tipe_data_3nama_var_3; …… }; 2."— Transcript presentasi:

1 Algoritma dan Struktur Data Linked List

2 Syntax: struct nama_struct { tipe_data_1nama_var_1; tipe_data_2nama_var_2; tipe_data_3nama_var_3; …… }; 2

3 KONSEP ALOKASI MEMORY DINAMIS 1.Deklarasikan pointer yang menunjuk variabel yang akan dibuat 2.Jika pada saat program berjalan variabel tersebut dibutuhkan  Pesan slot memori untuk menyimpan variabel (malloc)  Simpan alamat slot memori pada pointer no 1  Gunakan variabel sesuai kebutuhan dengan cara akses tak langsung melalui pointer  Hapus variabel / lepas slot memori setelah variabel selesai digunakan (free)

4 Contoh malloc()- float #include #include void main() { //deklarasi pointer //deklarasi pointer float *pjari, *pluas; //memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer //memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer pjari = (float *)malloc(sizeof(float)); pjari = (float *)malloc(sizeof(float)); pluas = (float *)malloc(sizeof(float)); pluas = (float *)malloc(sizeof(float)); if (pjari != NULL && pluas != NULL){//jika berhasil memesan memori if (pjari != NULL && pluas != NULL){//jika berhasil memesan memori //gunakan variabel jari dan luas melalui pointer //gunakan variabel jari dan luas melalui pointer *pjari = 7; *pjari = 7; *pluas = 3.14 * *pjari * *pjari; *pluas = 3.14 * *pjari * *pjari; printf("lingkaran dengan jari-jari : %f\n", *pjari); printf("lingkaran dengan jari-jari : %f\n", *pjari); printf("luasnya : %f\n", *pluas); printf("luasnya : %f\n", *pluas); //menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas //menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas free(pjari); free(pjari); free(pluas); free(pluas); } getch(); getch();}

5 Linked List == kereta???? Page 55

6 Apakah Linked List itu ? Elemen (disebut dengan CELL, atau SEL dalam bahasa Indonesia) yang mungkin terletak terpisah- pisah di memory, disambungkan dengan pointer. Tiap sel berisi dua informasi : nilai dan pointer ke sel berikutnya CELL nilai Pointer to next CELL

7 1. Mudah untuk menambahkan dan menghapus elemen ( pada array tidak mungkin menambahkan elemen, karena banyaknya elemen sudah ditentukan dari awal ) 2. Panjang list bisa diubah dengan bebas (panjang array fixed) 3. Mudah untuk menyambungkan beberapa list, maupun memutuskannya (array tidak bisa) 4. Memungkinkan user mendesain struktur data yang kompleks Mengapa memakai Linked List ?

8 Struktur linked List  Node (elemen) linked list saling berkait melalui pointer. Bagian next sebuah node menunjuk alamat node selanjutnya  pHead: pointer yang menunjuk node pertama A pHead BC

9 Struktur linked List  Node terakhir menunjuk NULL  Setiap node terdiri atas  Isi data  Next, yaitu pointer ke node selanjutnya pada list A pHead BC

10 Struktur Sebuah Node struct node { //bagian data tipedata data 1; tipedata data 2; … tipedata data n; //pointer ke node selanjutnya struct node *next; }; typedef struct node node;

11 Array vs linked list  Cara mengakses elemen  Elemen array diakses lewat indeks  Untuk mengakses elemen linked list, harus dilakukan penelusuran elemen list  Banyaknya anggota  Banyaknya elemen array ditentukan di awal & jumlahnya tetap  Elemen linked list dibuat di memori ketika dibutuhkan (ingat Alokasi memory dinamis). Jumlahnya dinamis, dapat bertambah dan berkurang sesuai keperluan

12 Array vs Linked List ArrayLinked List Penambahan dan penghapusan elemen Tidak mungkinMungkin Panjang listFixedBisa diubah Akses ke elemencepat(harus mengikuti pointer satu demi satu) lambat

13 Array vs Linked List header 2 3 a[0] a[1] a[2] int a[3]; int n; Array Linked List address address address 24 Address tidak berurutan Akses ke tiap sel dimulai dari header Address tiap sel berurutan value Pointer ke sel berikutnya (next) next value ( NULL )

14 Cara menampilkan isi sel tertentu Pada array (misalnya nama array: a), isi sel tertentu dapat ditampilkan dengan cara a[nomer urut sel keberapa]. Misalnya a[5] akan menampilkan isi sel ke-6. Hal ini karena satu sel dengan sel yang lain terletak pada posisi yang berurutan di memory. Pada linked list, kita tidak tahu secara langsung, sel itu terletak dimana dalam memory. Akses harus dilakukan satu persatu, urut mulai dari sel terdepan

15 Cara menampilkan isi sel tertentu header pointer Sel ke-1→ isi : value=4 address sel berikutnya= NULL Sel ke-1 Tampilkan isi (value) sel ke-3 ! address

16 NULL POINTER Nilai yang dimiliki sebuah pointer adalah address pada memory dimana data tersimpan Pointer yang tidak menunjuk ke address manapun disebut dengan NULL pointer. Maksudnya, satu kondisi khusus dimana pointer itu belum diset dengan sebuah address tertentu Pada stdio.h biasanya didefinisikan dengan nilai 0 Saat fungsi fopen,malloc dieksekusi, jika terdapat error, maka nilai yang dikembalikan adalah NULL Pada kuliah ini, NULL disimbolkan dengan kotak yang diberi garis diagonal

17 Deklarasi head Sebelum membuat linked list, perlu dideklarasikan dan diinisialisasikan head, yaitu pointer yang menunjuk node pertama dari linked list node *pHead = NULL;

18 Potongan kode – linked list statis struct motor { float volts; float amps; struct motor *next; }; typedef struct motor motor; void main() { motor *pm1, *pm2, *pm3; } 1.Isi volts dan amps pada pm1, pm2 dan pm3 dengan data sembarang 2.Isi pm1.next dengan alamat pm2, pm2.next dengan alamat pm3, dan pm3.next dengan NULL 3.Tampilkan isi pm2 hanya dengan menggunakan pointer pm1 4.Tampilkan isi pm3 hanya dengan menggunakan pointer pm2 5.Tampilkan isi pm3 hanya dengan menggunakan pointer pm1

19 Operasi dasar linked list 1.Menambah sebuah node. 2.Menghapus sebuah node. 3.Mencari sebuah node. 4.List tranversal

20 Menambahkan node ke list kosong Before: Code: pNew -> next = pHead; // set link to NULL pHead = pNew;// point list to first node After: 39pNew pHead pPre 39pNew pHead pPre

21 Menambahkan node ke awal list Before: Code (same): pNew -> next = pHead; // set link to NULL pHead = pNew;// point list to first node After: 39pNew pHead pPre pNew pHead pPre 75124

22 Menambahkan node di tengah list Before: Code pNew -> next = pPre -> next; pPre -> next = pNew; After: 64 pNew pPre pNew pPre 55124

23 Menambahkan node akhir list Before: Code pNew -> next = NULL; pPre -> next = pNew; After: 144pNew pPre pNew pPre 55124

24 Menambahkan node pada linked list Terdapat empat tahap untuk menambah node linked list: Membuat node baru. Mendapatkan node yang terletak sebelum node baru disisipkan ( pPre ) Atur next node baru agar menunjuk node sesudah posisi penyisipan. Atur next pPre agar menunjuk node baru.

25 Kode untuk menambah data ke linked list Untuk menambah data pada linked list, harus diketahui head pointer (pHead), pointer yang menunjuk node sebelum tempat penyisipan (pPre) data yang akan disisipkan (item). //insert a node into a linked list struct node *pNew; pNew = (struct node *) malloc(sizeof(struct node)); pNew -> data = item; if (pPre == NULL){ //add before first logical node or to an empty list pNew -> next = pHead; pHead = pNew; } else { //add in the middle or at the end pNew -> next = pPre -> next; pPre -> next = pNew; }

26 Menghapus node dari linked list Untuk menghapus sebuah node: –Cari node yang akan dihapus (pCur) dan node pendahulunya (pPre). –Ubah pPre->next agar menunjuk pCur->next. –Hapus pCur menggunakan fungsi free

27 Menghapus node pertama dari linked list Before:Code: pHead = pCur -> next; free(pCur); After: pHead pPre pCur pHead pPre Recycled 124 pCur

28 Menghapus node dari linked list – kasus umum Before:Code: pPre -> next = pCur -> next; free(pCur); After: pPre pCur Recycled pPre pCur

29 Kode untuk menghapus node dari linked list Untuk menghapus node dari linked list, harus diketahui head pointer (pHead), node yang akan dihapus (pCur), serta pendahulunya, //delete a node from a linked list if (pPre == NULL) //deletion is on the first node of the list pHead = pCur -> next; else //deleting a node other than the first node of the list pPre -> next = pCur -> next; free(pCur).

30 Mencari node yang mengandung data tertentu dari linked list Operasi insert dan delete membutuhkan pencarian pada list untuk menentukan posisi penyisipan atau pointer yang menunjuk data yang akan dihapus //search the nodes in a linked list pPre = NULL; pCur = pHead; //search until the target value is found or the end of the list is reached while (pCur != NULL && pCur -> data != target) { pPre = pCur; pCur = pCur -> next; } //determine if the target is found or ran off the end of the list if (pCur != NULL) found = 1; else found = 0;

31 Traversing a Linked List mengunjungi semua node yang ada pada list dari head sampai node terakhir //traverse a linked list Struct node *pWalker; pWalker = pHead; printf(“List contains:\n”); while (pWalker != NULL){ printf(“%d ”, pWalker -> data); pWalker = pWalker -> next; }


Download ppt "Algoritma dan Struktur Data Linked List. Syntax: struct nama_struct { tipe_data_1nama_var_1; tipe_data_2nama_var_2; tipe_data_3nama_var_3; …… }; 2."

Presentasi serupa


Iklan oleh Google