1 / 34

Algoritma dan Struktur Data

Algoritma dan Struktur Data. Linked List. Konsep Array. Array == Laci ?. Array. Data disimpan dalam suatu struktur, sedemikian rupa sehingga elemen-elemen di dalam struktur tersebut dapat diolah secara kelompok ataupun secara individu. Sifat - sifat Array Homogen

aubrey-cash
Download Presentation

Algoritma dan Struktur Data

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritma dan Struktur Data Linked List

  2. Konsep Array Array == Laci?

  3. Array • Data disimpan dalam suatu struktur, sedemikian rupa sehingga elemen-elemen di dalam struktur tersebut dapat diolah secara kelompok ataupun secara individu. • Sifat - sifat Array • Homogen Seluruh elemen di dalam struktur array mempunyai tipe data yang sama. • Random Access Setiap elemen di dalam struktur array dapat dicapai secara individual, langsung ke lokasi elemen yang diinginkan, tidak harus melalui elemen pertama.

  4. DefinisidandeklarasiStruct Syntax: struct nama_struct { tipe_data_1 nama_var_1; tipe_data_2 nama_var_2; tipe_data_3 nama_var_3; …… };

  5. Array of Struct • Sebuah array yang setiap data elemennya bertipe struct. Umumnya dipakai untuk menyimpan object data yang terstruktur, misal: data mahasiswa, karyawan, buku, barang, dsb.

  6. Contohmalloc()- float #include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { //deklarasi pointer float *pjari, *pluas; //memesan slot memoriuntukmembuatvariabeljari & luas. Simpanalamatnyapada pointer pjari = (float *)malloc(sizeof(float)); pluas = (float *)malloc(sizeof(float)); if (pjari != NULL && pluas != NULL){//jikaberhasilmemesanmemori //gunakanvariabeljaridanluasmelalui pointer *pjari = 7; *pluas = 3.14 * *pjari * *pjari; printf("lingkarandenganjari-jari : %f\n", *pjari); printf("luasnya : %f\n", *pluas); //menghapusataumelepaskan slot memori yang ditunjukolehpjaridanpluas free(pjari); free(pluas); } getch(); }

  7. Linked List == kereta???? Page 7

  8. 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 nilai Pointer to next CELL CELL

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

  10. A C B 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 pHead

  11. A C B Struktur linked List • Node terakhir menunjuk NULL • Setiap node terdiri atas • Isi data • Next, yaitu pointer ke node selanjutnya pada list pHead

  12. 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;

  13. Array vs linked 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 • Cara mengakses elemen • Elemen array diakses lewat indeks • Untuk mengakses elemen linked list, harus dilakukan penelusuran elemen list

  14. Array vs Linked List

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

  16. 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

  17. Cara menampilkan isi sel tertentu Tampilkan isi (value) sel ke-3 ! address header 37 38 40 52 4 38 2 40 13 52 40 37 NULL Sel ke-1 pointer Sel ke-1→isi: value=4 address sel berikutnya=38

  18. 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

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

  20. Potongan kode – linked list statis • Isi volts dan amps padapm1, pm2 danpm3 dengan data sembarang • Isipm1.next denganalamatpm2, pm2.next denganalamatpm3, danpm3.next dengan NULL • Tampilkanisipm2 hanyadenganmenggunakanpointer pm1 • Tampilkanisipm3 hanyadenganmenggunakanpointer pm2 • Tampilkanisipm3 hanyadenganmenggunakanpointer pm1 struct motor { float volts; float amps; struct motor *next; }; typedef struct motor motor; void main() { motor *pm1, *pm2, *pm3; }

  21. Operasi dasar linked list • Menambah sebuah node. • Menghapus sebuah node. • Mencari sebuah node. • List tranversal

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

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

  24. pNew 64 55 124 pPre Menambahkan node di tengah list Before: CodepNew -> next = pPre -> next; pPre -> next = pNew; After: pNew 64 55 124 pPre

  25. Menambahkan node akhir list Before: CodepNew -> next = NULL; pPre -> next = pNew; After: pNew 144 55 124 pPre pNew 144 55 124 pPre

  26. 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.

  27. 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; }

  28. 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

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

  30. 75 96 124 pCur pPre Recycled 75 124 pCur pPre Menghapus node dari linked list – kasus umum Before: Code: pPre -> next = pCur -> next; free(pCur); After:

  31. 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).

  32. 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;

  33. 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; }

  34. Tugas Coba & Pelajari source code pertemuan7.cpp

More Related