Sabtu, 27 Juni 2009

gabungan linkedlist dan buble sort

<html>
<head>
<title>Struktur Data Linked List</title>
</head>
<body>
<script language = "JavaScript">
<!--

function LinkedList()
{
this._panjang = 0;
this._kepala = null;
}

LinkedList.prototype =
{
constructor: LinkedList,

//Membuat Metode untuk Menambah Data Kedalam List
Tambah: function (data)
{
//Membuat Node List
var node = {data: data, next: null}, NodeTanda;

//Periksa Isi List
if (this._kepala === null)
{
this._kepala = node;
}
else
{
NodeTanda = this._kepala;
while (NodeTanda.next)
{
NodeTanda = NodeTanda.next;
}
NodeTanda.next = node;
}
this._panjang++
},


//Membuat metode Untuk Menunjuk Item Data
Item: function (index)
{
if (index > -1 && index < this._panjang)
{
var NodeTanda = this._kepala,
i = 0;
while (i++ < index)
{
NodeTanda = NodeTanda.next;
}
return NodeTanda.data;
}
else
{
return null;
}
},


//Membuat metode Untuk Membuang Elemen List
Buang: function (index)
{
if (index > -1 && index < this._panjang)
{
var NodeTanda = this._kepala, previous, i = 0;
if (index === 0)
{
this._kepala = NodeTanda.next;
}
else
{
while (i++ < index)
{
previous = NodeTanda;
NodeTanda = NodeTanda.next;
}

previous.next =NodeTanda.next;
}
this._panjang--;
return NodeTanda.data;
}
else
{
return null;
}
},


//Membuat metode Untuk Mengetahui Jumlah Elemen List
Ukuran: function()
{
return this._panjang;
},


//Membuat metode Untuk Membentuk Array
toArray: function()
{
var result = [],
NodeTanda = this._kepala;

while (NodeTanda)
{
result.push (NodeTanda.data);
NodeTanda = NodeTanda.next;
}
return result;
},


//Membuat metode Untuk Konversi ke String
toString: function()
{
return this.toArray().toString();
}

}
var list = new LinkedList ();


list.Tambah("3");
list.Tambah("2");
list.Tambah("1");
list.Tambah("4");


document.write("Isi Linked List <br>");
document.write("--------------- <br>");
for (i=0; i<4; i++)
{
document.write(list.Item(i) + "<br>");
}
document.write("--------------- <br>");

document.write("Isi Linked List Awal = " +list.Ukuran() + "<br>");
document.write ("<br>")


document.write("Isi Linked List to Array =" +list.toArray());
document.write ("<br>")


document.write("Data String Linked List Awal =" +list.toString());



function Urutkan (form)
{
DataKosong = false;
DataInputan = form.Data.value;
inputData = DataInputan.split(",");
for (var i = 0; i < inputData.length; i++)
{
inputData[i] = parseInt (inputData[i], 10);
if (isNaN(inputData[i]))
{
DataKosong = true;
break;
}
}

inputData = bubbleSort(inputData, 0, inputData.length - 1);
if (DataKosong)
{
alert("Silakan Entri Dulu Data, Pisahkan dengan tanda Koma");
form.Data.focus();
}
else
form.Hasil.value = DataString(inputData, 0);
}

function DataString (toArray, Angka)
{
if ((toArray.length - 1) >= Angka)
return (toArray[Angka] + "," + DataString(toArray,(Angka +

1)));
else
return "";
}

function bubbleSort (toArray, Mulai, MulaiBaru)
{
for (var i = MulaiBaru - 1; i >= Mulai; i--)
{
for (var j = Mulai; j <= i; j++)
{
if (toArray[j+1] < toArray[j])
{
var DataTemporer = toArray[j];
toArray[j] = toArray[j+1];
toArray[j+1] = DataTemporer;
}
}
}

return toArray;
}




</script>



<body>
<center>
<form>
Masukan Deretan Angka, Pisahkan dengan Koma :
<hr>
<input type=text name=Data size=30 value= >
<br>
<br>
<input type=button value="Urutkan"

OnClick="Urutkan(this.form)">
<br>
<br>
<br>
Hasil Pengurutan :
<hr>
<input type=text name=Hasil size=30>
</form>
</center>

</body>
</html>
</html>

Rabu, 24 Juni 2009

struktur data short

<html>
<head>
<script LANGUAGE="JavaScript">

function Urutkan(form)
{
DataKosong = false;
DataInputan = form.Data.value;
inputData = DataInputan.split(",");
for (var i = 0; i < inputData.length; i++)
{
inputData[i] = parseInt(inputData[i], 10);
if (isNaN(inputData[i]))
{
DataKosong = true;
break;
}
}

inputData = bubbleSort(inputData, 0, inputData.length - 1);
if (DataKosong)
{
alert("Silakan Entri Dulu Data, Pisahkan dengan tanda Koma");
form.Data.focus();
}
else
form.Hasil.value = DataString(inputData, 0);
}

function DataString(ArrayData, Angka)
{
if ((ArrayData.length - 1) >= Angka)
return (ArrayData[Angka] + "," + DataString(ArrayData,(Angka + 1)));
else return "";
}

function bubbleSort(ArrayData, Mulai, MulaiBaru)
{
for (var i = MulaiBaru - 1; i >= Mulai; i--)
{
for (var j = Mulai; j <= i; j++)
{
if (ArrayData[j+1] < ArrayData[j])
{
var DataTemporer = ArrayData[j];
ArrayData[j] = ArrayData[j+1];
ArrayData[j+1] = DataTemporer;
}
}
}

return ArrayData;
}

</script>
</head>

<body>
<center>
<form>

Masukan Deretan Angka, Pisahkan dengan Koma :
<hr>
<br> <input type=text name=Data size=30 value="3,4,5,6,8,5,12,4,8,4,20">
<br>
<br>
<input type=button value="Urutkan" onClick="Urutkan(this.form)">
<br>
<br>
<br>
Hasil Pengurutan :
<hr>
<input type=text name=Hasil size=30>

</form>
</center>

</body>
</html>

struktur data graph

<html>
<head><title>Dijkstra Algorithms </title>

</head>
<body>
<script language = "javascript">

var NilaiAcuan = 10000;
var TakTerdefinisi = -1;
var NamaVerteks = new Array('A','B','C','D','E','F');
var Matriks = new Array(6);

function Bobot(a,b)
{
return Matriks[a][b];
}

function Dijkstra(JumlahVerteks,Awal,d)
{
var Posisi = new Array(JumlahVerteks);
var i;
var Kunjungan = new Array(JumlahVerteks);
var pred = new Array(JumlahVerteks);

for(i=0; i<JumlahVerteks; i++)
{
Posisi[i] = NilaiAcuan;
pred[i] = TakTerdefinisi;
Kunjungan[i] = false;
}
Posisi[Awal] = 0;

var Verteks;
for (Verteks = 0; Verteks < JumlahVerteks; Verteks++)
{
var JarakTerpendek = NilaiAcuan, closest = -1;
for (i=0; i < JumlahVerteks; i++)
{
if (!Kunjungan[i])
{
if (Posisi[i] <= JarakTerpendek)
{
JarakTerpendek = Posisi[i]; closest = i;
}
}
}

Kunjungan[closest] = true

for (i=0; i < JumlahVerteks; i++)
{
if (!Kunjungan[i])
{
var w = Bobot(closest, i);
if (Posisi[closest]+w < Posisi[i])
{
Posisi[i] = Posisi[closest] + w;
pred[i] = closest;
}
}
}
}


i=d
if (Posisi[i] < NilaiAcuan)
{
var Lintasan = NamaVerteks[i];
var Verteks = i;
while (Verteks>0)
{
Verteks = pred[Verteks];
if (Verteks>=0) Lintasan = NamaVerteks[Verteks] + '->' + Lintasan;
}
alert("Jarak :" + Posisi[i]+' ('+Lintasan+')'+'<br>');
} else
{
alert("Tidak ada Jalur");
}
}


