SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
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
Node ke-1
node ke-2 node ke-3 node ke-4
NUL
L
Star
t
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
Info next
Info next
null
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
Node ke-4
Sebagai contoh, perhatikan linked list dibawah ini:
Info next
start Info next info next
node ke-2
node ke-1
node ke-3
Info next
NODE (P) = node yang ditunuk oleh P yaitu node pertama
INFO (P) = A
NEXT (P) = node kedua
INFO (NEXT(NEXT(P))) = C
B
B
B
A
C
D
null
P
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

Contenu connexe

Tendances

9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circularHitesh Wagle
 
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTOPOWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTOAmalia Puspita Sari
 
Pertemuan 3 Praktikum Database
Pertemuan 3 Praktikum DatabasePertemuan 3 Praktikum Database
Pertemuan 3 Praktikum Databasedurohman
 
Algoritma dan Struktur Data - list
Algoritma dan Struktur Data - listAlgoritma dan Struktur Data - list
Algoritma dan Struktur Data - listGeorgius Rinaldo
 
Algoritma dan Struktur Data - List
Algoritma dan Struktur Data - ListAlgoritma dan Struktur Data - List
Algoritma dan Struktur Data - ListKuliahKita
 
Bab 6 singly_linked_list
Bab 6 singly_linked_listBab 6 singly_linked_list
Bab 6 singly_linked_listarii_manroe
 
Laporan praktikum modul viii
Laporan praktikum modul viiiLaporan praktikum modul viii
Laporan praktikum modul viiiDevi Apriansyah
 
KOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer
KOLEJ KOMUNITI - Sijil Aplikasi Perisian KomputerKOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer
KOLEJ KOMUNITI - Sijil Aplikasi Perisian KomputerAiman Hud
 
7. Queue (Struktur Data)
7. Queue (Struktur Data)7. Queue (Struktur Data)
7. Queue (Struktur Data)Kelinci Coklat
 
4.1 Operasi Dasar Singly Linked List 1 (primitive list)
4.1 Operasi Dasar Singly Linked List  1 (primitive list)4.1 Operasi Dasar Singly Linked List  1 (primitive list)
4.1 Operasi Dasar Singly Linked List 1 (primitive list)Kelinci Coklat
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data StructuresNoval C. Kesuma
 
Laporan praktikum modul ix
Laporan praktikum modul ixLaporan praktikum modul ix
Laporan praktikum modul ixDevi Apriansyah
 

Tendances (20)

9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circular
 
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTOPOWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
 
Linked list
Linked listLinked list
Linked list
 
Stack with linked list(algodat)
Stack with linked list(algodat)Stack with linked list(algodat)
Stack with linked list(algodat)
 
Pertemuan 3 Praktikum Database
Pertemuan 3 Praktikum DatabasePertemuan 3 Praktikum Database
Pertemuan 3 Praktikum Database
 
circular linked list
circular linked listcircular linked list
circular linked list
 
Algoritma dan Struktur Data - list
Algoritma dan Struktur Data - listAlgoritma dan Struktur Data - list
Algoritma dan Struktur Data - list
 
Algoritma dan Struktur Data - List
Algoritma dan Struktur Data - ListAlgoritma dan Struktur Data - List
Algoritma dan Struktur Data - List
 
Tistrukdat8 2
Tistrukdat8 2Tistrukdat8 2
Tistrukdat8 2
 
Bab 6 singly_linked_list
Bab 6 singly_linked_listBab 6 singly_linked_list
Bab 6 singly_linked_list
 
Resume praktikum 5__linked_list
Resume praktikum 5__linked_listResume praktikum 5__linked_list
Resume praktikum 5__linked_list
 
Pert.5 linked list
Pert.5 linked listPert.5 linked list
Pert.5 linked list
 
Laporan praktikum modul viii
Laporan praktikum modul viiiLaporan praktikum modul viii
Laporan praktikum modul viii
 
KOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer
KOLEJ KOMUNITI - Sijil Aplikasi Perisian KomputerKOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer
KOLEJ KOMUNITI - Sijil Aplikasi Perisian Komputer
 
