Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this document? Why not share!

Modul 2

on

  • 1,429 views

 

Statistics

Views

Total Views
1,429
Views on SlideShare
1,419
Embed Views
10

Actions

Likes
0
Downloads
27
Comments
0

2 Embeds 10

http://yohannezs-probo.blogspot.com 9
http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Modul 2 Modul 2 Document Transcript

  • LAPORAN PRAKTIKUM STRUKTUR DATA MODUL 2 Probo Tri Laksono 123090143 / Plug 9 Assdos / Coass Widy Sulistianto / Dian Andarini JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNOLOGI INDUSTRI UPN 'VETERAN' YOGYAKARTA 2010
  • TUGAS 1. Program 3.2 #include<stdio.h> #include<malloc.h> typedef int typeinfo; typedef struct typenode *typeptr; typedef struct typenode { typeinfo info; typeptr next; }xx; typeptr awal, akhir; void buatlistbaru(); void sisipdepan(typeinfo IB); void sisipbelakang(typeinfo IH); void sisiptengah(typeinfo IH); void hapuslist(typeinfo IH); void cetaklist(); int main() { buatlistbaru(); sisipdepan(10); sisipbelakang(25); sisipbelakang(100); sisiptengah(50); cetaklist(); hapuslist(50); //clrscr(); printf("nn"); cetaklist(); return 0; } void buatlistbaru() { typeptr list; list=(typenode *)malloc(sizeof(typenode)); list=NULL; awal=list; akhir=list; } void sisipdepan(typeinfo IB) { typeptr NB; NB=(typenode *)malloc(sizeof(typenode)); NB->info=IB; if(awal==NULL) { awal=NB; akhir=NB; } else { NB->next=awal; } awal=NB; } void sisipbelakang(typeinfo IB) { typeptr NB; NB=(typenode *)malloc(sizeof(typenode));
  • NB->info=IB; if(awal==NULL) { awal=NB; akhir=NB; } else { akhir->next=NB; } akhir=NB; akhir->next=NULL; } void sisiptengah(typeinfo IB) { typeptr NB, bantu; NB=(typenode *)malloc(sizeof(typenode)); NB->info=IB; NB->next=NULL; if(awal==NULL) { awal=NB; akhir = NB; } else { bantu=awal; while((IB > bantu->next->info) && (bantu->next!=NULL)) bantu=bantu->next; NB->next=bantu->next; bantu->next=NB; } } void hapuslist(typeinfo IH) { typeptr hapus, bantu; if(awal==NULL) { printf("List masih kosong! n"); } else { if(awal->info==IH) { hapus=awal; awal=hapus->next; free(hapus); } else { bantu=awal; while((bantu->next->info!=IH)&&(bantu->next!=NULL)) { bantu=bantu->next; } hapus=bantu->next; if(hapus==NULL) { printf("List tidak ditemukann"); } else { bantu->next=hapus->next; } free(hapus); } } } void cetaklist() { typeptr bantu; bantu=awal; while(bantu!=NULL) { printf("%d ",bantu->info); bantu=bantu->next; }}
  • Output Dalam program ini sebenarnya hampir sama dengan contoh program 3.1 . node awal yang telah diinputkan adalah 10 25 50 100 hampir sama dengan tdi listing program yang di compile adalh menghapuskan node 50 denagn melalui bebeap proses Operasi penambahan baru baru akan selalu diletakkan diawal link. Prosedur untuk menambah simpul bisa dipanggil dengan menggunakan : sisipdepan (); setelah terbaca dan tak ada node yang ditambahkan maka listing program bergeak selanjutnya kea rah sisip belakang Operasi penambahan node pada Linked list adalah penambahan suatu Linked list. Simpul-simpul baru yang ditambahkan selalu menjadi sipmpul terakhir. Prosedur yang bisa dipanggil dengan memanggil prosedur : sisipbelakang (); karena dalam link ini tak ada yang kita sisipkan belakang maka menuju sisip tengah yang merupak deklari untuk menyisipkan nilai tengah agar program pun tidak berjalan dan sampai ke hapus node yang diamn nilai node yang akan dihilangkan node 50 maka nilai menjadi 10 25 100 dengan fungsi void hapuslist(typeinfo IH) { typeptr hapus, bantu; if(awal==NULL) { printf("List masih kosong! n"); } else { if(awal->info==IH) { hapus=awal; awal=hapus->next; free(hapus); } else { bantu=awal; while((bantu->next->info!=IH)&&(bantu->next!=NULL)) { bantu=bantu->next; } hapus=bantu->next; if(hapus==NULL) { printf("List tidak ditemukann"); } else { bantu->next=hapus->next; } free(hapus); } } } Dan ini fungsi untuk mencetak list nya void cetaklist() { typeptr bantu; bantu=awal; while(bantu!=NULL)
  • { printf("%d ",bantu->info); bantu=bantu->next; }} ARTIKEL Linked list adalah suatu jenis struktur data yang hampir mirip dengan array, akan tetapi ada beberapa hal yang membuatnya berbeda, yaitu yang pertama jika array, jumlah dari bloknya terbatas disaat kita menginstansiasi array tersebut di awal program kita, sebagai contoh array[10], maka secara otomatis compiler hanya akan menyediakan 10 blok array dari indeks 0 hingga indeks 9, jika kebetulan kita memang hanya memakai 10 blok, maka penggunaan array disini akan efektif, akan tetapi jika kita ternyata saat run time, kita hanya memakai 7 blok dari array tersebut maka kita akan membuang 3 blok memori dengan percuma, nah apa lagi jika ternyata yang kita butuhkan lebih dari 10 blok, maka yang terjadi adalah run time error, array OutOfBonds. Nah hal ini dapat diatasi dengan menggunakan linked list, karena jumlah blok dari linked list dinamis, artinya akan menyesuaikan sendiri saat program dijalankan, dan tidak perlu didefinisikan di awal kita menulis program tersebut.Perbedaan yang kedua adalah, jika seumpamanya ada 10 blok array, dan kita ingin mengakses indeks ke 5 dari array tersebut maka yang kita lakukan cukup hanya dengan menggunkan array[5], secara otomatis kita akan dapat mengkases indeks ke 5 dari array tersebut, jika linked list yang bisa kita akses hanyalah data next, dari data yang kita ketahui saat ini. Sehingga kita tidak bisa melompat lompat seperti dalam pengaksesan array, kita harus mengakses data linked list secara urut mulai awal hingga akhir. Untuk merepresentasikan sebuah linked list maka kita membutuhkan dua buah class yang berbeda, yaitu yang pertama class node, dan class linkedList. Class node ini nantinya akan bergunak sebagai suatu blok, yang menyimpan data dari linkedList yang kita buat tersebut. Dan class linkedList adalah suatu class yang berfungsi menggabuh node node yang ada hingga menjadi sebuah linkedList yang jadi. Dimana dalam suatu node akan memiliki atribut next dan prev yang berguna menjadi pointer atau penunjuk ke node setelah atau sesudah node tersebut. Dalam ilustrasi diatas dapat kita lihat bahwa suatu node/blok dalam linked list setidaknya memiliki 3 atribut, yaitu data itu sendiri, dan pointer atau penunjuk ke node/blok setelah/sebelum node tersebut.
  • Dari Sumber Lain LINK LIST PENDAHULUAN  Dalam suatu linier list kita dapat melakukan operasi penyisipan atau penghapusan atas elemen- elemennya pada sembarang posisi.  Misalkan ada 1500 item yang merupakan elemen dari suatu linier list. Jika elemen ke-56 akan kita keluarkan, maka elemen ke-1 s/d elemen ke-55 tidak akan berubah posisinya pada linier list tersebut. Tetapi elemen ke–57akan menjadi elemen ke-56, elemen ke-58 akan menjadi elemen ke- 57 dst. Selanjutnya, jika kita sisipkan satu elemen pada posisi setelah elemen ke-41, maka elemen ke-42 s/d elemen ke-1500 akan berubah posisinya.  Untuk menyatakan keadaan diatas diperlukan suatu konsep yang berbeda dengan konsep sekuensial sebelumnya. Linked list merupakan suatu cara non-sekuensial yang digunakan untuk merepresentasikan suatu data. DEFINISI  Linked list (one way list) adalah suatu kumpulan elemen data (yang disebut sebagai node) dimana urutannya ditentukan oleh suatu pointer.  Setiap elemen (node) dari suatu linked list terdiri atas dua bagian, yaitu:  INFO berisi informasi tentang elemne data yang bersangkutan.  NEXT (link field/next pointer field), berisi alamat dari elemen (node) selanjutnya yang dituju. Berikut ini sebuah contoh linked list yang terdiri atas 4 node: Info next info next info next info next Star t NUL L Node ke-1 node ke-2 node ke-3 node ke-4
  • Pada node ke-4 field NEXT–nya berisi NULL , artinya node ke-4 tsb adalah node terakhir.
  • Node-node dalam linked list tidak harus selalu digambarkan paralel seperti pada gambar diatas. Linked list pada contoh diatas dapat pula digambarkan seperti berikut ini: Info next Info next null Info next Info next
  • CATATAN :  Ada dua hal yang menjadi kerugian dengan representasi suatu data dengan linked list ini, yaitu: 1. Diperlukan ruang tambahan untuk menyatakan/tempat field pointer. 2. Diperlukan waktu yang lebih banyak untuk mencari suatu node dalam linked list.  Sedangkan keuntungannya adalah : 1. Jenis data yang berbeda dapat di-link 2. Operasi REMOVE atau INSERT hanya dilakukan dengan mengubah pointer-nya saja . 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: 1. Test apakah sama dengan NULL 2. Test untuk kesamaan denganvariabel pointer lain 3. Menetapkan sama dengan NULL 4. Menetapkan menuju ke node lain  Notasi yang didefinisikan sehubungan dengan operasi diatas adalah 1. NODE (P), artinya node yang ditunjuk oleh pointer P 2. INFO (P), artinya nilai INFO dari node yang ditunjuk pointer P 3. NEXT (P), artinya hubungan (link) selanjutnya dari node yang ditunjuk oleh pointer P
  • Sebagai contoh, perhatikan linked list dibawah ini: Info next B start Info next B info next B node ke-2 C A node ke-1 node ke-3 P Info next null NODE (P) = node yang ditunuk oleh P yaitu node pertamaD Node ke-4 INFO (P) = A NEXT (P) = node kedua INFO (NEXT(NEXT(P))) = C
  • MENGHAPUS SUATU NODE DARI LINKED LIST (REMOVE)  Untuk menghapus node dalam linked list digunakan procedure FREENODE.  Jika Q adalah suatu variabel pointer, maka FREENODE (Q) akan menyebabkan node yang ditunjuk oleh variabel poinnter Q dihapus dalam linked list. Perhatikan linked list berikut :  Langkah ke-1 : Q := Next (P) Info next info next info next P Q Info next …….  Langkah ke-2 : Next (P) := Next (Q) Info next Info next info next info next  Langkah ke-3 : Freenode (Q) Procedure Freenode (Q) (a) Next (Q) := Avail (b) Info (Q) := Null (c) Avail := Q
  • MENYISIPKAN SUATU NODE KEDALAM LINKED LIST  Untuk menyisipkan node dalam linked list digunakan procedure GETNODE  Jika NEW adalah suatu variabel pointer, maka GETNODE (NEW) akan menyebabkan node yang ditunjuk oleh variabel pointer NEW disisipkan kedalam linked list. Perhatikan linked list berikut: Procedure Getnode (NEW) If Avail = Null Then out-of-free-space (a) else begin Getnode := Avail (b) Avail := Next (Avail) (c) Next (Getnode) := Null; End;  Algoritma menyisipkan sebuah node : (a) Getnode (NEW) (b) Info (NEW) := Name; (c) Q := Next (P) (d) Next (P) := NEW (e) Next (NEW) := Q ARRAY Array merupakan bagian dasar pembentukan suatu struktur data yang lebih kompleks. Hampir setiap jenis struktur data kompleks dapat disajikan secara logik oleh array.  Array : Suatu himpunan hingga elemen yang terurut dan homogen, atau dapat didefinisikan juga sebagai pemesanan alokasi memory sementara pada komputer.  Terurut : elemen tersebut dapat diidentifikasi sebagai element pertama, kedua, dan seterusnya sampai elemen ke-n.  Homogen : setiap elemen data dari sebuah array tertentu haruslah mempunyai tipe data yang sama.
  • Karakteristik Array : 1. Mempunyai batasan dari pemesanan alokasi memory ( bersifat statis) 2. Mempunyai type data sama ( bersifat Homogen) 3. Dapat diakses secara acak. 4. Berurutan ( terstruktur ). Array mempunyai dimensi : 1. Array Dimensi Satu (Vektor) 2. Array Dimensi Banyak. - Dimensi Dua (Matriks/Tabel) - Dimensi Tiga (Kubik). ARRAY DIMENSI SATU  Merupakan bentuk yang sangat sederhana dari array.  Setiap elemen array mempunyai subskrip/indeks.  Fungsi indeks/subskrip ini antara lain : 1. Menyatakan posisi elemen pada array tsb. 2. Membedakan dengan elemen lain. Penggambaran secara fisik Array A(1:N) : A(1) A(2) A(3) A(4) … A(N) Ket : A : nama array 1,2,3,4,…,N : indeks / subskrip  Secara umum Array Dimensi Satu A dengan tipe T dan subskrip bergerak dari L sampai U ditulis : A(L:U) = (A(I)); I =L , L+1, L+2, …, U Keterangan : L : batas bawah indeks / lower bound U : batas atas indeks / upper bound A : nama Array  Banyaknya elemen array disebut Rentang atau Range A(L:U) = U – L + 1  Range khusus untuk array Dimensi Satu yang mempunyai batas bawah indeks L=1 dan batas atas U=N, maka Range A adalah A(1:N) =( N – 1) + 1 = N
  • Contoh : Data hasil pencatatan suhu suatu ruangan setiap satu jam, selama periode 24 jam ditulis dalam bentuk Array Dimensi Satu menjadi Misal : nama arraynya Suhu, berarti elemennya dapat kita tulis sebagai Suhu(I), dengan batas bawah 1 dan batas atas 24. Suhu(I):menyatakan suhu pada jam ke-I dan 1<=I<=24 Range Suhu(1:24)=(24-1)+1=24