var x = '~';
;
document.write(Matriks[0]=new Array(0,2,3,x,x,x));
document.write('<br>');
document.write(Matriks[1]=new Array(2,0,3,6,x,x));
document.write('<br>');
document.write(Matriks[2]=new Array(3,3,0,3,5,x));
document.write('<br>');
document.write(Matriks[3]=new Array(x,6,3,0,1,3));
document.write('<br>');
document.write(Matriks[4]=new Array(x,x,5,1,0,1));
document.write('<br>');
document.write(Matriks[5]=new Array(x,x,x,3,1,0));
document.write('<br>');


document.write('<pre>A-2-B-6--D--3-F <br>');
document.write('\\ | /| / <br>');
document.write(' 3 3 3 1 1 <br>');
document.write(' \\ | / | / <br>');
document.write(' \\|/ |/ <br>');
document.write(' C--5-E <br> ');




var Dari=0; // A
var Ke =5; // F
Dijkstra(Matriks.length,Dari,Ke);
//-->

</script>

</body>
</htmL>

Jumat, 19 Juni 2009

memanngil list ukuran ,toArray,dan toString

Memanggil List Ukuran, toArray, toString
?html>
?head>
?title>Struktur Data Linked List?/title>
?/head>
?body>
?script language = "JavaScript">
?!--
function DoublyLinkedList()
{
this._Kepala = null;
this._Ekor = null;
this._Panjang = 0;
}

DoublyLinkedList.prototype =
{
constructor: DoublyLinkedList,
Tambah: function (data)
{
var node = {data: data, next: null, prev: null};

if (this._Panjang == 0)
{
this._Kepala = node;
this._Ekor = node;
}
else
{
this._Ekor.next = node;
node.prev = this._Ekor;
this._Ekor = node;
}
this._Panjang++;

},

ItemList: function(index)
{
if (index > -1 && index ? this._Panjang)
{
var NodeTanda = this._Kepala,
i = 0;

while(i++ ? index)
{
NodeTanda = NodeTanda.next;
}

return NodeTanda.data;
}
else
{
return null;
}
},

Buang: function(index){

if (index > -1 && index ? this._Panjang)
{
var NodeTanda = this._Kepala, i = 0;

if (index === 0)
{
this._Kepala = NodeTanda.next;
if (!this._Kepala)
{
this._Ekor = null;
}
else
{
this._Kepala.prev = null;
}

}
else
if (index === this._Panjang -1)
{
NodeTanda = this._Ekor;
this._Ekor = NodeTanda.prev;
this._Ekor.next = null;
}
else
{
while(i++ ? index)
{
NodeTanda = NodeTanda.next;
}
NodeTanda.prev.next = NodeTanda.next;
}
this._Panjang--;
return NodeTanda.data;

}
else
{
return null;
}


},

Ukuran: function(){
return this._Panjang;
},

toArray: function(){
var result = [],
NodeTanda = this._Kepala;

while(NodeTanda){
result.push(NodeTanda.data);
NodeTanda = NodeTanda.next;
}

return result;
},

toString: function(){
return this.toArray().toString();
}
}

var List = new DoublyLinkedList();


List.Tambah("Teknik Informatika");
List.Tambah("Teknik Komputer");
List.Tambah("Komputerisasi Akuntansi");
List.Tambah("Computer Networking");


document.write("Isi LinkedList ?br>");
document.write("--------------- ?br>");
for (i=0; i?4; i++)
{
document.write(List.ItemList(i) + "?br>") ;
}
document.write("--------------- ?br>");


document.write("Isi LinkedList Awal = " + List.Ukuran() +"?br>");
document.write("Isi Array Awal = " + List.toArray() +"?br>");
document.write("Isi String Awal = " + List.toString() +"?br>?br>");

alert("ItemList 1 pada Linked List diBuang, yaitu = " + List.ItemList(1));
List.Buang(1);


document.write("Isi Linked LIst Setelah Dibuang ?br>");
document.write("--------------- ?br>");
for (i=0; i?4; i++)
{
document.write(List.ItemList(i) + "?br>") ;
}
document.write("--------------- ?br>");

document.write("?br>Isi LinkedList Terakhir = " + List.Ukuran() +"?br>");
document.write("Isi Array Akhir = " + List.toArray() +"?br>");
document.write("Isi String Awal = " + List.toString() +"?br>");
//-->
?/script>
?/body>
?/html>

Rabu, 10 Juni 2009

tambah ukuran struktur data

<html>
<head>
<title>Struktur Data Linked List</title>
</head>
<body>
<script language = "JavaScript">
<!--
function DoublyLinkedList()
{
this._Kepala = null;
this._Ekor = null;
this._Panjang = 0;
}

DoublyLinkedList.prototype =
{
constructor: DoublyLinkedList,
Tambah: function (data)
{
var node = {data: data, next: null, prev: null};

if (this._Panjang == 0)
{
this._Kepala = node;
this._Ekor = node;
}
else
{
this._Ekor.next = node;
node.prev = this._Ekor;
this._Ekor = node;
}
this._Panjang++;

},

ItemList: function(index)
{
if (index > -1 && index < this._Panjang)
{
var NodeTanda = this._Kepala,
i = 0;

while(i++ < index)
{
NodeTanda = NodeTanda.next;
}

return NodeTanda.data;
}
else
{
return null;
}
},

Buang: function(index){

if (index > -1 && index < this._Panjang)
{
var NodeTanda = this._Kepala, i = 0;

if (index === 0)
{
this._Kepala = NodeTanda.next;
if (!this._Kepala)
{
this._Ekor = null;
}
else
{
this._Kepala.prev = null;
}

}
else
if (index === this._Panjang -1)
{
NodeTanda = this._Ekor;
this._Ekor = NodeTanda.prev;
this._Ekor.next = null;
}
else
{
while(i++ < index)
{
NodeTanda = NodeTanda.next;
}
NodeTanda.prev.next = NodeTanda.next;
}
this._Panjang--;
return NodeTanda.data;

}
else
{
return null;
}


},

Ukuran: function(){
return this._Panjang;
},

toArray: function(){
var result = [],
NodeTanda = this._Kepala;

while(NodeTanda){
result.push(NodeTanda.data);
NodeTanda = NodeTanda.next;
}

return result;
},

toString: function(){
return this.toArray().toString();
}
}

var List = new DoublyLinkedList();


List.Tambah("Teknik Informatika");
List.Tambah("Teknik Komputer");
List.Tambah("Komputerisasi Akuntansi");
List.Tambah("Computer Networking");


document.write("Isi LinkedList <br>");
document.write("--------------- <br>");
for (i=0; i<4; i++)
{
document.write(List.ItemList(i) + "<br>") ;
}
document.write("--------------- <br>");


document.write("Isi LinkedList Awal =" + List.Ukuran() +"<br><br>");


alert("ItemList 1 pada Linked List diBuang, yaitu = " + List.ItemList(1));
List.Buang(1);



document.write("Isi Linked LIst Setelah Dibuang <br>");
document.write("--------------- <br>");
for (i=0; i<4; i++)
{
document.write(List.ItemList(i) + "<br>") ;
}
document.write("--------------- <br>");

document.write("<br>Isi LinkedList Terakhir =" + List.Ukuran() +"<br>");
//-->
</script>
</body>
</html>

Minggu, 07 Juni 2009

tugas instalasi komputer(klasifikasi software)

Klasifikasi Perangkat Lunak (Software)
Klasifikasi Software

category software

