hanya blog pribadi berisi kegiatan pribadi

Monday, January 19, 2009

Tugas Aku



Created
By Muhamad Faisol (07 01 06 91) Berbagai Sumber




Tugas Mata Kuliah : Struktur
Data



Pertemuan Ke-1: Program KTP



Oleh : Muhamad Faisol (07 01
06 91)






Program
Data_KTP;





Uses
crt;


Type


KTP = Record


NIK
: String [5];



Nama : String [25];



Tempat : String [15];



Tanggal : String [15];



Jklm : String [10];



Agama : String [10];



Alamat : String [25];



Pkrj : String [15];



Kwgn : String [15];


end;





const


Max=100;



garis='-------------------------------------------------------------------------------';


batas=’-------------------‘;





var


MyKTP:array[1..Max]
of KTP;


pil :char;


n :
integer;


Pos :
Integer;





procedure
TambahData;





var


i : integer;


jwb : char;





begin





i := 0;


jwb := 'y';


while
(jwb='Y')or(jwb='y') do





begin


clrscr;


textattr:=7;


textattr:=13;


n:=n+1;



gotoxy(20,9);write('Penduduk
ke-',n);



gotoxy(20,10);write('NIK
: '); readln(myktp[n].nik);



gotoxy(20,11);write('Nama
: ');readln(myktp[n].nama);



gotoxy(20,12);write('Tempat Lahir
: ');readln(myktp[n].tempat);



gotoxy(20,13);write('Tanggal
Lahir : ');readln(myktp[n].tanggal);



gotoxy(20,14);write('Jenis
Kelamin : ');readln(myktp[n].Jklm);



gotoxy(20,15);write('Agama
: ');readln(myktp[n].agama);



gotoxy(20,16);write('Alamat
: ');readln(myktp[n].alamat);



gotoxy(20,17);write('Pekerjaan
: ');readln(myktp[n].pkrj);



gotoxy(20,18);write('Kewarganegaraan
: ');readln(myktp[n].kwgn);


textattr:=14;


repeat



gotoxy(20,20);write('Apakah akan
tambah data?(Y/N) ');



jwb:=upcase(readkey);


until
(jwb='Y') or (jwb='N');


end;





textattr:=7;


end;





function
CariX(CNIK:String):Boolean;





var


Ketemu : Boolean;


i : Integer;





begin


ketemu := False;





for
i:=1 to n do





begin





if
Myktp[i].nik=cnik then





begin



ketemu := True;


break;


end;


end;





pos:=i;


cariX := ketemu;


end;





Procedure
Cari;





var


XNIK : String[15];





begin





clrscr;



gotoxy(1,1);textattr:=6;


write('Created
by:Muhamad Faisol 07010691');


textattr:=7;


textattr:=10;



gotoxy(20,6);write('Pencarian KTP
');



gotoxy(20,7);write(batas);



gotoxy(20,11);write('Masukan NIK
: '); readln(XNIK);



gotoxy(20,9);write('Hasil
Pencarian');





if
Carix(xNIK)=True then





begin



gotoxy(20,11);write('NIK
: ',myktp[pos].nik);



gotoxy(20,12);write('Nama
: ',MyKTP[pos].Nama);



gotoxy(20,13);write('TeTaLa
: ',MyKTP[pos].tempat,', ',MyKtp[pos].tanggal);



gotoxy(20,14);write('Jenis
Kelamin : ',MyKTP[pos].Jklm);



gotoxy(20,15);write('Agama
: ',MyKTP[pos].Agama);



gotoxy(20,16);write('Alamat Rumah
: ',MyKTP[pos].Alamat);



gotoxy(20,17);write('Pekerjaan
: ',MyKTP[pos].pkrj);



gotoxy(20,18);write('Kewarganegaraan
: ',MyKTP[pos].Kwgn);





end





else





begin


Textattr:=15;



Gotoxy(20,14);Write('NIK:
',xnik,' Tidak Terdaftar');





end;






gotoxy(20,20);write('Press Any
key to exit');


readkey;


textattr:=7;


end;





Procedure
Hapus;





var


xNIK:String[15];


Status:Boolean;





begin





clrscr;



gotoxy(1,1);textattr:=6;


write('Created
by:Muhamad Faisol 07010691');


textattr:=7;


textattr:=12;



gotoxy(20,6);write('Hapus KTP
:');



gotoxy(20,7);write(Batas);



gotoxy(20,11);write('Masukan NIK
: '); readln(XNIK);



Status:=Carix(XNIK);


if
status=true then





begin



MyKTP[pos].NIK := '-';



MyKTP[pos].Nama := '-';



MyKTP[pos].Tempat := '-';



MyKTP[pos].jklm := '-';



MyKTP[pos].Agama := '-';



MyKTP[pos].Alamat := '-';



MyKTP[pos].pkrj := '-';



MyKTP[pos].Kwgn := '-';



gotoxy(20,15);write('Nik ',xnik,'
Telah Dihapus');


end





else





begin



textattr:=15;



gotoxy(20,15);write('NIK ',xnik,'
Tidak terdaftar');


end;






gotoxy(20,18);write('Press Any
key to exit');


readkey;


textattr:=7;


end;





Procedure
Tampil;





Var


i : Integer;





begin


clrscr;



gotoxy(1,1);textattr:=6;


write('Created
by:Muhamad Faisol 07010691');


textattr:=7;


textattr:=11;


gotoxy(25,9);
write('========== DATA PENDUDUK ==========');


textattr:=14+128;



gotoxy(2,11);write(garis);


textattr:=13;



gotoxy(3,12);write('NIK');



gotoxy(18,12);write('Nama');



gotoxy(43,12);write('Tetala');



gotoxy(58,12);write('Alamat');


textattr:=14+128;



gotoxy(2,13);write(garis);





for
i:=1 to n do





begin


textattr:=10;


if
MyKTP[i].nik<>'-' then





begin



gotoxy(3,13+i);write(myktp[i].nik);



gotoxy(18,13+i);write(MyKTP[i].Nama);



gotoxy(43,13+i);write(MyKTP[i].Tempat,',
',myktp[i].tanggal);



gotoxy(58,13+i);write(myktp[i].alamat);


end;





end;





textattr:=14+128;



gotoxy(2,14+i);write(garis);



gotoxy(20,18);write('Press Any
key to exit');


readkey;


textattr:=7;


end;





Procedure
MENU;





var


i:integer;





begin





clrscr;



gotoxy(1,1);textattr:=6;


write('Created
by:Muhamad Faisol 07010691');


textattr:=7;



gotoxy(20,9);writeln('==========
MENU ==========');



gotoxy(22,11);write('1. Tambah
Data');



gotoxy(22,12);write('2. Cari
Data');



gotoxy(22,13);write('3. Hapus
Data');



gotoxy(22,14);write('4. Tampil
Data');



gotoxy(22,17);write('5. Exit');



gotoxy(20,19);write('==========================');





repeat


textattr:=9;



gotoxy(20,21);write('Pilihan
Anda? ');


textattr:=7;


pil:=readkey;


until
(pil>='1') and (pil<='5');





case
pil of


'1':
begin


TambahData;


menu;


end;


'2':begin


cari;


menu;


end;


'3':Begin


hapus;


menu;


end;


'4':begin


tampil;


menu;


end;


'5':Halt;


end;


end;


begin


menu;


end.



Tugas Mata Kuliah : Struktur
Data



Pertemuan Ke-2: Cara Kerja
Search Engine dan Bilangan Fibonacci



Oleh : Muhamad Faisol (07 01
06 91)







Cara Kerja Search Engine



Search Engine (=Mesin Pencari)
adalah sebuah program yang didisain untuk membaca kumpulan kata-kata
yang diambil dari situs-situs web. Biasanya sebuah software (dikenal
sebagai robot/spider) ditugaskan untuk membaca seluruh atau sebagian
kata-kata di sana (mungkin juga mengikuti links yang ada di situs
tersebut). Hasilnya akan disimpan di dalam sebuah indeks. Selain itu,
Search Engine juga memperoleh keberadaan sebuah situs dari URL yang
disubmit oleh pemiliknya. Beberapa waktu kemudian, robot/spider akan
membaca situs tersebut dan hasilnya akan disimpan ke dalam indeks.
Indeks inilah yang digunakan Search Engine untuk menjawab pertanyaan
yang diajukan.



Bagaimana Spider bekerja?



Spider, robot ataupun web crawler
menelusuri internet dengan membaca historical list (misalnya dari
daftar server yang ada di internet), kemudian membuat rangking
diantara situs-situsnya. Berdasarkan urutan inilah spider menjelajah
internet.



Bagaimana Search Engine
mengindeks?



Search Engine melakukan
pengindeksan berdasarkan apa yang ada di situs (natural language).
Tidak ada penyaringan lagi (kecuali untuk Meta Tag). Karena itulah
search engine paling tepat jika digunakan untuk mencari
informasi/konsep yang sudah jelas terdefinisi dan konsep tersebut
sudah banyak digunakan. Kita tinggal menyebutkan konsep/istilahnya,
kemudian search engine akan memberitahu dimana konsep itu berada.
Namun ada juga search engine yang memiliki fasilitas tambahan,
seperti Excite yang memiliki fasilitas penggunaan sinonim. Jadi, bila
Anda mencari informasi cycling, Excite juga akan mencari bicycling Di
lain pihak, search engine juga memiliki informasi yang sudah tidak
up-to-date lagi. Penyebabnya adalah search engine belum melakukan
pengecekan ulang lagi. Keterbatasan search engine lainnya: tidak
dapat memberikan informasi on-the-fly (yang dibuat karena eksekusi
program).



Faktor-faktor yang menentukan
kehandalan Search Engine :



1. Ukuran database: Banyaknya URL
dan kata-kata yang diindeks.



2. Jenis Resource yang diliput:
Apakah hanya informasi dari web atau termasuk newsgroup dan ftp



3. Kedalaman Pengindeksan: Tidak
mungkin seluruh internet bisa diindeks. Oleh karena itu, beberapa
spider hanya membatasi pengindeksan untuk beberapa dokumen dalam satu
situs. Ada juga yang hanya mencatat paragraf pertama, halaman pertama
atau hanya 100 kata pertama.



4. Fasilitas : Kini search engine
berlomba menawarkan penggunaan yang termudah. Mereka pun kini
berlomba-lomba untuk menambah fasilitasfasilitasnya yang lain.



Cara Kerja Google



Google seperti Search Engine yang
lain, menggunakan software otomatis untuk membaca, menganalisa,
membandingkan dan mengurutkan halaman website anda. Hal ini berarti
bahwa unsur-unsur visual dari website seperti layout, warna, animasi,
flash, visualisasi yang sederhana dan grafik lainnya akan diabaikan.
Search Engine Google adalah seperti orang buta yang membaca buku
dengan menggunakan huruf Braille.Berikut ini pemikiran pokok yang
harus anda ketahui tentang Serach Engine Google:



Jadi, apa yang dimaksud dengan
ranking?



Jika anda mengetik contoh “ebook”
ke dalam kotak pencarian di Google, maka anda akan mendapatkan
tampilan daftar (default: 10 listing per halaman) yang Google anggap
paling relevan, kemudian akan difilter sesuai dengan relativitas
keinginannya.



Website yang paling relevan dan
paling penting akan ditampilkan dalam daftar secara descending (mulai
dari paling relevan hingga tidak begitu relevan). Untuk Google,
relevansi halaman web tergantung pada seberapa baik halamannya pada
kata atau phrase pencarian.



Arti penting pada sisi lain yaitu
bergantung pada kualitas dan kuantitas (jumlah) link yang menunjukkan
ke halaman website anda dari halaman website lain. Jika website anda
tidak tampil pada top 30 itu karena trafik Google atau Search Engine
sangat cepat berubah, atau hal ini disebabkan oleh jarangnya orang
mencari halaman website tersebut.



Kapan Google datang
mengunjungi website anda?



Untuk masuk dalam daftar indeks
Database Google, maka Google akan mengunjungi websie anda dengan
menggunakan:



- Robot



- Spider



Kedua program ini akan membaca
setiap halaman melalui halaman utama dan diikuti dengan memasuki
setiap link ke semua halaman website anda.



Google tidak akan menambahkan
halaman web anda ke dalam indeks databasenya kecuali jika ada minimal
satu halaman web lain dalam indeks tersebut yang mempunyai link ke
satu halaman lainnya. Jadi jangan pernah memasukkan website anda
secara langsung ke Google.



Atur terlebih dahulu setiap link
halaman web anda sebelum di masukkan ke Google.



Dahulu kala :), Google mempunyai
2 tipe Crowl (penjelajah website), yaitu:



Deep Crawl atau Main Crawl



Tipe ini mempunyai kebiasaan
menjelajah setiap halaman website tiap mendekati akhir bulan.



Fresh Crawl



Tipe ini mempunyai kebiasaan
menjelajah beberapa kali setiap minggu (setiap hari untuk beberapa
website), tetapi pada halaman tertentu saja.



Semakin popular website anda,
semakin sering Google mengunjungi website tersebut. Anda dapat
menentukan kapan website anda terakhir dikunjungi oleh Google dengan
melihat tanggal yang tampil pada baris paling bawah di listing hasil
halaman pencarian Google.



Deep/Main Crawl & Google
Dance



Deep/Main Crawl adalah kebiasaan
yang dilakukan oleh spider utama yang disebut Googlebot. Google akan
memperbaharui indeks utama sebulan sekali setelah Deep/Main Crawl
mengunjungi semua website secara lengkap (Google sekarang cenderung
menemani semua perubahan lebih lanjut walaupun pembaharuan bulanan
masih terjadi dari waktu ke waktu).



Hal ini merupakan kritik pada
website anda yang berjalan ketika Google mengunjunginya. Jika website
anda di bawah, maka listing di Google, kemungkinan menghilang yang
akan tampil pada update berikutnya. Google akan berpikir bahwa
website anda tidak lagi ada dan kemungkinan dibuang dari indeks dalam
database Google.



Proses ini umumnya dimulai minggu
terakhir dari tiap bulan dan akan berlanjut sampai minggu tertentu.
Indeks akan diperbaharui biasanya didasarkan pada isi website yang
mereka punyai disimpan dalam database di awal bulan untuk website
anda, oleh karena itu maka perhitungan ranking akan dilakukan
berulang kali untuk masing-masing halaman dari setiap website. Karena
banyaknya halaman indeks website yang ter-indeks oleh Google,
perhitungan ini membutuhkan waktu hingga beberapa minggu.



Selama periode ini, pencarian
ranking dapat berubah, bahkan perubahan sampai pada tiap menit.
Fluktuasi bulanan ini dimasukkan ke dalam Google Dance. Anda dapat
melihat versi dari indeks server yang berbeda pada TOP TEN Data
Center utama Google dengan menggunakan tool Google Dance yang dapat
di download di
http://www.google-dance.com



Fresh Crawl



Fresh Crawl dilakukan oleh spider
Google yang berbeda yang disebut dengan nama Freshbot. Dilakukan
beberapa kali dalam seminggu tapi hanya beberapa halaman saja yang
akan dikunjungi.



Freshbot akan melihat halaman
baru dan untuk halaman yang dalam waktu dekat terakhir di-update oleh
Administrator website tersebut. Halaman baru segera dimasukkan ke
dalam hasil pencarian, walaupun sebenarnya halaman baru ini belum
terindeks di database utama Google, melainkan tersimpan dalam indeks
sementara yang akan diatur kemudian. Oleh karena itu halaman ini
tidak mempunyai urutan yang akurat sampai Main Crawl pada website
tersebut.



Proses ini disebabkan karena
halaman web baru tersebut akan dibandingkan lagi dengan halaman web
secara keseluruhan pada indeks utama. Jika anda tertarik, anda dapat
memeriksa file log server anda untuk useragent Googlebot.



Bagaimana Google menggolongkan
website?



Google menggunakan suatu alat
canggih dan algoritma kepemilikan untuk mengatur rangking website
yang menggunakan lebih dari 100 kriteria yang berbeda dalam
perhitungan, masing-masing pertimbangan berubah setiap saat. Karena
algoritma yang berubah-ubah maka dibutuhkan tehnik tertentu yang akan
digunakan untuk bekerja dengan baik dari waktu ke waktu. Hal ini
sangat penting untuk diingat ketika anda menginginkan website yang
anda buat tidak diubah kedudukan (ranking)nya dengan alasan apapun.
Untuk alasan ini, pengoptimalan website anda tidak dilakukan sekali
saja. Anda harus selalu mencoba, mengkaji dan memperbaiki website
yang anda buat. Sebenarnya, algoritma Google dapat dikelompokkan
menjadi 2 faktor utama, yaitu:



Faktor Keyword (Textual)



Adalah seberapa baik website anda
dioptimalkan untuk memilih keyword (bagaimana, dimana dan kapan
keyword tersebut digunakan).



 Pada pertengahan Nopember
2003, Google telah memperkenalkan suatu algoritma utama yang bekerja
selama perubahan yang disebut Florida Update yang akan mengganti
urutan website di dalam database Google.



Jika terdapat kata kunci yang
sama pada link dari salah satu halaman website. Faktor keyword ini
menentukan keterkaitan atau relevansi suatu halaman web.



Faktor Link (PageRank)



Hal ini meliputi kualitas dan
kuantitas dari suatu link pada website lain yang menunjuk ke lokasi
anda. Faktor link ini menentukan pentingnya suatu halaman web yang
nantinya akan dihubungkan ke PageRank (PR) Google.



Google akan mencari halaman dalam
indeksnya yang merupakan relevansi dan arti penting suatu pencarian
ke dalam suatu istilah atau ungkapan tertentu, kemudian diurutkan ke
dalam listing pada database Google secara descending dalam halaman
hasil pencarian.



Faktor keyword dan relevansi
halaman website



Keyword atau kata kunci
dihubungkan dengan kata atau ungkapan yang dimasukkan ke dalam Search
Engine untuk mencari informasi tertentu. Meskipun kita kadang
memasukkan 2 sampai 5 atau bahkan lebih ungkapan/kata kedalam teks
box pencarian Google itu tidak menjadi masalah karena Google akan
mengindeks semua halaman web yang terdapat dalam indeks dan daftar
halaman yang berisi kata atau ungkapan yang dicari tersebut. Keyword
ini akan menjabarkan tema suatu website.



Seberapa baik anda menentukan
tema dari website anda dan seberapa baik anda mengoptimalkan
penggunaan keyword yang akan sangat mempengaruhi rangking website
anda di Google.



Secara rinci, Google akan
memperhatikan jika ada teks dari link website lain menunjuk/mengarah
ke website anda, judul, isi dari link halaman website tersebut yang
juga berisi keyword anda.



Faktor Link (PageRank) &
keutamaan halaman web



Keutamaan halaman web adalah
semua tentang link, kualitas, kuantitas, dan kekuatan. PageRank juga
disebut sebagai RP Google.



Ketika marketer internet
berbicara tentang cara untuk mengoptimalkan suatu website untuk
Search Engine, mereka umumnya membicarakan tentang aspek peningkatan
website tersebut yang akan meningkatkan relevansi halaman website.
Hal ini tidak sepenuhnya benar, karena faktor kualitas dari website
tersebut juga patut menjadi perhitungan.



Google akan mencari link yang
akan ditunjuk ke halaman website anda dari website lain. Google
mempercayai bahwa kalau ada link dari website A ke website B adalah
vote yang penting dari website B. Dimana hal ini akan menolong setiap
halaman di website anda mempunyai nilai PR (PageRank). Pada umumnya
nilai PR ini selalu paling tinggi untuk halaman web Home yang banyak
dikunjungi para netter sebelum mereka masuk ke sub halaman website
anda (melalui link tentunya).



Semakin banyak website lain yang
mempunyai link ke website anda (relasi), maka semakin penting dan
semakin sering kunjungan Google dan semakin tinggi juga nilai PR
anda. Lebih dari itu, kualitas dan kuantitas dari suatu link juga
dipertimbangkan mengingat tidak semua link akan bernilai sama.
Pelihara ingatan anda tentang PageRank, karena faktor tunggal ini
digunakan untuk penyusunan urutan website dalam database Google
(Ranking).



Yang perlu anda ingat, PageRank
bukan faktor utama di dalam keyword yang digunakan di website anda.
Nilai PageRank akan aktif setelah membandingkan halaman pada website
di dalam indeks Google vs halaman web yang lain (lebih dari 3,3
Milyar halaman web).



Top 5 dalam pencarian Google



Walaupun Google melihat dari 100
kategori yang berbeda untuk mengurutkan website, disini ada 5 aspek
yang sangat berpengaruh dan harus dimengerti secara serius tentang
top ranking adalah:



*) Keyword digunakan di dalam
judul halaman web anda (letaknya diantara tag <TITLE>).



*) Keyword digunakan di dalam
heading (H1) dan di paragraf pertama halaman website anda.



*) Keyword digunakan di dalam
teks link, keduanya di website anda dan di website lain.



*) Nilai PageRank dari halaman
website anda, tergantung banyaknya link menuju ke website anda dari
website lain.



*) Halaman yang berisi lebih dari
200 kata dari teks yang relevan (semakin banyak semakin baik)



Untuk meletakkan event yang lebih
sederhana dalam masalah penempatan ranking tinggi di Google, maka
anda membutuhkan pengoptimalan website anda dengan menggunakan
keyword atau kata kunci yang paling baik. Hal ini bisa didapat dengan
cara mengambil beberapa website penting dan relevan ke link website
anda, dan anda bisa mengganti teks berisi link dengan keyword yang
paling baik.



Ada 3 proses utama yang
memungkinkan Google memberikan hasil pencarian terbaik, yaitu:



Crawling



Crawling adalah proses dimana
para Googlebot menemukan halaman baru untuk dimasukkan kedalam index
Google.



Orang-orang Google itu mengaku
mereka menggunakan komputer super canggih untuk “merayapi”
miliaran halaman-halaman yang ada di jagad web. Program yang
“merayap” itu mereka sebut Googlebot (dikenal juga dengan
istilah robot, bot atau spider). Googlebot ini menggunakan suatu
algoritma tertentu. Program ini menentukan situs mana yang mau
didatangi, seberapa sering, dan berapa banyak halaman yang harus
dilihat untuk setiap website.



Proses crawling Google ini
dimulai dengan sebuah daftar URL web, yang dihasilkan dari proses
crawling yang sebelumnya. Daftar URL ini kemudian ditambahkan dengan
data sitemap yang diberikan oleh webmaster. Setiap kali sang
Googlebot ini datang ke sebuah website, maka dia akan mendata semua
link yang ada dihalaman yang dikunjunginya itu untuk kemudian dia
kunjungi lagi satu persatu. Website baru, perubahan pada sebuah
website dan link yang gak ada sambungannya itu dicatat oleh Google
dan dipakai untuk meng-update index Google.



Indexing



Googlebot memproses (apa memroses
sih? ~halah…) setiap halaman yang dikunjunginya untuk membuat
sebuah index besar-besaran yang berisi seluruh kata yang ada di
halaman tersebut dan juga lokasi dari setiap kata dihalaman tersebut.
Sebagai tambahan, Google memproses (apa memroses ya? ~halah, diulang
lagi :p) informasi yang dijadikan atribut alias penanda dari suatu
konten. Misalnya: Judul dan juga atribut ALT. Googlebot bisa
memproses (apa memroses ya? ~plis, jangan lagi..!!!) banyak, tapi
tidak semua, tipe konten. Sebaqai contoh, Google tidak bisa memproses
(apa memro……) halaman yang isinya flash semua.



Serving result



Saat pengunjung Google memasukkan
sebuah kata kunci ke kotak ajaib Google, mesin Google langsung
melihat ke index mereka untuk mencari halaman yang sesuai.
Halaman-halaman yang dianggap paling cocok oleh mbah Google ini
kemudian ditampilkan ke user. Relevansi dari konten yang disodorkan
itu ditentukan oleh lebih dari 200 faktor, salah satu yang peling
terkenal adalah PageRank dari halaman tersebut. Jadi Pagerank
bukanlah faktor utama loh… banyak orang yang salah kira dengan
menganggap PageRank adalah satu-satunya faktor sejauh mana web kita
dikenal oleh Google. Lalu apakah gerangan yang dimaksud dengan
Pagerank itu?



PageRank adalah sebuah algoritma
yang dibuat oleh salah satu pendiri Google, Larry Page. Makanya
namanya PageRank. PageRank adalah ukuran penting atau tidaknya suatu
halaman website yang ditentukan berdasarkan seberapa banyak link yang
diarahkan ke halaman tersebut dari halaman web lainnya. Bahasa
gampangnya, setiap link yang ngarah ke situs kita itu akan menambah
pagerank dari website kita. Dan tidak semua link dianggap sama oleh
Google. Google juga mencoba mengidentifikasi spam link atau
upaya-upaya lain yang bisa membuat Google mengeluarkan hasil
pencarian yang jelek. Tipe link yang paling bagus adalah link yang
dibuat karena memang konten yang berkualitas dari link tersebut.



Dengan 3 proses yang dijelaskan
secara singkat diatas akhirnya Google bisa memberikan hasil pencarian
yang sangat memuaskan untuk kita semua netter-netter dunia.


Bilangan
Fibonacci



Dalam matematika,
bilangan Fibonacci adalah
barisan
yang didefinisikan secara
rekursif
sebagai berikut:





Penjelasan: barisan ini berawal
dari 0 dan 1, kemudian angka berikutnya didapat dengan cara
menambahkan kedua bilangan yang berurutan sebelumnya. Dengan aturan
ini, maka barisan bilangan Fibonaccci yang pertama adalah:



0, 1, 1, 2, 3, 5, 8, 13, 21, 34,
55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946...



Barisan bilangan Fibonacci dapat
dinyatakan sebagai berikut: Fn = (x1^n - x2^n)/ sqrt(5) dengan



Fn adalah bilangan Fibonacci
ke-n,x1 dan x2 adalah penyelesaian persamaan x^2-x-1=0



Perbandingan antara Fn+1 dengan
Fn hampir selalu sama untuk sebarang nilai n dan mulai nilai n
tertentu, perbandingan ini nilainya tetap. Perbandingan itu disebut
Golden
Ratio

yang nilainya mendekati 1,618.




Pengaturan lantai dengan kotak
berukuran bilangan
Asal mula



Berdasarkan buku The
Art of Computer Programming

karya
Donald
E. Knuth
,
barisan ini pertama kali dijelaskan oleh matematikawan India,
Gopala
dan
Hemachandra
pada tahun 1150, ketika menyelidiki berbagai kemungkinan untuk
memasukkan barang-barang ke dalam kantong. Di dunia barat, barisan
ini pertama kali dipelajari oleh
Leonardo
da Pisa
,
yang juga dikenal sebagai Fibonacci (sekitar 1200), ketika membahas
pertumbuhan ideal dari populasi kelinci.



Tugas Mata Kuliah : Struktur
Data



Pertemuan Ke-3: Cara Metode
Array



Oleh : Muhamad Faisol (07 01
06 91)







MARGE SORT



Seperti yang telah dijelaskan
sebelumnya, Merge sort menggunakan pola divide and conquer. Dengan
hal ini deskripsi dari algoritma dirumuskan dalam 3 langkah berpola
divide-and-conquer. Berikut menjelaskan langkah kerja dari Merge
sort.



1. Divide



Memilah elemen – elemen
dari rangkaian data menjadi dua bagian.



2. Conquer



Conquer setiap bagian dengan
memanggil prosedur merge sort secara rekursif



3. Kombinasi



Mengkombinasikan dua bagian
tersebut secara rekursif untuk mendapatkan rangkaian data berurutan.
Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi
bilamana bagian yang akan diurutkan menyisakan tepat satu elemen.
Sisa pengurutan satu elemen tersebut menandakan bahwa bagian tersebut
telah terurut sesuai rangkaian.







Algoritmanya:







void mergeSort(Object array[],
int startIdx, int endIdx) {



if (array.length != 1) {



//Membagi rangkaian data,
rightArr dan leftArr



mergeSort(leftArr, startIdx,
midIdx);



mergeSort(rightArr, midIdx+1,
endIdx);



combine(leftArr, rightArr);



}



}


Sebuah
Contoh:



Rangkaian
data:




Membagi rangkaian menjadi dua
bagian:



LeftArr RightArr










Membagi LeftArr menjadi
dua bagian:



LeftArr
RightArr






Mengkombinasikan:






Membagi
RightArr menjadi dua bagian:



LeftArr RightArr



Mengkombinasikan:











Mengkombinasikan LeftArr dan
RightArr.













QUICK
SORT



Quicksort ditemukan oleh
C.A.R Hoare. Seperti pada merge sort, algoritma ini juga
berdasar pada pola divide-and-conquer. Berbeda dengan merge sort,
algoritma ini hanya mengikuti langkah – langkah sebagai berikut
:




  1. Divide




Memilah rangkaian data menjadi
dua sub-rangkaian A[p…q-1] dan A[q+1…r] dimana setiap
elemen A[p…q-1] adalah kurang dari atau sama dengan A[q] dan
setiap elemen pada A[q+1…r] adalah lebih besar atau sama
dengan elemen pada A[q]. A[q] disebut sebagai elemen pivot.
Perhitungan pada elemen q merupakan salah satu bagian dari prosedur
pemisahan.




  1. Conquer




Mengurutkan elemen pada
sub-rangkaian secara rekursif.



Pada algoritma quicksort,
langkah ”kombinasi” tidak di lakukan karena telah terjadi
pengurutan elemen – elemen pada sub-array.





Algoritmanya:



void quickSort(Object array[],
int leftIdx, int rightIdx) {



int pivotIdx;



/* Kondisi Terminasi */



if (rightIdx > leftIdx) {



pivotIdx = partition(array,
leftIdx, rightIdx);



quickSort(array, leftIdx,
pivotIdx-1);



quickSort(array, pivotIdx+1,
rightIdx);



}



}


Sebuah
Contoh:



Rangkaian
Data:







Pilih sebuah elemen yang akan
akan menjadi pivot







Inisialisasi elemen kiri sebagai
elemen keduadan elemen kanan sebagai elemen akhir











Geser elemen kiri kearah kanan
sampai ditemukan nilai yang lebih besar dari elemen pivot tersebut.
Geser elemen kanan kearah kiri sampai ditemukan nilai dari elemen
yang tidak lebih besar dari elemen tersebut.






Tukarkan
antara elemen kiri dengan kanan



Geser
kembali elemen kiri dan kanan




Terlihat
bahwa titik kanan dan kiri telah digeser sehingga mendapatkan nilai
elemen kanan < elemen kiri. Dalam hal ini tukarkan elemen pivot
dengan elemen kanan.



Kemudian
urutkan elemen sub-rangkaianpada setiap sis dari elemen pivot.


HEAP
SORT


Heap
adalah sebuah binary tree dengan ketentuan sebagai berikut :




  1. ��Tree
    harus complete binary tree




    1. - Semua level tree mempunyai
      simpul maksimum kecuali pada level terakhir.



    2. - Pada level terakhir, node
      tersusun dari kiri ke kanan tanpa ada yang dilewati.




  2. ��Perbandingan
    nilai suatu node dengan nilai node child-nya mempunyai ketentuan
    berdasarkan jenis heap, diantaranya :




    1. - Max Heap mempunyai ketentuan
      bahwa nilai suatu node lebih besar atau sama dengan ( >= ) dari
      nilai childnya.



    2. - Min Heap mempunyai ketentuan
      bahwa nilai suatu node lebih kecil atau sama dengan ( <= ) dari
      nilai childnya.







Contoh
:





Heap dan Operasinya Oleh Andri
Heryandi Contoh penggunaan heap adalah pada
persoalan yang mempertahankan antrian prioritas (priority queue).
Dalam antrian prioritas, elemen yang dihapus adalah elemen yang
mempunyai prioritas terbesar (atau terkecil, tergantung keperluan),
dan elemen inilah yang selalu terletak di akar (root). Suatu
heap dapat sewaktu-waktu berubah baik itu penambahan elemen (insert)
dan penghapusan elemen (delete).



Ada beberapa operasi yang dapat
terjadi di sebuah heap, yaitu :




  1. 1. Reorganisasi Heap (mengatur
    ulang heap).



  2. 2. Membantuk Heap (mengatur
    binary tree agar menjadi heap)



  3. 3. Penyisipan Heap (menyisipkan
    node baru)



  4. 4. Penghapusan Heap (menghapus
    node root)



  5. 5. Pengurutan Heap (Heap sort)




1. Reorganisasi Heap



Algoritma heap semuanya bekerja
dengan prinsip bahwa modifikasi nilai prioritas pada suatu simpul
dapat melanggar kondisi heap. Bila kondisi heap dilanggar, maka heap
harus diorganisasi kembali.



Sebagai contoh kita gunakan pada
heap maksimum. Ketika nilai/prioritas suatu node merubah, maka ada 2
kemungkinan yang terjadi yaitu :





    1. ��Nilai
      prioritas node bertambah sehingga nilai prioritasnya lebih besar
      dari parentnya, maka lakukan langkah berikut :



    2. a. Tukarkan nilai prioritas
      node tersebut dengan nilai prioritas parent-nya.



    3. b. Ulangi
      langkah a, sampai ditemukan posisi yang tepat (memenuhi kondisi
      heap)



    4. Proses
      ini disebut dengan proses sift-up.





Contoh node dengan prioritas 5
menjadi 10.












  1. Nilai prioritas node berkurang
    sehingga menjadi lebih kecil dari prioritas di antara node
    child-nya, maka yang harus dilakukan adalah :




    1. a. Tukarkan nilai prioritas
      simpul yang berubah dengan nilai prioritas dari child yang
      mempunyai prioritas terbesar.



    2. b. Ulangi langkah a, sampai
      ditemukan posisi yang tepat (memenuhi kondisi heap)





Proses ini
disebut dengan proses sift-down.



Contoh : Node dengan prioritas 9
menjadi 5.















2.
Pembentukan Heap



Pada mulanya jika suatu complete
binary tree memiliki prioritas antrian secara acak, maka langkah yang
harus dilakukan agar binary tree tersebut dapat disebut sebagai heap
adalah dengan melakukan proses sift_down dari node bernomor tengah
(banyaknode/2 atau N/2), menurun sampai node pertama.














Kondisi
Awal

















3.
Penyisipan Heap (Insert)



Penyisipan heap dilakukan ketika
ada sebuah elemen baru diinsertkan. Algoritma untuk penyisipan data
adalah :





    1. ��Simpan
      elemen baru tersebut setelah data paling akhir (tree dengan level
      paling bawah dan pada posisi sebelah kanan dari data terakhir atau
      jika level telah penuh, maka simpan data baru tersebut dalam level
      baru).



    2. ��Lakukan
      reorganisasi heap pada node baru tersebut. Proses yang biasanya
      dipakai adalah proses sift up.



    3. ��Banyak
      simpul ditambah 1




  1. Contoh : Penyisipan Heap dengan
    prioritas/nilai 8











4.
Penghapusan Heap (Delete)



Proses
penghapusan dilakukan ketika root suatu tree diambil. Algoritma
penghapusan heap adalah :





    1. ��Ambil
      Nilai Heap



    2. ��Ambil
      nilai prioritas pada node terakhir, dan dipakai sebagai prioritas
      root.



    3. ��Lakukan
      proses reorganisasi heap pada root. Umumnya proses yang dilakukan
      adalah proses sift down.



    4. ��Banyak
      simpul dikurang 1




  1. Contoh : Hapus elemen heap.
    Elemen yang diambil adalah 10 (root)













5.
Pengurutan Heap (Heap Sort)



Pengurutan heap dapat dilakukan
dengan algoritma seperti di bawah ini :





    1. a. Buat Heap Maksimum



    2. b. Jika N lebih besar dari 1
      maka tukarkan Nilai/Prioritas root dengan prioritas simpul terakhir
      (simpul ke-N) tetapi jika N sama dengan 1 maka ambil nilai yang ada
      di root.



    3. c. Kemudian nilai banyak simpul
      (N) dikurangi 1.



    4. d. Jika N
      > 1 maka lakukan reorganisasi heap yaitu proses sift down
      terhadap root.



    5. e. Lakukan langkah b sampai d
      sampai simpul habis (N=0).




  1. Contoh :




Data yang akan diurutkan adalah :
20 11 21 23 17 9 5





    1. ��Dari
      data di atas, dapat disusun tree seperti di bawah ini :










Tugas Mata Kuliah : Struktur
Data



Pertemuan Ke-4: Array Stack
and Queue



Oleh : Muhamad Faisol (07 01
06 91)


QUEUE





//---
qt.h ------------------------------------------------


//j.g.c.
2/1/97


//j.g.c.
22/2/97 istream >> added.


//queue
- template


//based
G. Row's Modula-2 QueueADT, and on my template list.


//------------------------------------------------------------


#ifndef
QTH


#define
QTH





#include
<stdio.h>


#include
<assert.h>


#include
<iostream.h>





template
<class T> class QueueCompt;


template
<class T> class Queue;





template
<class T> ostream&


operator<<(ostream&
os,const Queue<T>& q);


template
<class T> istream&


operator>>(istream&
is, Queue<T>& q);





template
<class T> class Queue{


friend
ostream& operator<<(ostream& os,const Queue<T>&
q);


friend
istream& operator>>(istream& is,Queue<T>&
q);


public:


Queue();


Queue(const
Queue<T>& other);


~Queue();


Queue&
operator = (const Queue<T>& source);


T
front() const;


int
length() const;


void
join(T e); //insert element at rear


void
remove(); //remove element from front


Queue<T>&
leave(); //as remove, value returning


void
removeAll(); //empty the list


bool
isEmpty() const;


private:


QueueCompt<T>*
p_;


};





template
<class T>class QueueCompt{


friend
class Queue<T>;


friend
ostream& operator<<(ostream& os,const Queue<T>&
q);


friend
istream& operator>>(istream& is,Queue<T>&
q);


private:


QueueCompt(T
e, QueueCompt<T>* pnext=0);


T
e_;


QueueCompt<T>*
pnext_;


};


//-------------------------------------------------------------


template
<class T>QueueCompt<T>::QueueCompt(T e, QueueCompt<T>*
pnext)


{


e_=e;


pnext_=pnext;


}





template
<class T>Queue<T>::Queue()


{


p_=0;


}





template
<class T>Queue<T>::Queue(const Queue<T>&
source)


{


if(source.isEmpty())p_=0;


else{


QueueCompt<T>
*pp=source.p_; //cursor to source


QueueCompt<T>
*pt=new QueueCompt<T>(pp->e_,0);


p_=pt;


while(pp->pnext_!=0){


pp=pp->pnext_;


pt->pnext_=new
QueueCompt<T>(pp->e_,0);


pt=pt->pnext_;


}


}


}





template
<class T> Queue<T>& Queue<T>::


operator
= (const Queue<T>& source)


{


if(this!=&source){
//beware of queueA=queueA;


removeAll();


if(source.isEmpty())p_=0;


else{


QueueCompt<T>
*pp=source.p_; //cursor to source


QueueCompt<T>
*pt=new QueueCompt<T>(pp->e_,0);


p_=pt;


while(pp->pnext_!=0){


pp=pp->pnext_;


pt->pnext_=new
QueueCompt<T>(pp->e_,0);


pt=pt->pnext_;


}


}


}


return
*this;


}




template
<class T>Queue<T>::~Queue()


{


removeAll();


}






template
<class T> void Queue<T>::join(T e)


{


if(isEmpty())


p_=new
QueueCompt<T>(e,0);


else{


QueueCompt<T>*
pp = p_;


while(pp->pnext_!=0)pp=pp->pnext_;


pp->pnext_=new
QueueCompt<T>(e,0);


}


}





template
<class T> T Queue<T>::front() const


{


return
p_->e_;


}





template
<class T> int Queue<T>::length() const


{


QueueCompt<T>
*pp=p_; //cursor to components


int
i=0;


while(pp!=0){


pp=pp->pnext_;


i++;


}


return
i;


}




template
<class T> void Queue<T>::remove()


{


QueueCompt<T>
* pt=p_;


p_=pt->pnext_;


delete
pt;


}





template
<class T> Queue<T>& Queue<T>::leave()


{


Queue<T>*
panother = new Queue(*this);


//Ex.
why would Queue<T> another(*this); ... *not* work?


panother->remove();


return
*panother;


}





template
<class T> void Queue<T>::removeAll()


//see
[Budd, 1994], p.202, and List::removeAll()


{


QueueCompt<T>
*pt,*pp;


pp=p_;


while(pp!=0){


pt=pp->pnext_;


pp->pnext_=0;


delete
pp;


pp=pt;


}


p_=0;


}





template
<class T>bool Queue<T>::isEmpty() const


{


return
(p_==0);


}





template
<class T>


ostream&
operator<<(ostream& os,const Queue<T>& source)


{


os<<"Queue:
<"<< source.length()<< "> f[ ";


QueueCompt<T>
*pp=source.p_; //cursor to source


while(pp!=0){


if(pp!=source.p_)cout<<",
";


os<<pp->e_;


pp=pp->pnext_;


}


os<<"
]r"<<endl<< endl;


}





template
<class T>


istream&
operator>>(istream& is, Queue<T>& dest)


{


T
e;


char
c;




while(1){


int
cnext=is.peek();


if(cnext=='\n'){


is.get(c);//to
flush the '\n'


break;


}


else
if(cnext==EOF)break;


else{


is>>
e;


dest.join(e);


}


}


return
is;


}


#endif





STACK





template
<class T> void Stack<T>::push(T e)


{


data_.insert(e);


}





template
<class T> T Stack<T>::top() const


{


return
data_.head();


}





template
<class T> void Stack<T>::pop()


{


data_.remove();


}





template
<class T> void Stack<T>::removeAll()


{


data_.removeAll();


}





template
<class T>bool Stack<T>::isEmpty() const


{


return
data_.isEmpty();


}





template
<class T>int Stack<T>::size() const


{


return
data_.length();


}





template
<class T>


ostream&
operator<<(ostream& os,const Stack<T>& source)


{


os<<
"Stack - top ";


os<<
source.data_;


}


#endif






Tugas Mata Kuliah : Struktur
Data



Pertemuan Ke-6: Singgle List
Non Circular



Oleh : Muhamad Faisol (07 01
06 91)







1. Menu Menambah,Membuat dan
Menghapus Data dalam Singgle List Non Circular



#include <iostream>







using namespace std;







class linklist



{



private:







struct node



{



int data;



node *link;



}*p;







public:







linklist();



void append( int num );



void add_as_first( int
num );



void addafter( int c,
int num );



void del( int num );



void display();



int count();



~linklist();



};







linklist::linklist()



{



p=NULL;



}







void linklist::append(int num)



{



node *q,*t;







if( p == NULL )



{



p = new node;



p->data = num;



p->link = NULL;



}



else



{



q = p;



while( q->link != NULL )



q = q->link;







t = new node;



t->data = num;



t->link = NULL;



q->link = t;



}



}







void linklist::add_as_first(int
num)



{



node *q;







q = new node;



q->data = num;



q->link = p;



p = q;



}







void linklist::addafter( int c,
int num)



{



node *q,*t;



int i;



for(i=0,q=p;i<c;i++)



{



q = q->link;



if( q == NULL )



{



cout<<"\nThere
are less than "<<c<<" elements.";



return;



}



}







t = new node;



t->data = num;



t->link = q->link;



q->link = t;



}







void linklist::del( int num )



{



node *q,*r;



q = p;



if( q->data == num )



{



p = q->link;



delete q;



return;



}







r = q;



while( q!=NULL )



{



if( q->data == num )



{



r->link = q->link;



delete q;



return;



}







r = q;



q = q->link;



}



cout<<"\nElement
"<<num<<" not Found.";



}







void linklist::display()



{



node *q;



cout<<endl;







for( q = p ; q != NULL ; q =
q->link )



cout<<endl<<q->data;







}







int linklist::count()



{



node *q;



int c=0;



for( q=p ; q != NULL ; q =
q->link )



c++;







return c;



}







linklist::~linklist()



{



node *q;



if( p == NULL )



return;







while( p != NULL )



{



q = p->link;



delete p;



p = q;



}



}







int main()



{



linklist ll;



cout<<"No. of
elements = "<<ll.count();



ll.append(12);



ll.append(13);



ll.append(23);



ll.append(43);



ll.append(44);



ll.append(50);







ll.add_as_first(2);



ll.add_as_first(1);







ll.addafter(3,333);



ll.addafter(6,666);







ll.display();



cout<<"\nNo. of
elements = "<<ll.count();







ll.del(333);



ll.del(12);



ll.del(98);



cout<<"\nNo. of
elements = "<<ll.count();



return 0;



}







2. Menghapus Data Tertentu



bool Delete(int
pos);



bool
ListofData::Delete(int position)



{



if
(Retrieve(position) == NULL)



return false;



else



{



Retrieve(position
-1)->Next = Retrieve (position +1);



size--;



return true;



}







3. Penyisipan Setelah/Sebelum
Data



int
ListofData::Add(DataEntry *NewItem)



{







DataEntry *New,
*CurrentNode, *lastNode = new DataEntry;



New = NewItem;



if(Head ==
NULL){



Head =
NewItem;



return
size++;



}else{



CurrentNode
= Head;



lastNode =
NULL;



while(1){



if(strcmp(CurrentNode->EntryName,NewItem->EntryName)
> 0){



if(lastNode
== NULL)



Head
= NewItem;



else



lastNode->Next
= NewItem;



NewItem->Next
= CurrentNode;



return
size++;



}else{



lastNode
= CurrentNode;



CurrentNode
= CurrentNode->Next;



if(CurrentNode
== NULL){



lastNode->Next
= NewItem;



return
size++;



}



}



}



}



}











Mencari Data







void linklist::display()



{



node *q;



cout<<endl;







for( q = p ; q != NULL ; q =
q->link )



cout<<endl<<q->data;







}



Tugas Mata Kuliah : Struktur
Data



Pertemuan Ke-5:



Oleh : Muhamad Faisol (07 01
06 91)







BILANGAN
FAKTORIAL



uses crt;



var



i,



Bil :integer;



Function
Factorial(Nilai:Integer):Real;



var



Fac:Real;



Begin



Fac:=1;



for i:=1 to Nilai do



Fac:=Fac*i;



Factorial:=Fac;



End;



begin



Clrscr;



Write('Masukkan Bilangan:
');



Readln(Bil);



Writeln(Bil,' ! =
',Factorial(Bil):0:0);



readln;



end.







MENCARI PANGKAT
BILANGAN


Program
MencariPangkat;
Var x : real; y : integer; z : real;

function
pangkatBulat(a : real, b : integer) : real;
var i : integer; temp
: real;
begin
temp := 1;
for i := 1 to b do

begin
temp := temp * a;
end;
pangkat :=
temp;
end;

function pangkatRiil(a : real, b : real)
: real;
begin
pangkatRiil := exp(b * ln(a));
end;

Begin

x := 5;
y := 3;
z := 3.5;
Write(’Nilai
‘,x,’ pangkat ‘,y,’ adalah ‘,

pangkatBulat(x,y):3:0);
Write(’Nilai ‘,x,’
pangkat ‘,z,’ adalah ‘,

pangkatRiil(x,z):3:4);
End.







BILANGAN PRIMA



Uses Crt;



var



bil,



i :integer;



prima:boolean;



lagi :char;



function
CheckPrima(Nilai:integer):boolean;



var



sisa,



Count:integer;



begin







Count:=0;



CheckPrima:=false;



for i:=2 to nilai do



begin



sisa:=nilai mod i;



if sisa=0 then



inc(Count);



end;



if Count=1 then
CheckPrima:=True;



end;



Procedure
ViewPrima(Bound:Integer);



var



x:Integer;



Begin



for x:=1 to Bound do



begin



if CheckPrima(x)=True
then



Write(x:3);



end;



writeln;



end;







begin



repeat



clrscr;



Write('Masukkan bilangan:
');



Readln(Bil);



prima:=CheckPrima(Bil);



Write(Bil,' ');



if prima=True then



Writeln('Bilangan Prima')



else



writeln('Bukan Bilangan
prima');



Writeln('Bilangan prima dari
1 sampai ',bil,': ');



ViewPrima(Bil);



write('Mau lagi? (Y/T) ');



lagi:=upcase(Readkey);



until lagi<>'Y';







end.







Tugas Mata Kuliah : Struktur
Data



Pertemuan Ke-7: Singgle List
Circular



Oleh : Muhamad Faisol (07 01
06 91)







1. Menu Menambah,Membuat dan
Menghapus Data dalam Singgle List Non Circular



#include <iostream>







using namespace std;







class linklist



{



private:







struct node



{



int data;



node *link;



}*p;







public:







linklist();



void append( int num );



void add_as_first( int
num );



void addafter( int c,
int num );



void del( int num );



void display();



int count();



~linklist();



};







linklist::linklist()



{



p=0;



}







void linklist::append(int num)



{



node *q,*t;







if( p == 0 )



{



p = new node;



p->data = num;



p->link = 0;



}



else



{



q = p;



while( q->link != 0 )



q = q->link;







t = new node;



t->data = num;



t->link = 0;



q->link = t;



}



}







void linklist::add_as_first(int
num)



{



node *q;







q = new node;



q->data = num;



q->link = p;



p = q;



}







void linklist::addafter( int c,
int num)



{



node *q,*t;



int i;



for(i=0,q=p;i<c;i++)



{



q = q->link;



if( q == 0 )



{



cout<<"\nThere
are less than "<<c<<" elements.";



return;



}



}







t = new node;



t->data = num;



t->link = q->link;



q->link = t;



}







void linklist::del( int num )



{



node *q,*r;



q = p;



if( q->data == num )



{



p = q->link;



delete q;



return;



}







r = q;



while( q!=0 )



{



if( q->data == num )



{



r->link = q->link;



delete q;



return;



}







r = q;



q = q->link;



}



cout<<"\nElement
"<<num<<" not Found.";



}







void linklist::display()



{



node *q;



cout<<endl;







for( q = p ; q != 0 ; q =
q->link )



cout<<endl<<q->data;







}







int linklist::count()



{



node *q;



int c=0;



for( q=p ; q != 0 ; q =
q->link )



c++;







return c;



}







linklist::~linklist()



{



node *q;



if( p == 0 )



return;







while( p != 0 )



{



q = p->link;



delete p;



p = q;



}



}







int main()



{



linklist ll;



cout<<"No. of
elements = "<<ll.count();



ll.append(12);



ll.append(13);



ll.append(23);



ll.append(43);



ll.append(44);



ll.append(50);







ll.add_as_first(2);



ll.add_as_first(1);







ll.addafter(3,333);



ll.addafter(6,666);







ll.display();



cout<<"\nNo. of
elements = "<<ll.count();







ll.del(333);



ll.del(12);



ll.del(98);



cout<<"\nNo. of
elements = "<<ll.count();



return 0;



}







2. Menghapus Data Tertentu



bool Delete(int
pos);



bool
ListofData::Delete(int position)



{



if
(Retrieve(position) == 0)



return false;



else



{



Retrieve(position
-1)->Next = Retrieve (position +1);



size--;



return true;



}







3. Penyisipan Setelah/Sebelum
Data



int
ListofData::Add(DataEntry *NewItem)



{







DataEntry *New,
*CurrentNode, *lastNode = new DataEntry;



New = NewItem;



if(Head
== 0){



Head =
NewItem;



return
size++;



}else{



CurrentNode
= Head;



lastNode
= 0;



while(1){



if(strcmp(CurrentNode->EntryName,NewItem->EntryName)
> 0){



if(lastNode
== 0)



Head
= NewItem;



else



lastNode->Next
= NewItem;



NewItem->Next
= CurrentNode;



return
size++;



}else{



lastNode
= CurrentNode;



CurrentNode
= CurrentNode->Next;



if(CurrentNode
== 0){



lastNode->Next
= NewItem;



return
size++;



}



}



}



}



}







Mencari Data







void linklist::display()



{



node *q;



cout<<endl;







for( q = p ; q != NULL ; q =
q->link )



cout<<endl<<q->data;







}







No comments:

Post a Comment

Silahkan tinggalkan komentar anda untuk postingan saya