Sabtu, 27 Juni 2009
gabungan linkedlist dan buble sort
<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
<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
<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
?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
<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 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
Kamis, 28 Mei 2009
Rabu, 27 Mei 2009
Doubly LinkedList
<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
<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
?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("
| NIP | Nama | Gaji Per Jam | Jam Kerja | "+Gaji Total | "+" + DBPegawai[i].NIP + " | "+" + DBPegawai[i].Nama + " | "+" + DBPegawai[i].Gaji_Jam+" | "+" + DBPegawai[i].Jam_Kerja+" | "+" + DBPegawai[i].Gaji_Total + " | "+
|---|
konversi bilangan
?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
?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.