Diagram buatan Chao-Kuei ini menerangkan berbagai perbedaan kategori perangkat lunak. Tersedia sebagai berkas XFig, sebagai gambar JPEG (23k), dan sebagai gambar PNG (7k) dengan pembesaran 1,5 kali.

Perangkat Lunak Bebas
Perangkat lunak bebas ialah perangkat lunak yang mengizinkan siapa pun untuk menggunakan, menyalin, dan mendistribusikan, baik dimodifikasi atau pun tidak, secara gratis atau pun dengan biaya. Perlu ditekankan, bahwa source code dari program harus tersedia. “Jika tidak ada kode program, berarti bukan perangkat lunak.” Yang tersebut di atas merupakan definisi sederhananya; lihat juga definisi lengkapnya.Kami juga memiliki daftar terjemahan istilah “perangkat lunak bebas” dalam berbagai bahasa lain.

Jika suatu program bebas, maka dapat disertakan pada sebuah sistem operasi bebas seperti GNU, atau versi bebas dari sistem GNU/Linux.

Terdapat berbagai cara untuk membuat suatu program bebas—banyak pertanyaan rinci, yang dapat ditentukan dalam banyak cara dan masih menjadikan program tersebut bebas. Beberapa kemungkinan variasi akan dijelaskan di bawah ini.

Perangkat lunak bebas menyangkut masalah kebebasan, bukan harga. Tapi beberapa perusahaan perangkat lunak berpemilik terkadang menggunakan istilah perangkat lunak bebas untuk menunjukkan harga. Terkadang maksud mereka ialah anda dapat memperoleh salinan biner tanpa biaya; terkadang maksud mereka ialah suatu salinan disertakan dalam komputer yang anda beli. Ini tidak ada hubungannya sama sekali dengan apa yang kami maksud dengan perangkat lunak bebas pada proyek GNU.

Karena hal ini dapat membingungkan, ketika sebuah perusahaan perangkat lunak menyatakan bahwa produknya adalah perangkat lunak bebas, selalu periksa ketentuan distribusinya untuk melihat apakah pengguna memiliki kebebasan yang dimaksudkan oleh istilah perangkat lunak bebas. Terkadang memang benar-benar perangkat lunak bebas; namun terkadang tidak.

Banyak bahasa memiliki dua kata yang berbeda untuk menyatakan “bebas” sebagai kebebasan dan “bebas” sebagai tanpa biaya. Sebagai contoh, bahasa Perancis memiliki kata “libre” dan “gratuit”. Dalam bahasa Inggris terdapat kata “gratis” yang menyatakan tentang harga tanpa membingungkan. Tapi tidak ada kata sifat yang menyatakan kebebasan tanpa membingungkan. Hal ini sangat disayangkan, karena kata semacam itu akan sangat berguna disini.

Perangkat lunak bebas seringkali lebih handal daripada perangkat lunak tidak bebas.
Perangkat Lunak Open Source
Istilah perangkat lunak “open source” digunakan oleh beberapa pihak yang artinya kurang lebih sama dengan perangkat lunak bebas. Kami memilih untuk menggunakan istilah “perangkat lunak bebas”; ikuti link untuk melihat alasannya.
Perangkat Lunak Public domain
Perangkat lunak public domain ialah perangkat lunak yang tanpa hak cipta. Ini merupakan kasus khusus dari perangkat lunak bebas non-copylefted, yang berarti bahwa beberapa salinan atau versi yang telah dimodifikasi bisa jadi tidak bebas sama sekali.Terkadang ada yang menggunakan istilah “public domain” secara bebas yang berarti “cuma-cuma” atau “tersedia gratis”. Namun “public domain” merupakan istilah hukum yang artinya “tidak memiliki hak cipta”. Untuk jelasnya, kami menganjurkan untuk menggunakan istilah “public domain” dalam arti tersebut, serta menggunakan istilah lain untuk mengartikan pengertian yang lain.
Perangkat Lunak Copylefted
Perangkat lunak copylefted merupakan perangkat lunak bebas yang ketentuan pendistribusinya tidak memperbolehkan untuk menambah batasan-batasan tambahan–jika mendistribusikan atau memodifikasi perangkat lunak tersebut. Artinya, setiap salinan dari perangkat lunak, walaupun telah dimodifikasi, haruslah merupakan perangkat lunak bebas.Dalam proyek GNU, kami meng-copyleft-kan hampir semua perangkat lunak yang kami buat, karena tujuan kami adalah untuk memberikan kebebasan kepada semua pengguna seperti yang tersirat dalam istilah “perangkat lunak bebas”. Lihat Copylefted untuk penjelasan lebih jauh mengenai bagaimana cara kerjanya copyleft dan bagaimana kita menggunakannya.

Copyleft merupakan konsep yang umum. Jadi, untuk meng-copyleft-kan sebuah program, anda harus menggunakan ketentuan distribusi tertentu. Terdapat berbagai cara untuk menulis perjanjian distribusi program copyleft.
Perangkat Lunak Bebas Non-copylefted
Perangkat lunak bebas non-copylefted dibuat oleh pembuatnya yang mengizinkan kita untuk mendistribusikan dan memodifikasi, dan untuk menambahkan batasan-batasan tambahan dalamnya.Jika suatu program bebas tapi tidak copylefted, maka beberapa salinan atau versi yang dimodifikasi bisa jadi tidak bebas sama sekali. Perusahaan perangkat lunak dapat mengkompilasi programnya, dengan atau tanpa modifikasi, dan mendistribusikan file tereksekusi sebagai produk perangkat lunak yang berpemilik.

Sistem X Window menggambarkan hal ini. Konsorsium X mengeluarkan X11 dengan ketentuan distribusi yang menetapkannya sebagai perangkat lunak bebas non-copylefted. Jika anda menginginkannya, anda dapat memperoleh salinan yang memiliki perjanjian distribusi dan juga bebas. Namun ada juga versi tidak bebasnya, dan ada workstation terkemuka serta perangkat grafik PC, dimana versi yang tidak bebas merupakan satu-satunya yang dapat bekerja disini. Jika anda menggunakan perangkat keras tersebut, X11 bukanlah perangkat lunak bebas bagi anda.
Perangkat Lunak GPL-covered
GNU GPL (General Public License) (20k huruf) merupakan sebuah kumpulan ketentuan pendistribusian tertentu untuk meng-copyleft-kan sebuah program. Proyek GNU menggunakannya sebagai perjanjian distribusi untuk sebagian besar perangkat lunak GNU.
Sistem GNU
Sistem GNU merupakan sistem serupa Unix yang seutuhnya bebas.Sistem operasi serupa Unix terdiri dari berbagai program. Sistem GNU mencakup seluruh perangkat lunak GNU, dan juga paket program lain, seperti sistem X Windows dam TeX yang bukan perangkat lunak GNU.

Kami telah mengembangkan dan mengumpulkan komponen untuk sistem GNU ini sejak tahun 1984. Pengedaran awal (percobaan) dari “sistem GNU lengkap” dilakukan tahun 1996. Sekarang (2001), sistem GNU ini bekerja secara handal, serta orang-orang bekerja dan mengembangkan GNOME, dan PPP dalam sistem GNU. Pada saat bersamaan sistem GNU/Linux, merupakan sebuah terobosan dari sistem GNU yang menggunakan Linux sebagai kernel dan mengalami sukses luar biasa.