teori Struktur data full
teori Struktur data fullteori Struktur data full
teori Struktur data full
 
7. Queue (Struktur Data)
7. Queue (Struktur Data)7. Queue (Struktur Data)
7. Queue (Struktur Data)
 
4.1 Operasi Dasar Singly Linked List 1 (primitive list)
4.1 Operasi Dasar Singly Linked List  1 (primitive list)4.1 Operasi Dasar Singly Linked List  1 (primitive list)
4.1 Operasi Dasar Singly Linked List 1 (primitive list)
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
 
Laporan praktikum modul ix
Laporan praktikum modul ixLaporan praktikum modul ix
Laporan praktikum modul ix
 
Tistrukdat8 1
Tistrukdat8 1Tistrukdat8 1
Tistrukdat8 1
 

Similaire à Modul 2

MAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docxMAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docxDikicandra6
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_listWandi Parlente
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sortYunan Helmi Nasution
 
Linked List dalam Struktur Data
Linked List dalam Struktur DataLinked List dalam Struktur Data
Linked List dalam Struktur DataFajar Sany
 
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docxMAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docxDikicandra6
 
SINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxSINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxlegiafatah
 
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docxMAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docxDikicandra6
 
Bab 5 linked list
Bab 5 linked listBab 5 linked list
Bab 5 linked listFahuda E
 
Slide minggu 2 pertemuan 2 (struktur data1)
Slide minggu 2 pertemuan 2 (struktur data1)Slide minggu 2 pertemuan 2 (struktur data1)
Slide minggu 2 pertemuan 2 (struktur data1)Setia Juli Irzal Ismail
 
Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)Citra Kapindo
 

Similaire à Modul 2 (19)

MAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docxMAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docx
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_list
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sort
 
Linked List dalam Struktur Data
Linked List dalam Struktur DataLinked List dalam Struktur Data
Linked List dalam Struktur Data
 
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docxMAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
 
SINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxSINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptx
 
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docxMAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
 
Bab 5 linked list
Bab 5 linked listBab 5 linked list
Bab 5 linked list
 
Sd bab 8a (senarai)
Sd bab 8a (senarai)Sd bab 8a (senarai)
Sd bab 8a (senarai)
 
Pertemuan 3 ok
Pertemuan 3 okPertemuan 3 ok
Pertemuan 3 ok
 
Linked list
Linked listLinked list
Linked list
 
Pertemuan 4 revisijan2013-mhs
Pertemuan 4 revisijan2013-mhsPertemuan 4 revisijan2013-mhs
Pertemuan 4 revisijan2013-mhs
 
Linked List
Linked ListLinked List
Linked List
 
Slide minggu 2 pertemuan 2 (struktur data1)
Slide minggu 2 pertemuan 2 (struktur data1)Slide minggu 2 pertemuan 2 (struktur data1)
Slide minggu 2 pertemuan 2 (struktur data1)
 
Linked List
Linked ListLinked List
Linked List
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
 
Laporan modul 5 basisdata
Laporan modul 5 basisdataLaporan modul 5 basisdata
Laporan modul 5 basisdata
 
Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)
 
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
 

Modul 2

  • 1. 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
  • 2. 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));
  • 3. 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; }}
  • 4. 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)
  • 5. { 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.
  • 6. 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 Node ke-1 node ke-2 node ke-3 node ke-4 NUL L Star t
  • 7. Pada node ke-4 field NEXT–nya berisi NULL , artinya node ke-4 tsb adalah node terakhir.
  • 8. 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 Info next Info next null
  • 9. 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
  • 10. Node ke-4 Sebagai contoh, perhatikan linked list dibawah ini: Info next start Info next info next node ke-2 node ke-1 node ke-3 Info next NODE (P) = node yang ditunuk oleh P yaitu node pertama INFO (P) = A NEXT (P) = node kedua INFO (NEXT(NEXT(P))) = C B B B A C D null P
  • 11. 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
  • 12. 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.
  • 13. 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
  • 14. 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