Laporan ini membahas program struktur data linked list dengan bahasa C. Program tersebut melakukan operasi penambahan dan penghapusan node pada linked list tunggal. Terdapat fungsi untuk menambahkan node di depan, belakang, dan tengah list, serta menghapus node berdasarkan nilai. Tulisan ini juga menjelaskan konsep linked list dan array secara umum beserta operasi dasar pada masing-masing struktur data.
1 of 14
Downloaded 29 times
More Related Content
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
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 ke57akan 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 NEXTnya 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