Berhubung tujuan dari GNU ialah untuk kebebasan, maka setiap komponen dalam sistem GNU harus merupakan perangkat lunak bebas. Namun tidak berarti semuanya harus copylefted; setiap jenis perangkat lunak bebas dapat sah-sah saja jika menolong memenuhi tujuan teknis. Kita dapat menggunakan perangkat lunak non-copylefted seperti sistem X Window.
Program GNU
“Program GNU” setara dengan perangkat lunak GNU. Program Anu adalah program GNU jika ia merupakan perangkat lunak GNU.
Perangkat Lunak GNU
Perangkat lunak GNU merupakan perangkat lunak yang dikeluarkan oleh proyek GNU. Sebagian besar perangkat lunak GNU merupakan copylefted, tapi tidak semuanya; namun, semua perangkat lunak GNU harus merupakan perangkat lunak bebas.Jika suatu program adalah perangkat lunak GNU, kita juga menyebutnya sebagai program GNU.

Beberapa perangkat lunak GNU ditulis oleh staf dari Free Software Foundation (FSF, Yayasan Perangkat Lunak Bebas), namun sebagian besar perangkat lunak GNU merupakan kontribusi dari para sukarelawan. Beberapa perangkat lunak yang dikontribusikan merupakan hak cipta dari Free Software Foundation; beberapa merupakan hak cipta dari kontributor yang menulisnya.
Perangkat Lunak Semi-Bebas
Perangkat lunak semi-bebas adalah perangkat lunak yang tidak bebas, tapi mengizinkan setiap orang untuk menggunakan, menyalin, mendistribusikan, dan memodifikasinya (termasuk distribusi dari versi yang telah dimodifikasi) untuk tujuan non-laba. PGP adalah salah satu contoh dari program semi-bebas.Perangkat lunak semi-bebas jauh lebih baik dari perangkat lunak berpemilik, namun masih ada masalah, dan kita tidak dapat menggunakannya pada sistem operasi yang bebas.

Pembatasan dari copyleft dirancang untuk melindungi kebebasan bagi semua pengguna. Bagi kami, satu-satunya alasan untuk membatasi substantif dalam menggunakan program–ialah melarang orang lain untuk menambahkan batasan lain. Program semi-bebas memiliki batasan-batasan tambahan, yang dimotivasi oleh tujuan pribadi semata.

Sangat mustahil untuk menyertakan perangkat lunak semi-bebas pada sistem operasi bebas. Hal ini karena perjanjian distribusi untuk sistem operasi keseluruhan adalah gabungan dari perjanjian distribusi untuk semua program di dalamnya. Menambahkan satu program semi-bebas pada sistem akan membuat keseluruhan sistem menjadi semi-bebas. Terdapat dua alasan mengapa kami tidak menginginkan hal ini:

* Kami percaya bahwa perangkat lunak bebas seharusnya ditujukan bagi semuanya–termasuk pelaku bisnis, dan bukan hanya untuk sekolah dan sekedar hobi saja. Kami ingin mengundang kalangan bisnis untuk menggunakan keseluruhan sistem GNU, dan untuk itu kami tidak dapat menyertakan program semi-bebas di dalamnya.
* Distribusi komersial dari sistem operasi bebas, termasuk Sistem GNU/Linux sangat penting, dan para pengguna menghargai kemampuan untuk dapat membeli distribusi CD-ROM komersial. Menyertakan satu program semi-bebas dalam sistem operasi dapat memotong distribusi CD-ROM komersial untuknya.

Free Software Foundation sendiri adalah organisasi nirlaba, dan karena itu, kami diizinkan secara hukum untuk menggunakan program semi-bebas secara “internal”. Tapi kami tidak melakukannya, karena hal itu akan melemahkan upaya kami untuk memperoleh program yang dapat disertakan ke dalam GNU.

Jika ada pekerjaan yang berhubungan dengan perangkat lunak, maka sebelum kami memiliki program bebas untuk melakukan pekerjaan itu, sistem GNU memiliki kesenjangan. Kami harus memberitahukan kepada para sukarelawan, “Kami belum memiliki program untuk melakukan pekerjaan ini di GNU, jadi kami berharap Anda menulisnya sendiri.” Jika kami menggunakan program semi-bebas untuk untuk melakukan pekerjaan itu, hal itu akan melemahkan apa yang telah kami katakan; hal itu akan menghancurkan motivasi (bagi kami, dan orang lain yang memiliki pandangan yang sama) untuk menulis substitusi yang bebas. Jadi kami tidak melakukannya.
Perangkat Lunak Berpemilik
Perangkat lunak berpemilik ialah perangkat lunak yang tidak bebas ataupun semi-bebas. Kita dapat dilarang, atau harus meminta izin, atau akan dikenakan pembatasan lainnya sehingga menyulitkan–jika menggunakan, mengedarkan, atau memodifikasinya.Free Software Foundation mengikuti aturan bahwa kita tidak dapat memasang program-program berpemilik di komputer kita kecuali untuk sementara waktu dengan maksud menulis pengganti bebas untuk program tersebut. Disamping itu, kami merasa tidak; ada alasan untuk memasang sebuah program berpemilik.

Sebagai contoh, kami merasa sah dalam memasang Unix di komputer kami pada tahun 1980-an, sebab kami menggunakannya untuk menulis pengganti bebas untuk Unix. Sekarang, karena sistem operasi bebas telah tersedia, alasan ini tidak lagi dapat diterima; kami harus menghapus semua sistem operasi tidak bebas kami, dan setiap komputer yang kami pasang harus berjalan pada sistem operasi yang benar-benar bebas.

Kami tidak memaksa para pengguna GNU atau para kontributor GNU untuk mengikuti aturan ini. Ini adalah aturan yang kami buat untuk diri kami sendiri. Tapi kami berharap agar anda memutuskan untuk mengikutinya juga.
Freeware
Istilah “freeware” tidak terdefinisi dengan jelas, tapi biasanya digunakan untuk paket-paket yang mengizinkan redistribusi tetapi bukan pemodifikasian (dan kode programnya tidak tersedia). Paket-paket ini bukan perangkat lunak bebas, jadi jangan menggunakan istilah “freeware” untuk merujuk ke perangkat lunak bebas.
Shareware
Shareware ialah perangkat lunak yang mengijinkan orang-orang untuk meredistribusikan salinannya, tetapi mereka yang terus menggunakannya diminta untuk membayar biaya lisensi.Shareware bukan perangkat lunak bebas ataupun semi-bebas. Ada dua alasan untuk hal ini, yakni:

* Sebagian besar shareware, kode programnya tidak tersedia; jadi anda tidak dapat memodifikasi program tersebut sama sekali.
* Shareware tidak mengizinkan kita untuk membuat salinan dan memasangnya tanpa membayar biaya lisensi, tidak juga untuk orang-orang yang terlibat dalam kegiatan nirlaba (Dalam prakteknya, orang-orang sering tidak mempedulikan perjanjian distribusi dan tetap melakukan hal tersebut, tapi sebenarnya perjanjian tidak mengizinkannya).

Perangkat Lunak Komersial
Perangkat lunak komersial adalah perangkat lunak yang dikembangkan oleh kalangan bisnis untuk memperoleh keuntungan dari penggunaannya. “Komersial” dan “kepemilikan” adalah dua hal yang berbeda! Kebanyakan perangkat lunak komersial adalah berpemilik, tapi ada perangkat lunak bebas komersial, dan ada perangkat lunak tidak bebas dan tidak komersial.Sebagai contoh, GNU Ada selalu didistribusikan di bawah perjanjian GNU GPL, dan setiap salinannya adalah perangkat lunak bebas; tapi para pengembangnya menjual kontrak penunjang. Ketika penjualnya bicara kepada calon pembeli, terkadang pembeli tersebut mengatakan, “Kami merasa lebih aman dengan kompilator komersial.” Si penjual menjawab, “GNU Ada ialah kompilator komersial; hanya saja ia merupakan perangkat lunak bebas.”

