Pertama saya akan menjelaskan tentang pointer.
POINTER
Pointer adalah sebuah variabel yang isi datanya adalah alamat memori atau variabel lain. Sehingga pointer dapat juga disebut sebagai variabel alamat (address variable).
Untuk mendeklarasikan sebuah pointer, perintah dasarnya adalah :
Typedata *namavariabel;
Untuk lebih jelasnya adalah :
int *pint;
float *pfloat;
Tmhs *pmhs;
Pada contoh ke-1 kita mendeklarasikan sebuah pointer bernama pint yang menunjuk ke suatu alamat di memori yang menampung sebuah data bertipe integer. Contoh ke-2 mendeklarasikan sebuah variabel pointer bernama pfloat yang menunjuk ke suatu alamat yang menampung sebuah data bertipe float, begitu juga dengan contoh ke-3 yang mendeklarasikan suatu variabel bernama pmhs yang menunjuk ke suatu data yang bertipe Tmhs.
Pengisian data ke variabel pointer bisa berarti pengisian alamat memori ke variabel tersebut atau pengisian data yang ditunjuk oleh pointer.
Untuk lebih jelasnya, perhatikan program dibawah ini :
01: #include
02: #include
03: #include
04:
05: main()
06: {
07: char c,*pc;
08: int i,*pi;
09: float f,*pf;
10: clrscr();
11: c='A';i=7;f=6.25;
12: printf("c : alamat=0x%p, isi=%c\n", &c, c);
13: printf("x : alamat=0x%p, isi=%d\n", &i, i);
14: printf("y : alamat=0x%p, isi=%5.2f\n", &f, f);
15: pc=&c;
16: pi=&i;
17: pf=&f;
18: printf("pc: alamat=0x%p, isi=%c\n", pc, *pc);
19: printf("pi: alamat=0x%p, isi=%d\n", pi, *pi);
20: printf("pf: alamat=0x%p, isi=%5.2f\n", pf, *pf);
21: *pc='B';
22: *pi=125;
23: *pf=512.56;
24: printf("c : isi=%c\n", c);
25: printf("x : isi=%d\n", i);
26: printf("y : isi=%5.2f\n", f);
27: getch();
28: return 0;
29: }
Jika dieksekusi, maka akan menghasilkan sebuah tampilan sebagai berikut :
c : alamat=0xFFF5, isi=A
x : alamat=0xFFF2, isi=7
y : alamat=0xFFEE, isi= 6.25
pc: alamat=0xFFF5, isi=A
pi: alamat=0xFFF2, isi=7
pf: alamat=0xFFEE, isi= 6.25
c : isi=B
x : isi=125
y : isi=512.56
Keterangan Program :
Pada baris 7 : Pendeklarasian sebuah variabel c dengan tipe char, dan sebuah pointer pc yang merupakan pointer char.
Pada baris 8 : Pendeklarasian sebuah variabel i dengan tipe int, dan sebuah pointer pi yang merupakan pointer int.
Pada baris 9 : Pendeklarasian sebuah variabel f dengan tipe int, dan sebuah pointer pf yang merupakan pointer float.
Pada baris 11 : Pengisian variabel c dengan karakter ‘A’, variabel i dengan nilai 7, dan variabel f dengan nilai 6.25.
Pada baris 12 : Menampilkan alamat variabel c dan isinya.
Pada baris 13 : Menampilkan alamat variabel i dan isinya.
Pada baris 14 : Menampilkan alamat variabel f dan isinya.
Pada baris 15 : Variabel pointer pc diisi dengan alamat variabel c sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pc diubah maka berarti merubah isi variabel c dan begitu juga sebaliknya.
Pada baris 15 : Variabel pointer pi diisi dengan alamat variabel i sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pi diubah maka berarti merubah isi variabel i dan begitu juga sebaliknya.
Pada baris 15 : Variabel pointer pf diisi dengan alamat variabel f sehingga kedua variabel mengacu ke tempat yang sama sehingga ketika isi pf diubah maka berarti merubah isi variabel f dan begitu juga sebaliknya.
Baris 16, 17 dan 18 : Menampilkan data yang ditunjuk oleh pointer pc, pi, dan pf, yang hasilnya pasti sama dengan hasil baris 12, 13, dan 14.
Baris 19 : Mengisi data ke alamat yang ditunjuk oleh pc dengan nilai B, yang berarti juga mengganti nilai variabel c.
Baris 20 : Mengisi data ke alamat yang ditunjuk oleh pi dengan nilai 125, yang berate juga mengganti nilai variabel i.
Baris 21 : Mengisi data ke alamat yang ditunjuk oleh pf dengan nilai 512.56, yang berarti juga mengganti nilai variabel f.
Baris 22,23 dan 24 : Menampilkan isi nilai variabel c, i dan f, yang telah diubah oleh variabel pointernya.
Salah satu penggunaan pointer adalah untuk membuat suatu array yang dinamis (banyaknya data yang bisa ditampung sesuai keperluan).
Sebagaimana kita ketahui jika kita membuat suatu program yang dapat menampung data nilai sebanyak 5 buah maka kita akan membuat suatu variabel array yang bertipe int dengan perintah int data[5]. Dengan cara begitu maka program hanya akan berjalan dengan baik jika data yang diinputkan banyaknya di kurang atau sama dengan 5 buah. Apa yang terjadi ketika data yang akan diinputkan ternyata 10 buah, maka langkah yang dilakukan adalah harus mengubah programnya dan mengganti int data[5] menjadi int data[10].
Cara lain untuk membuat program tersebut adalah dengan menggunakan suatu variabel array yang dinamis dimana pemesanan tempat yang diperlukan untuk menyimpan data tidak dideklarasikan dalam program tapi dilakukan secara runtime (ketika program berjalan).
01: #include
02: #include
03: #include
04: main()
05: {
06: int *data;
07: int i,banyakdata;
08: printf("Banyak data yang akan diinputkan : ");scanf("%i",&banyakdata);
09: data=(int *)malloc(sizeof(int)*banyakdata);
10: for(i=0;i
12: printf("Pemasukan data ke-%i :",i+1);scanf("%i",(data+i));
13: }
14: printf("Data yang telah diinputkan adalah : \n");
15: for(i=0;i
17: getch();
18: return 0;
19: }
Tampilan yang dihasilkan oleh program diatas adalah sebagai berikut :
Banyak data yang akan diinputkan : 5
Pemasukan data ke-1 :12
Pemasukan data ke-2 :3
Pemasukan data ke-3 :4
Pemasukan data ke-4 :5
Pemasukan data ke-5 :67
Data yang telah diinputkan adalah :
Data ke-1 : 12
Data ke-2 : 3
Data ke-3 : 4
Data ke-4 : 5
Data ke-5 : 67
Keterangan program :
Baris 6 : Pendeklarasian sebuah variabel pointer int yang bernama data.
Baris 7 : Pendeklarasian variabel i sebagai counter dan banyakdata untuk menyimpan banyaknya data.
Baris 8 : Pengisian data banyak data.
Baris 9 : Pemesanan alokasi di memori untuk variabel pointer data sebesar besarnya int (sizeof(int)) dikali dengan banyakdata.
Baris 10 : Perulangan untuk membaca data dari data ke-0 sampai ke banyakdata-1.
Baris 12 : Membaca data dari keyboard dan dimasukan ke alamat data pada urutan ke-i.
Baris 15 – 16 : Menampilkan isi data yang ditunjuk oleh pointer
Sumber:http://heryandi.net/programming/c/12-11-pointer.html)
LINKED LIST
Linked List adalah struktur data yang berbeda dengan struktur data array. Linked list dapat dibayangkan seperti rantai yang bersambung satu sama lainnya. Tiap-tiap rantai (node) terhubung dengan pointer.
Gambar berikut memperlihatkan sebuah Linked List.
Sebelum kita membahas lebih jauh tentang Linked List, alangkah baiknya bila kita mengulang sedikit tentang struct dan typedef. Struct atau structure dalam bahasa pemograman C/C++ digunakan untuk mendefinisikan tipe data yang memiliki anggota (member) bertipe tertentu. Berikut contoh dan cara mendeklarasi sebuah struct:
struct tgl {
int hari;
int bulan;
int tahun;
}
struct tgl Tanggal;
Bila divisualisasikan kira-kira sebagai berikut:
Contoh di atas memperlihatkan bagaimana mendeklarasi sebuah struct dengan nama struct tgl yang memiliki tiga member yaitu hari, bulan dan tahun yang bertipe int (integer). Kemudian, sebuah variabel Tanggal dideklarasikan bertipe struct tgl. Untuk mempersingkat dan menyederhanakan pendeklarasian sebuah struct, kata cadang typedef biasa digunakan. Sesuai namanya, typedef digunakan untuk mendefinisikan sebuah tipe data menjadi suatu alias tertentu. Perhatikan contoh berikut:
Dengan cara yang sama, pendeklarasian struct tgl di atas dapat disederhanakan menggunakan kata cadang typedef menjadi:
typedef struct tgl {
int hari;
int bulan;
int tahun;
} Date;
Date Tanggal;
Single Linked List
Linked list dapat dianalogikan sebagai rantai yang terdiri dari beberapa node yang saling terkait. Dengan memegang node terdepan, maka node-node yang saling terkait lainnya dapat kita telesuri.
Dengan hanya mencatat atau memegang alamat dari alokasi data bertipe struct root pada sebuah variabel LL maka keberadaan node-node dalam linked list tersebut dapat diketahui. Bila data-data dalam node berupa bilangan bulat, maka struct yang diperlukan untuk membentuk linked list adalah sebagai berikut:
typedef struct node * NodePtr;
typedef struct node {
int data;
NodePtr next;
}Node;
typedef struct root {
NodePtr head;
unsigned size;
}Root;
Root LL;
Penambahan Node Linked List
Bila setiap penambahan simpul pada linked list dilakukan pada bagian depan (paling dekat dengan head) maka kompleksitas yang diperlukan untuk menambah node baru dalam linked list konstan atau O(1). Penambahan sebuah node dengan nilai 3 pada linked list di atas dapat divisualisasikan sebagai berikut:
Penelusuran Node Linked List
Kompleksitas penelusuran (pencarian) node dalam linked list adalah linier atau O(n). Hal ini disebabkan karena node-node dalam linked list disusun secara acak (tidak berurut). Seandainya pun simpul-simpul dalam linked list disusun secara berurut, metode pencarian biner (binary search) tetap tidak dapat dipergunakan. Ada 2 alasan mengapa pencarian biner tidak dapat digunakan:
1. Linked list tidak memiliki indeks seperti array, sehingga akses langsung ke node tertentu tidak dapat dilakukan. Untuk menuju ke node tertentu, proses pemeriksaan tetap dimulai dari node head (node terdepan). Oleh karena itu proses pencarian selalu berjalan secara linier.
2. Tidak dapat membagi linked list menjadi 2 bagian yang sama besar seperti saat membagi array menjadi 2 bagian bila metode pencarian biner diaplikasikan pada array terurut.
Penghapusan Node Linked List
Sebelum proses penghapusan dilakukan, pencarian node yang ingin dihapus harus terlebih dahulu dilakukan. Bila node yang ingin dihapus ditemukan, suatu hal yang selalu harus diperhatikan adalah bagaimana mengeluarkan node tersebut dari linked list dan kemudian menyambung kembali linked list kembali. Kompleksitas menghapus sebuah node dalam linked list adalah O(n). Perhatikan gambar berikut ini:
Implementasi Linked List
/* linkedlist.h: header file */
typedef struct node * NodePtr;
typedef struct node {
int data;
NodePtr next;
}Node;
typedef struct list {
NodePtr head;
unsigned size;
}List;
Prototype function ditulis disini
void initList(List *);
int addList(List *, int);
void displayList(List *);
void freeList(List *);
/* linkedlist.c: implementasi method dilakukan dalam file ini */
#include "linkedlist.h"
#include
#include
void initList(List * lptr) {
lptr->head = NULL;
lptr->size = 0;
}
int addList(List * lptr, int data) {
NodePtr new;
new = malloc(sizeof(Node));
if(new == NULL) {
printf("Error dalam membuat alokasi memori\n");
return 0;
}
new->data = data;
new->next = lptr->head;
lptr->head = new;
lptr->size++;
return 1;
}
void displayList(List * lptr) {
NodePtr current = lptr->head;
printf("\n");
while(current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("null\n");
}
void freeList(List * lptr) {
NodePtr next=lptr->head;
NodePtr current=next;
while(current != NULL) {
next = current->next;
free(current);
current = next;
}
}
/* main.c */
#include
#include
#include "linkedlist.h"
int main(void) {
int i, n, data;
List LL;
initList(&LL); /* Buat initial linked list */
printf("Jumlah simpul = ");
scanf("%d", &n);
/* Input data simpul */
for(i=0; i
scanf("%d", &data);
addList(&LL, data);
}
displayList(&LL);
freeList(&LL);
return EXIT_SUCCESS;
sumber:
(http://www.keudekupi.com)
SORTING
PENGRUTAN DATA (SORTING)
Adalah suatu proses mengurutkan data yang sebelumnya disusun secara acak ata tidak teratur menjadi urt dan teratur menurut aturan tertntu. Tujuan ini dimaksudkan untuk mempermudah proses pemodifikasian selanjutnya. Ada bermacam-macam metode pengurutan, diantaranya yaitu:
1. Bubble sort
Adalah dengan cara membandingkan elemen yang sekarang dengan yang berikutnya, apabila elemen yang sekarang lebih besar daripada berikutnya maka posisi ditukar, kemudian data yang lebih besar tadi dibandingkan lagi dengan yang berikutnya, demikian seterusnya dengan aturan yang sama.
Contoh : 4, 12, 70, 60, 41, 11
4<12 70=" tetap">60= berubah :60, 70
70>41= berubah :41, 70
70>11= berubah :11, 70
hasil sementara = 4, 12, 60, 41, 11, 70 begitu serusnya
2. Quick sort
Adalah suatu metode pengurutan yang membandingkan suatu element (pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen yang lain yang lebih kecil daripada pivot terletak disebelah kiri pivot, sedangkan elemen yang lebih besar darimpivot diletakkan disebelah kanan pivot. Sehingga akan terbentuk dua sublist yaitu yang terletak disebelah kiri pivot dan disebelah kanan pivot.
Contoh : 20, 10, 15, 5, 8, 3
A : data 20, 10, (15), 5, 8, 3
i j
i berhenti pada posisi 1 karena langsung mendapakan nikai yang lebih besar dari pivort(15) yaitu 20
j berhenti pada posisi 6 karena langsung mendapakan nilai yang lebih kecil dari pivort(15) yaitu 3
sehingga data berubah menjadi
3, 10, 15, 5, 8, 20
B : 3, 10, 8, 5, 15, 20
C : 3, 5, 8, 10, 15, 20
3. Merge sort
Adalah sekumpulan data dibagi menjadi dua sama besar, kemudian bagiannya itu diurut sendiri2, lalu di gabung kembali dengan hasil yang telah terurut.
4. Selection sort
Adalah suatu metode pengurutan yang membandingkan elemen yang sekarang dengan element berikutnya sampai element yang terakhir. Jika ditemukan elemen lain yang lebih kecil maka dicatat posisinya dan langsung ditukar.
Misalkan data sebagai berikut : 5, 34, 32, 25, 75, 42, 22, 2
Maka prosesnya :
A : 5, 34, 32, 25, 75, 42, 22, 2
B : 2, 34, 32 ,25, 75, 42, 22, 5
C : 2, 5, 32, 25, 75, 42, 22, 34
D : 2, 5, 22, 25, 32, 34, 75, 42
E : 2, 5, 22, 25, 32, 34, 42, 75
contoh program array c++
mencarin data dalam variable array
#include
#include
#include
int main () {
int a[10] = {5,12,24,53,26,17,62,36,68};
int cari;
for (int i=0; i<10; i++)
{ cout<<”data baris ke-“<<<” = “<
cout<
cout<<”masukkan data yang dicari : “;
cin>>cari;
for (int j=0; j<10; j++)
{ if a[j] == cari
{ cout<<”nilai yangh dicari berada pada indeks ke- “<
else { cout<< “data yang dicari tidak ditemukan”; }
return o;
getch ( ) :
}
Sumber:(http://erulanak-kendal.blogspot.com)
SEARCHING&BINARY SEARCH
1. Pengertian Searching
Pencarian (Searching) merupakan proses yang fundamental dalam pemrograman, guna menemukan data (nilai) tertentu di dalam sekumpulan data yang bertipe sama. Fungsi pencarian itu sendiri adalah untuk memvalidasi (mencocokkan) data.
2. Metode pencarian dibagi menjadi 2, yaitu:
1. Metode Pencarian Beruntun
Konsep yang digunakan dalam metode ini adalah membandingkan data-data yang ada dalam kumpulan tersebut, mulai dari elemen pertama sampai elemen ditemukan, atau sampai elemen terakhir.
2. Metode Pencarian Bagi Dua (Binary Search)
Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau menurun). Metode ini lebih cepat dibandingkan metode pencarian beruntun. Data yang sudah terurut menjadi syarat mutlak untuk menggunakan metode ini.
Konsep dasar metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data yang berada pada elemen paling tengah bernilai sama, lebih dari atau kurang dari nilai data yang akan dicari. Jika bernilai sama, maka langsung data yang dicari ditemukan. Jika data di elemen terurut naik, maka jika data yang berada di tengah kurang dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kanan, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan sebaliknya untuk nilai data yang berada di tengah lebih dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kiri, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan demikian sebaliknya untuk data yang terurut menurun. Dalam hal ini tentukan indeks paling awal dan indeks paling akhir, untuk membagi 2 elemen tersebut.
Indeks awal = i, dimana nilai i, pada awalnya bernilai 0;
Indeks akhir = j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elemen.
contoh script 1:
//#include
#include
#include
//#pragma hdrstop
//#pragma argsused
int main(int argc , char* argv[])
{
int x,i,k;
int l[10]={20,15,22,30,60,28,17,18,21,22};
printf(”Data yang dicari = “); scanf(”%d”,&x);
k=0;
for(i=0;i<9;i++)
{
if(l[i]==x)
{
printf("Data ditemukan di elemen %d\n",i);
k++;
}
}
if(k==0)
{
printf("Data tidak ditemukan\n");
}
printf("Jumlah data yang ditemukan = %d",k);
getch();
return 0;
}
contoh script 2:
//#include
//#include hrdstop
#include
#include
//#pragma argsused
int main(int argc, char* argv[])
{
int X,i,j,k,p;
int L[10]={12,14,15,17,23,25,45,67,68,70};
/*Menentukan apakah terurut menaik atau menurun*/
/*Variabel p digunakan untuk kode, apakah menaik atau menurun*/
/*Jika p=0, maka data terurut menaik*/
/*Jika p=1, maka data terurut menurun*/
if (L[0]
printf("Data terurut menarik \n");
p=0;
}
else
{
printf("Data terurut menurun \n");
p=1;
}
/*input data X yang akan dicari*/
printf("Data yang dicari="); scanf("%d",&X);
/*Penentuan indeks awal dan akhir semula*/
i=0;
j=9;
/*proses perulangan untuk menentukan nilai tengah k */
do
{
k=(i+j)/2;
if (p==0) //jika data terurut menaik
{
if (L[k]==X)
{
printf ("Data ditemukan di elemen %d",k);
getch();
return 0; //langsung keluar program
}
else if(L[k]X)
{
i=k;
}
else
{
j=k;
}
}
}
while(k!=0); //sampai nilai k=0, iterasi berakhir
printf(”data tida ditemukan!!”);
getch();
return 0;
}
(Sumber: http://lusiajah.wordpress.com)
Tidak ada komentar:
Posting Komentar