SEARCHING
Disusun oleh :
Dosen Pengampu :
Fungsi search adalah fungsi bertipe int yang artinya mengembalikan nilai
berupa integer. Fungsi ini menerima input berupa alamat struct head dari
sebuah linked list dan sebuah variable m yaitu variabel yang berisi data
yang dicari. Fungsi ini adalah fungsi pencarian beruntun. Fungsi ini
berkerja dengan melakukan perulangan dari alamat head sebuah linked list
menuju setiap pointer next dari linked list hingga pointer next tersebut
berisi NULL. Dalam perulangan ini, data akan dicocokan. Jika sama, maka
akan dijalankan perintah return yang mengembalikan nilai 1, sebaliknya
jika tidak atau dalam artian data tidak ketemu maka tidak ada perintah dala
if yang dijalankan Perintah yang dijalankan di akhir adalah return 0
sebagai tanda data tidak ditemukan. Jadi keluaran dari fungsi ini antara 0
dan 1.
int main(){
//pendefinisian single linked list
printf("Jonas Kuntoro || D || 1908561069\n\n");
struct a *satu=(struct a*)malloc(sizeof(struct a)); satu->n=2;
struct a *dua=(struct a*)malloc(sizeof(struct a)); dua->n=3;
struct a *tiga=(struct a*)malloc(sizeof(struct a)); tiga->n=5;
struct a *empat=(struct a*)malloc(sizeof(struct a)); empat->n=7;
struct a *lima=(struct a*)malloc(sizeof(struct a)); lima->n=11;
h=satu;
h->next=dua;
h->next->next=tiga;
h->next->next->next=empat;
h->next->next->next->next=lima;
h->next->next->next->next->next=NULL;
//pendefinisian single linked list
printf("Data 7 : %d\n", search(h,7));
printf("Data 8 : %d\n", search(h,8));
printf("Data 11 : %d\n", search(h,11));
}
Fungsi main adalah fungsi utama. Pada fungsi ini dilakukan pengalokasian
memori dinamis dengan cara pembuatan blok memori dengan malloc. Kemudian
setiap blok memori itu akan diisikan nilai integer. Kemudian, setelah itu akan
dilakukan penyalinan alamat alokasi pertama (satu) ke h (head dari linked list),
kemudian akan dilakukan penyalinan alamat alokasi kedua (dua) ke h->next
(pointer selanjutnya dari head), dan seterusnya hingga akhirnya pointer
next terkahir berisikan NULL (untuk mencegah kebocoran memori /
penunjukan data yang tidak benar). Yang terkahir, pemanggilan fungsi
search, yang akan menampilkan hasil 1 jika data ada dan hasil 0 jika data
tidak ada. Data yang ada adalah 2, 3, 5, 7, 11. Pencarian data dengan 8
akan menampilkan hasil 0. Hal ini sesuai dengan tangkapan layar.
Keuntungan pencarian beruntun dengan linked list dibandingkan dengan
array adalah tidak memerlukan penanda nomor indeks karena dalam linked
list iterasi dilakukan dengan membandingkan pointer hingga muncul
NULL.
Pada bagian kode ini, sebenarnya sama dengan nomor satu, hanya
ditambahkan perintah saat data tidak ada. Perintah tersebut adalah
mengalokasikan memori dengan malloc yang alamat hasil alokasi akan
disimpan di b->next. Hal ini dikarenakan b memegang alamat paling akhir
sebelum NULL akibat pencarian data yang tidak ditemukan. Setelah itu,
data pada b->next akan diisi dengan m. Setelah itu dilakukan pengisian
nilai NULL pada pointer next dari b->next. Setelah itu, tetap akan
dikembalikan nilai 0, walaupun data sudah terisi. Itulah cara penyisipan
data pada akhir/ujung kanan linked list.
void tampolData(struct a *tampol){
printf("Data dalam linked list : ");
while(tampol){
printf("%d\t", tampol->n);
tampol=tampol->next;
}
printf("\n");
}
Pada int main, terjadi penciptaan array menampung maksimal 100 integer.
Kemudian dialkukan pengisian data dari indeks 0 hingga indeks 4.
Kemudian narrayku yaitu variabel yang memegang jumlah data diisikan
nilai 5. Jadi, data yang ada dalam array adalah 2,3,5,7,11.
printf("Jonas Kuntoro || D || 1908561069\n\n");
printf("\nBAGIAN INI KHUSUS UNTUK SINGLE LINKED
LIST !\n");
struct a *satu=(struct a*)malloc(sizeof(struct a)); satu->n=2;
struct a *dua=(struct a*)malloc(sizeof(struct a)); dua->n=3;
struct a *tiga=(struct a*)malloc(sizeof(struct a)); tiga->n=5;
struct a *empat=(struct a*)malloc(sizeof(struct a)); empat->n=7;
struct a *lima=(struct a*)malloc(sizeof(struct a)); lima->n=11;
h=satu;
h->next=dua;
h->next->next=tiga;
h->next->next->next=empat;
h->next->next->next->next=lima;
h->next->next->next->next->next=NULL;
//pendefinisian single linked list
tampolData(h);
printf("Data 7 : %d\n", search(h,7));
printf("Data 8 : %d\n", search(h,8));
printf("Data 12 : %d\n", search(h,12));
tampolData(h);
printf("\n\nBAGIAN INI KHUSUS UNTUK ARRAY !\n");
tampolDataArray(arrayku,narrayku);
printf("Data 7 : %d\n", searchArrayku(arrayku,7,&narrayku));
printf("Data 8 : %d\n", searchArrayku(arrayku,8,&narrayku));
printf("Data 12 : %d\n", searchArrayku(arrayku,12,&narrayku));
tampolDataArray(arrayku,narrayku);
}
Penjelasan pendefinisian linked list masih sama dengan soal nomor satu.
Untuk membandingkan hasil data yang suddah dilakukan penyisipan,
dipanggil fungsi tampolData untuk linked list dan tampolDataArray untuk
array sehingga dapat terlihat nilai-nilai data yang ada. Hasilnya ditunjukan
di tangkapan layar.
#include <stdio.h>
#include <stdlib.h>
struct a{
int n;
struct a *next;
}*h;
Progam ini bertujuan untuk melakukan pencarian biner dengan linked list
dan array. Jika data dalam biner tidak ditemukan, maka data tersebut akan
disisipkan sesuai dengan urutan data. Data dalam pencarian biner harus
terurut (merupakan syarat dari pencarian biner).
#include <stdio.h>
#include <stdlib.h>
struct a{
int n;
struct a *next;
}*h;
Program dilengkapi dengan pustaka stdio.h untuk input output dan stdlib
untuk melakukan alokasi memori dinamis. Dalam program juga dibuatkan
struct untuk keperluan linked list dengan h sebagai head linked list. Struct
yang dibuat, penjelasannya masih sama dengan nomor-nomor sebelumnya.
struct a *kembalikanAlamat(struct a *bantu, int nomor){
for(int i=0; i<nomor; i++){
bantu=bantu->next;
}
return bantu;
};
Fungsi ini adalah fungsi pencarian biner untuk linked list. Penjelasannya
masih sama dengan nomor 3. Akan tetapi, ditambahkan fungsi
insertDataYuk di bagian sebelum return 0 yang digunakan untuk melakukan
sisip data jika data ditemukan.
void tampolDataArray(int arrayku[], int jumlahkuy){
printf("Data dalam array : ");
for(int z=0; z<jumlahkuy; z++){
printf("%d\t", arrayku[z]);
}
printf("\n");
}
Fungsi insArr adalah fungsi bertipe void yang digunakan untuk melakukan
sisip data pada array. Fungsi ini memiliki parameter berupa data, indeks
akhir pencarian, array, dan jumlah data di array. Fungsi ini bekerja dengan
cara membandingkan indeks data untuk mencari tempat yang tepat. Saat
sudah ketemu, maka akan dilakukan perulangan untuk memindahkan data
satu per satu ke kanan. Hal ini mirip dengan proses Queue.
int searchArrayku(int arraylah[], int datakuy, int *jumlahkuy){
int l=0;
int r=*jumlahkuy-1;
int ketemu=0;
int m;
while((l<=r)&&(!ketemu)){
m=(l+r)/2;
if(datakuy>arraylah[m])
l=m+1;
if(datakuy==arraylah[m])
ketemu=1;
if(datakuy<arraylah[m])
r=m-1;
}
if(ketemu==0){
insArr(datakuy,m,arraylah,jumlahkuy);
}
return ketemu;
}
Pembutan linked list pada jawaban nomor 4 ini masih sama penjelasannya
dengan jawaban soal nomor 1. Data yang dimasukan disini harus data yang
sudah diurut dan data yang dicoba disini adalah 2,3,5,7,11 (urut naik). Untuk
melakukan pencarian data, dipanggil fungsi bagiDuaYes yang akan
memberikan nilai 1 jika data ada dan 0 jika data tidak ada. Jika bernilai 0,
maka data akann langsung disisipkan dalam linked list. Jika dilihat dari
tangkapan layar, maka program ini berhasil menyisipkan data sesuai urutan
printf("\nBAGIAN INI KHUSUS UNTUK ARRAY !\n");
int arrayku[100];
arrayku[0]=2; arrayku[1]=3; arrayku[2]=5; arrayku[3]=7; arrayku[4]=11;
int narrayku=5;
tampolDataArray(arrayku,narrayku);
printf("Data 1 : %d\n", searchArrayku(arrayku,1,&narrayku));
printf("Data 2 : %d\n", searchArrayku(arrayku,2,&narrayku));
printf("Data 6 : %d\n", searchArrayku(arrayku,6,&narrayku));
printf("Data 7 : %d\n", searchArrayku(arrayku,7,&narrayku));
printf("Data 8 : %d\n", searchArrayku(arrayku,8,&narrayku));
tampolDataArray(arrayku,narrayku);
}
Kode ini merupakan kode untuk membuat array dan memasukan data array
berupa 2,3,5,7,11. Kemudian akan ditampilkan data tersebut dengan
menggunakan fungsi tampolDataArray. Setelah itu akan dilakukan pencarian
dengan fungsi searchArrayku. Jika fungsi ini bernilai 0, maka data akan
langsung disisipkan. Jika dilihat dari hasil tangkapan layar. Data diletakkan
dengan benar.