Bagi proyek GNU, penekanannya ada pada hal yang sebaliknya: hal terpenting ialah GNU Ada merupakan perangkat lunak bebas; terlepas komersial atau bukan, itu bukan hal yang penting. Namun perkembangan tambahan GNU Ada yang dihasilkan dari komersialismenya adalah menguntungkan.

Harap sebarkan ke khalayak, perangkat lunak bebas komersial merupakan sesuatu yang mungkin. Sebaiknya, anda jangan mengatakan “komersial” ketika maksud anda ialah “berpemilik”.

Software merupakan produk dari perusahaan pembuat software yang banyak bermunculan sehubungan dengan kebutuhan berbagai masalah pekerjaan yang membutuhkan waktu singkat oleh pemakai komputer saat ini.
Software secara umum dapat dibagi menjadi 2 yaitu:
• Software Sistem
Suatu program yang digunakan untuk melakukan tugas-tugas yang spesifik.
• Software Aplikasi
Suatu program yang digunakan untuk mengontrol sumber daya komputer seperti CPU, piranti input dan output. Kedudukan program ini adalah sebagai perantara antara program aplikasi dan hardware.
Ada 4 kelompok besar software system:
• Operating System (Sistem Operasi)
Operating system merupakan program yang berfungsi untuk mengatur sistem kerja seluruh komputer seperti layaknya penerjemah antara hardware dan software yang akan dilakukannya.
Contoh :
- PC-DOS atau MS-DOS untuk Personal Computer (PC)
- Novell Netware dan UNIX untuk jaringan komputer
- Windows dan berbagai variannya untuk PC atau jaringan
- Linux dengan berbagai distronya untuk PC atau jaringan
• Tiga Fungsi Utama system operasi :
– Manajemen Proses
Mencakup persiapan, penjadwalan & pemantauan proses pada komputer.
– Manajemen Sumber Daya
Berkaitan dengan pengendalian thd pemakaian sumber daya dalam sistem komputer yang dilakukan oleh software sistem ataupun software aplikasi yang sedang dijalankan
– Manajemen Data
Berupa pengendalian thd data Input /Output termasuk dalam hal peng-alokasian piranti penyimpanan sekunder maupun memori utama.
Selain itu, Sistem Operasi mempunyai
sarana untuk mengelola keamanan
dengan mengharuskan user memasukkan
nama pemakai dan password sebelum
dapat menggunakan komputer
• Utility Software (Program Bantu)
Software ini merupakan software jadi yang digunakan untuk membantu mempermudah dalam menangani pekerjaan awal dalam pengoperasian komputer beserta perangkatnya. Misalnya untuk
- memeriksa (scanning),
- menganalisa (analyzing),
- memperbaiki (repairing),
- mencari (searching),
- menggandakan (copying) file
- dan sebagainya.
Contoh :
- Norton Utility (NU)
- PC Tools
- Xtree
- QuickDos
• Package Software (Program Paket)
a. Word Processing (Pengolah Kata)
Pengolah kata biasanya dipakai untuk pembuatan naskah.
Contoh :
- Word Star
- Word Perfect
- Microsoft Word
- Chi Writer
- PFS Write
b. Spread Sheet (Pengolah Angka)
Software ini dipakai lebih banyak untuk pembuatan tabel-tabel dan angka.
Contoh :
- Lotus 123
- Super Calc
- Symphony
- Quattro
- Microsoft Excel
c. Database (Pengolah Data Awal)
Software ini pada dasarnya digunakan untuk mengatur informasi-informasi sehingga dapat memudahkan pencarian atau penyimpanan.
Contoh :
- dBase III
- dBXL
- Foxbase
- Paradox
- RBase
d. Publisher (Pengolah Tata Letak)
Software ini banyak dipakai oleh perusahaan cetak mencetak, surat kabar atau penerbitan yang banyak memerlukan pengaturan bentuk, jenis dan tata letak karakter tertentu.
Contoh :
- Ventura Desktop Publishing
- Microsoft Publisher
- PageMaker
- Flash
- Corel
e. Aided Design (Pengolah Rancang Bangun)
Software ini pada dasarnya dipakai untuk pembuatan rancang bangun (design) sebuah benda, ruangan, bangunan gedung, peta kota dan sebagainya.
Contoh :
- AutoCAD
- ProDesign
- DR Hallo
f. Statistic (Pengolah Statistik)
Software ini dipakai untuk memecahkan permasalahan statistik baik di bidang ekonomi, teknik, kesehatan, sosial dan budaya.
Contoh :
- SPSS
- MicroStat
- MiniTab
g. Language Program (Bahasa Pemrograman)
Software ini banyak dipakai oleh seorang programmer, program ini berfungsi untuk menciptakan software-software baru yang digunakan untuk membantu/mempermudah kerja seorang operator komputer.
Contoh :
- Turbo Assembler (bahasa pemrograman tingkat rendah)
- Basic, Pascal, Fortran, Cobol, Visual Basic (bahasa pemrograman tingkat menengah)
- Clipper, FoxPro, Delphi, C+ (bahasa pemrograman tingkat tinggi)
Pada perkembangan selanjutnya software ini juga dipakai untuk merusak data, informasi atau software-software (bahkan juga hardware) yang lain. Hasil dari pembuatan program yang berfungsi untuk merusak ini dikenal dengan Virus. Kata “virus” sebenarnya adalah kata yang sengaja diambil dari dunia kedokteran untuk dipakai di dunia komputer, karena mempunyai sifat yang sama yaitu “merusak” (membuat penyakit).
Virus komputer sebenarnya adalah program juga, ia sengaja dibuat oleh seseorang (programmer) yang tidak senang dengan kesempurnaan, dia lebih senang membuat kerusakan. Oleh karena itu tindakan membuat virus komputer bisa dikatakan “sebuah kejahatan“.
h. Anti Virus
Software ini khusus untuk mengantisipasi (membunuh) virus yang mungkin bisa masuk ke dalam komputer, baik itu komputer yang sendirian (stand alone) atau komputer dalam jaringan (network).
Contoh :
- Dr. Solomon Anti Virus
- Norton Anti Virus
- McAfee Virus Scan
- PC-Cillin
• Applicated (Program Aplikasi)
Program ini merupakan program siap pakai, banyak dibuat untuk aplikasi-palikasi kerja tertentu seperti akuntansi, berbagai macam format, kartu-kartu, sampul buku, editing foto dan sebagainya.
Contoh :
- PrinShop
- PhotoShop
- DAC Easy
- Form Tools
- Free Hand
- Easy Flow
• Pendidikan
– Kamus, Ensiklopedia, Simulasi, dll
• Entertainment/Hiburan
– Game, Winamp, dll
• Bisnis
– Inventory, Pembukuan,Registrasi, dll
• Produktivitas Kerja
– Ms. Office, Manajemen Data, dll
• Software Khusus
– Software yang dibuat sesuai dengan keinginan user.
Jenis – jenis software yang lain antara lain:
• Software Komersial
– Bertujuan untuk dijual. Ada hak cipta
• Software Domain-Public
– Sifatnya gratis dan berupa source code
• Shareware
– Digunakan untuk evaluasi, tanpa source code
– Ada hak cipta dan ada yang Tidak ada.
• Rentalware
– Disewakan, ada hak cipta.
• Free Software
– Dilengkapi dengan source code
– Bersifat gratis/membayar dgn sangat murah
• Freeware
– Bersifat gratis, tanpa source code
– Menarik peminat untuk membeli versi lanjutannya
• Open Source
– Hampir sama dengan free software, hanya beda dalam hal filosofi.
– Terdapat hak-hak untuk pemakai.
• Hak untuk membuat salinan program dan men-distribusikan salinan tersebut.
• Hak untuk mengakses source code sebagai syarat untuk dapat melakukan pemodifikasian
• Hak untuk melakukan pengembangan thd program

Rabu, 27 Mei 2009

Doubly LinkedList

<html>
<head>
<title>Struktur Data Linked List</title>
</head>

<body>
<script language = "JavaScript">
<!--
function DoublyLinkedList()
{
this._Kepala = null;
this._Ekor = null;
this._Panjang = 0;
}

DoublyLinkedList.prototype =
{
constructor: DoublyLinkedList,
Tambah: function (data)
{
var node = {data: data, next: null, prev: null};

if (this._Panjang == 0)
{
this._Kepala = node;
this._Ekor = node;
}
else
{
this._Ekor.next = node;
node.prev = this._Ekor;
this._Ekor = node;
}
this._Panjang++;

},

ItemList: function(index)
{
if (index > -1 && index < this._Panjang)
{
var NodeTanda = this._Kepala,
i = 0;

while(i++ < index)
{
NodeTanda = NodeTanda.next;
}

return NodeTanda.data;
}
else
{
return null;
}
},

Buang: function(index){

if (index > -1 && index < this._Panjang)
{
var NodeTanda = this._Kepala, i = 0;

if (index === 0)
{
this._Kepala = NodeTanda.next;
if (!this._Kepala)
{
this._Ekor = null;
}
else
{
this._Kepala.prev = null;
}

}
else
if (index === this._Panjang -1)
{
NodeTanda = this._Ekor;
this._Ekor = NodeTanda.prev;
this._Ekor.next = null;
}
else
{
while(i++ < index)
{
NodeTanda = NodeTanda.next;
}
NodeTanda.prev.next = NodeTanda.next;
}
this._Panjang--;
return NodeTanda.data;

}
else
{
return null;
}


},

Ukuran: function(){
return this._Panjang;
},

toArray: function(){
var result = [],
NodeTanda = this._Kepala;

while(NodeTanda){
result.push(NodeTanda.data);
NodeTanda = NodeTanda.next;
}

return result;
},

toString: function(){
return this.toArray().toString();
}
}

var List = new DoublyLinkedList();


List.Tambah("Teknik Informatika");
List.Tambah("Teknik Komputer");
List.Tambah("Komputerisasi Akuntansi");
List.Tambah("Computer Networking");


document.write("Isi LinkedList <br>");
document.write("--------------- <br>");
for (i=0; i<4; i++)
{
document.write(List.ItemList(i) + "<br>") ;
}
document.write("--------------- <br>");


alert("Isi LinkedList Awal =" + List.ItemList(0));
alert("ItemList 1 pada Linked List diBuang, yaitu = " +List.ItemList(1));
List.Buang(1);



document.write("<br>Isi LinkedList Terakhir <br>");
document.write("--------------- <br>");
for (i=0; i<4; i++)
{
document.write(List.ItemList(i) + "<br>") ;
}
document.write("--------------- <br>");

//-->
</script>
</body>
</html>

Minggu, 24 Mei 2009

lat linkedlist




<html>
<head>
<title>Struktur Data Linked List </title></head>
<body>
<script language = "JavaScript">
<!--
function LinkedList()
{
this._panjang = 0;
this._kepala = null;
}
LinkedList.prototype =
{
construktor : LinkedList,
//Membuat Metode Untuk Menambah Data kedalam List
Tambah : function (data)
{
//Membuat Node List
var node = {data:data,next: null },NodeTanda;
//Periksa Isi List
if (this._kepala===null)
{
this._kepala = node;
}
else
{
NodeTanda = this._kepala;
while (NodeTanda.next)
{
NodeTanda = NodeTanda.next;
}
NodeTanda.next = node;
}
this._panjang++;
},
//Membuat Metode Untuk Menunjuk Item Data
Item : function (index)
{
if (index > -1 && index <this._panjang)
{
var NodeTanda = this._kepala,
i = 0;
while (i ++ < index)
{
NodeTanda = NodeTanda.next;
}
return NodeTanda.data;
}
else
{
return null;
}

},
//Membuat Metode Untuk Membuang Elemen List
Buang : function (index)
{
if (index > -1 && index < this._panjang)
{
var NodeTanda = this._kepala,previous,i = 0;
if (index === 0 )
{
this._kepala = NodeTanda.next;
}
else
{
while (i++ < index)
{
previous = NodeTanda;
NodeTanda = NodeTanda.next;
}
previous.next = NodeTanda.next;
}
this._panjang--;
return NodeTanda.data;
}
else
{
return null;
}
},
//Membuat Metode Untuk Mengetahui Jumlah Elemen List
Ukuran :function()
{
return this._panjang;
},
//Membuat Metode Untuk Membentuk Array
toArray : function()
{
var result = [],
NodeTanda = this._kepala;
while(NodeTanda){
result.push (NodeTanda.data);
NodeTanda = NodeTanda.next;
}
return result;
},
//Membuat Metode Untuk Konversi ke String
toString : function()
{
return this.toArray().toString();
}
};
//Lanjutan
var list = new LinkedList();

list.Tambah("Teknik Informatika");
list.Tambah("Teknik Komputer");
list.Tambah("Komputerisasi Akuntansi");
list.Tambah("Computer Networking");

document.write ("Isi LinkedList <br>") ;
document.write("----------------<br>");
for(i=0; i<4; i++)
{
document.write(list.Item(i) + "<br>");
}
document.write("----------------<br>");

alert("Isi LinkedList Awal="+ list.Item(0));
alert("Item 1 pada Linked list dibuang,yaitu =" +list.Item(1));
list.Buang(1);


document.write("Isi LinkedList Terakhir <br>");
document.write("------------------------<br>");
for(i=0;i<4;i++)
{
document.write(list.Item(i) + "<br>");
}
document.write("--------------------<br>");

//-->
</script>
</body>
</html>

Selasa, 12 Mei 2009

latihan 1 queue

<html>
<head>
<title>Program Queue dengan shift dan unshift javascript </title>
<script language ="JavaScript">

function DataQueue()
{
var queue =[];
queue.unshift(1);
queue.unshift(2);

var i = queue.pop();
document.write(i + "<br/>");
queue.unshift(3);
queue.unshift(4);
var i = queue.pop();
document.write(i + "<br/>");

}
</script>
</head>

<body>
<form name="FormStrukturData">
<input name="btnQueue" value="Queue" type="button"
onClick="DataQueue();"/>
</form>
</body>
</html>

Rabu, 29 April 2009

Tampilkan Bulan JavaScript


?html?
?head?
?title>lihat bulan?/title?
?/head?
?body?
?script language ="javascript"?
?!--
var bulan = new Array("","january","february","maret","april","may","juny","july","agustus","september","oktober","november","desember");
var angka = parseInt(prompt("masukan angka!"));
document.write(bulan[angka]);
//--?
?/script?
?/body?
?/html?

Sabtu, 18 April 2009

Data Gaji Pegawai

?html?

?head??title?Memanipulasi Data Pegawai?/title?
?script language = "javascript" type="text/javascript"?
?!--
var DBPegawai = new Array();
function Pegawai ( Fields_NIP,Fields_Nama,Fields_Gaji_Per_Jam,Fields_Jam_Kerja,Fields_Gaji_Total){
this.NIP = Fields_NIP;
this.Nama = Fields_Nama;
this.Gaji_Jam = Fields_Gaji_Per_Jam;
this.Jam_Kerja = Fields_Jam_Kerja;
this.Gaji_Total = Fields_Gaji_Total;}

function inputPegawai(){
var Nama,Gaji_Per_Jam, Jam_Kerja, Gaji;
while ( NIP = window.prompt("Ketikan NIP (Nomor Induk Pegawai)\n\n Click 'cancal' untuk Berhenti !!." )){
Nama = window.prompt( "Nama Pegawai :");
Gaji_Per_Jam = parseInt(window.prompt(" Gaji Per Jam:"));
Jam_Kerja = parseInt(window.prompt(" Jumlah Jam Kerja:"));
Gaji = Gaji_Per_Jam*Jam_Kerja;
DBPegawai[DBPegawai.length]=new Pegawai(NIP,Nama,Gaji_Per_Jam,Jam_Kerja,Gaji);
}
ShowPegawai();
}

function ShowPegawai(){
document.write(""+
""+
""+
""+
"");


for (i=0; i<>"+

" "+
" "+
" "+
" "+
" "+
"");

}
document.write("?/table?");
}
//--?
?/script?
?/head?
?body onload = "inputPegawai();"?
?/body?

?/html?



NIPNamaGaji Per JamJam Kerja Gaji Total
" + DBPegawai[i].NIP + "" + DBPegawai[i].Nama + "" + DBPegawai[i].Gaji_Jam+"" + DBPegawai[i].Jam_Kerja+"" + DBPegawai[i].Gaji_Total + "

konversi bilangan

?html?
?head?
?title?Konversi Antar Bilangan?/title?
?/head?
?body?
?script language = "JavaScript"?
?!--
var bil = new Number(25);
document.write("Bilangan Desimal : " +bil + "
");
document.write("
");

document.write ("Biner : " + bil.toString(2) + "
");
document.write ("Oktal : " + bil.toString(8) + "
");
document.write ("Heksa : " + bil.toString(16) + "
");

//--?
?/script?
?/body?
?/html?

tambah bilangan

?HTML?
?HEAD?
?TITLE?Membuat Fungsi Matematika Dengan JavaScript?/TITLE?
?/HEAD?
?BODY?
?SCRIPT LANGUAGE = "JavaScript"?
?!--

function jumlah (x,y){
var hasil = x+y;

return (hasil);
}

var a =parseInt(prompt ("Ketikan Bilangan A = \n Ingat Jangan String"));
var b =parseInt(prompt ("Ketikan Bilangan B = \n Ingat Jangan String"));
var z =jumlah(a,b);

document.write (z);
document.write("
");
document.write("
");
document.write("Tipe Datanya adalah = " + typeof(z));

//--?
?/SCRIPT?
?/BODY?
?/HTML?

Jumat, 17 April 2009

allabout queue & deque

Allabout queue & deque

QUEUE ( ANTREAN )

4.1. PENGERTIAN QUEUE (ANTREAN)

Setelah pada Bab 3 yang lalu kita bahas tentang salah satu jenis daftar (list) linear, yakni

stack, kali ini kita bahas jenis lain dari daftar linear, yakni queue atau antrean. Struktur

data antrean atau queue adalah suatu bentuk khusus dari linear list, dengan operasi

penyisipan (insertion) hanya diperbolehkan pada salah satu sisi, yang disebut sisi belakang

(REAR), dan operasi penghapusan (deletion) hanya diperbolehkan pada sisi lainnya, yang

disebut sisi depan (FRONT), dari list.

Sebagai contoh dapat kita lihat antrean (Q1, Q2,...,QN). Kita notasikan bagian depan

dari antrean Q sebagai FRONT(Q) dan bagian belakang sebagai REAR(Q).

Jadi untuk antrean Q = [Q1, Q2, …, QN] :

FRONT(Q) = Q1 dan REAR(Q) = QN

Kita menggunakan notasi NOEL(Q) untuk menyatakan jumlah elemen di dalam

antrean Q. NOEL(Q) mempunyai harga integer. Untuk antrean Q = [Q1,Q2,…, QN], maka

NOEL(Q) = N.

Operator penyisipan (insertion) disebut INSERT dan operator penghapusan (deletion)

disebut REMOVE.

Pengantar Struktur Data Bab 4 – Queue (Antrean)

66

Sebagai contoh untuk memperjelas bekerjanya antrean, kita perhatikan sederetan

operasi berikut ini. Kita mulai dengan antrean hampa Q. Antrean hampa Q, atau Q[ ] dapat

disajikan seperti terlihat pada Gambar 4-1

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Gambar 4.1. Antrean hampa

Di sini :

NOEL(Q) = 0

FRONT(Q) = tidak terdefinisi

REAR(Q) = tidak terdefinisi

Lalu kita INSERT elemen A, diperoleh Q = [A], seperti terlihat di Gambar 4.2.

- - - - - - - - - - - - - - - - - -

A

- - - - - - - - - - - - - - - - - -

Gambar 4.2. Elemen A dimasukkan

Di sini :

NOEL(Q) = 1

FRONT(Q) = A

REAR(Q) = A

Dilanjutkan dengan INSERT elemen B, sehingga diperoleh Q = [A, B], seperti terlihat

di Gambar 4-3.

- - - - - - - - - - - - - - - - - -

A B

- - - - - - - - - - - - - - - - - -

Gambar 4.3. Elemen B dimasukkan setelah elemen A

Di sini :

NOEL(Q) = 2

FRONT(Q) = A

REAR(Q) = B

Dilanjutkan dengan INSERT elemen C, sehingga diperoleh Q = [A, B, C], seperti

terlihat di Gambar 4.4.

- - - - - - - - - - - - -

A B C

- - - - - - - - - - - - -

Gambar 4.4. Elemen C dimasukkan setelah elemen B

Pengantar Struktur Data Bab 4 – Queue (Antrean)

67

Di sini :

NOEL(Q) = 3

FRONT(Q) = A

REAR(Q) = C

Dilanjutkan dengan DELETE satu elemen dari Q, sehingga diperoleh Q = [B, C],

seperti terlihat di Gambar 4.5.

- - - - - - - - - - - - -

B C

- - - - - - - - - - - - -

Gambar 4.5. Satu elemen dihapus

Di sini :

NOEL(Q) = 2

FRONT(Q) = B

REAR(Q) = C

Demikian seterusnya, kita dapat melakukan serangkaian INSERT dan DELETE yang

lain. Suatu kesalahan underflow dapat terjadi, yakni apabila kita melakukan penghapusan

pada antrean hampa. Antrean dikatakan beroperasi dalam cara FIRST-IN-FIRST-OUT

(FIFO). Disebut demikian karena elemen yang pertama masuk merupakan elemen yang

pertama ke luar.

Model antrean, sangat sering ditemukan dalam kejadian sehari-hari, seperti mobil yang

menunggu untuk pengisian bahan bakar, mobil pertama dari antrean merupakan mobil

pertama yang akan keluar dari antrean. Sebagai contoh lain adalah orang yang menunggu

dalam antrean di suatu bank. Orang pertama yang berada di dalam barisan tersebut akan

merupakan orang pertama yang akan dilayani.

4.2 OPERASI DASAR PADA ANTREAN

Ada 4 operasi dasar yang dapat dilakukan pada struktur data antrean, yakni :

1. CREATE(antrean)

2. ISEMPTY(antrean)

3. INSERT(elemen,antrean)

4. REMOVE(antrean)

Pandang misalnya antrean Q = [Q1, Q2, …, QNOEL], maka :

Pengantar Struktur Data Bab 4 – Queue (Antrean)

68

CREATE(antrean) :

CREATE(Q) adalah suatu operator untuk membentuk dan menunjukkan suatu antrean

hampa Q.

Berarti :

NOEL(CREATE(Q)) = 0

FRONT(CREATE(Q)) = tidak terdefinisi

REAR(CREATE(Q)) = tidak terdefinisi

ISEMPTY(antrean)

ISEMPTY(Q) adalah operator yang menentukan apakah antrean Q hampa atau tidak.

Operand dari operator ini merupakan antrean, sedangkan hasilnya merupakan tipe data

boolean.

Di sini :

ISEMPTY(antrean) = true, jika Q hampa, yakni jika NOEL(Q)=0

= false, dalam hal lain.

Maka, ISEMPTY(CREATE(Q)) = true.

INSERT(elemen, antrean)

INSERT(E,Q) adalah operator yang memasukkan elemen E ke dalam antrean Q. Elemen

E ditempatkan di bagian belakang dari antrean. Hasil dari operasi ini adalah antrean yang

lebih panjang.

REAR(INSERT(E,Q)) = E

QNOEL adalah E

ISEMPTY(INSERT(E,Q)) = false

REMOVE(antrean)

REMOVE(Q) adalah operator yang menghapus elemen bagian depan dari Antrean Q.

Hasilnya merupakan antrean yang lebih pendek. Pada setiap operasi ini, harga dari

NOEL(Q) berkurang satu, dan elemen kedua dari Q menjadi elemen terdepan.

Jika NOEL(Q) = 0, maka REMOVE(Q) memberikan suatu kondisi error, yakni suatu

underflow. Jelas bahwa REMOVE(CREATE(Q)) juga memberikan kondisi underflow

error.

Pengantar Struktur Data Bab 4 – Queue (Antrean)

69

4.3 PENYAJIAN DARI ANTREAN

Antrean dapat disajikan di dalam komputer dalam berbagai cara. Biasanya dengan

menggunakan one-way-list (linear linked list) ataupun menggunakan array. Kalau tidak

disebutkan lain, maka antrean kita sajikan dalam array QUEUE, dengan dilengkapi dua

variabel penunjuk. FRONT, berisi lokasi dari elemen DEPAN antrean dan REAR, berisi

lokasi dari elemen BELAKANG antrean. Nilai FRONT = NULL menunjukkan bahwa

antrean adalah hampa.

Gambar 4.6 menunjukkan bagaimana menyajikan suatu antrean dalam sebuah array

QUEUE dengan N elemen. Gambar itu juga menunjukkan bagaimana melakukan

pemasukan dan penghapusan elemen antrean.

Pada Gambar 4.6(a) terlihat bahwa antrean mula-mula terdiri atas elemen AAA

(sebagai DEPAN), BBB, CCC, dan DDD (sebagai BELAKANG). Gambar 4.6.(b) menunjukkan

keadaan setelah penghapusan elemen. Di sini elemen DEPAN yakni AAA

dihapus. Gambar 4.6.(c) menggambarkan keadaan setelah penambahan berturut-turut

elemen EEE dan FFF. Terakhir sekali, keadaan setelah penghapusan elemen DEPAN,

BBB.

Gambar 4.6. Cara kerja antrean

Pengantar Struktur Data Bab 4 – Queue (Antrean)

70

Dapat kita lihat bahwa pada setiap kali penghapusan, nilai lokasi FRONT akan

bertambah 1. Untuk setiap kali pemasukan elemen, nilai REAR akan bertambah 1. Hal ini

berakibat bahwa setelah pemasukan elemen ke N (berawal dari antrean hampa), maka

lokasi QUEUE(N) telah diduduki. Di sini mungkin saja tidak sebanyak N elemen ada

dalam antrean (karena sudah dilakukan beberapa penghapusan).

Untuk melakukan pemasukan berikutnya, yakni memasukkan elemen ITEM, kita dapat

menggunakan lokasi QUEUE(1). Demikian seterusnya. Dalam hal ini, kita menggunakan

array sirkular, yakni bahwa QUEUE(1) datang sesudah QUEUE(N) di array dalam.

Berdasarkan asumsi ini, maka REAR adalah 1.

Secara yang sama, jika FRONT = N dan kita akan melakukan penghapusan, maka

sekarang FRONT adalah 1, bukan N+l.

Gambar 4.7 memperlihatkan antrean yang disimpan dalam array dengan 5 lokasi

memori, sebagai array sirkular.

Pengantar Struktur Data Bab 4 – Queue (Antrean)

71

Gambar 4.7. Circular Array

Sekarang kita akan menampilkan algoritma QINSERT, yang dimaksudkan untuk

memasukkan data ke dalam suatu antrean. Yang mula-mula kita laksanakan dalam

algoritma adalah, memeriksa kemungkinan terjadi overflow error, yakni dengan melihat

apakah antrean tersebut terisi penuh.

Algoritma kedua adalah algoritina QDELETE yang dimaksudkan untuk menghapus

elemen DEPAN dari antrean.Yang mula-mula kita laksanakan ialah memeriksa

kemungkinan terjadi underflow error, yakni dengan melihat apakah antrean tersebut

kosong.

Algoritma QINSERT

QINSERT(QUEUE, N, FRONT, DATA)

1. [Apakah antrean penuh]

Jika FRONT := 1 dan REAR := N, atau jika FRONT := REAR + 1, maka write

OVERFLOW, return.

2. Jika FRONT := NULL, maka FRONT := 1

REAR := 1

dalam hal lain

jika REAR := N, maka

REAR := 1

dalam hal lain

REAR := REAR + 1

3. QUEUE(REAR) := DATA (masukkan elemen baru)

4. Return

Algoritma QDELETE

QDELETE(QUEUE, N, FRONT, REAR, DATA)

1. [Apakah antrean kosong]

Jika FRONT := NULL, maka

Write : UNDERFLOW, return

2. DATA := QUEUE(FRONT)

Pengantar Struktur Data Bab 4 – Queue (Antrean)

72

3. (FRONT mendapat nilai baru). Jika FRONT := REAR, maka (antrean memuat

hanya 1 elemen) FRONT := NULL.

REAR := NULL, dalam hal lain

Jika FRONT := N, maka FRONT := 1, dalam hal lain :

FRONT := FRONT + 1

4. Return.

4.4 DEQUE

Kali ini akan kita bicarakan beberapa struktur data yang merupakan bentuk variasi dari

struktur data antrean atau queue, yang telah kita bicarakan terdahulu. Struktur data tersebut

adalah deque (atau deck atau dequeue) dan Antrean berprioritas (atau priority queue).

DEQUE adalah suatu linear list atau daftar linear, yang penambahan dan penghapusan

elemennya dapat dilakukan pada kedua sisi ujung list, tetapi tidak dapat dilakukan di

tengah-tengah list. Dari sini, kita boleh mengatakan bahwa deque adalah suatu queue

ganda atau double queue.

Ada banyak cara penyajian suatu deque di dalam komputer. Namun yang biasa

digunakan adalah penyajian dengan cara penempatan di dalam sebuah array sirkular atau

array putar DEQUE.

Di sini kita menggunakan dua pointer atau penunjuk, LEFT dan RIGHT, yang

berturut-turut menunjuk pada sisi kiri dan sisi kanan dari deque. Kita senantiasa

mengasumsikan bahwa elemen deque berurut dari kiri ke kanan. Pengertian sirkular di atas

timbul karena elemen DEQUE(l) berada sesudah elemen DEQUE(N) dari array.

Gambar 4.8 menggambarkan 2 buah deque, masing-masing berisi 4 elemen, yang

ditempatkan di dalam sebuah array dengan 8 lokasi memori. Kondisi LEFT = NULL

dipergunakan untuk menyatakan bahwa suatu deque adalah hampa.

Selain deque dengan sifat yang telah kita sebutkan di atas, masih ada 2 model variasi

deque. Kedua variasi tersebut adalah deque input terbatas, dan deque output terbatas, yang

merupakan tengah-tengah antara deque dan antrean.

Deque input terbatas adalah suatu deque yang membatasi pemasukan elemen hanya

pada satu ujung dari list, sementara penghapusan elemen boleh dilakukan pada kedua

ujung list.

Deque output terbatas adalah suatu deque yang hanya memperbolehkan penghapusan

elemen pada salah satu ujung, tetapi memperbolehkan pemasukan elemen pada kedua

ujung list.