Minggu, 10 Mei 2015

KomDat

Komunikasi data

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Komunikasi data adalah proses pengiriman dan penerimaan data/informasi dari dua atau lebih device (alat,seperti komputer/laptop/printer/dan alat komunikasi lain)yang terhubung dalam sebuah jaringan. Baik lokal maupun yang luas, sepeti internet
Pengertian lain komunikas data yaitu transmisi data elektronik melalui beberapa media(kabel coaksial,fiberoptik,mikrowave dsb). sistem yang mungkin terjadinya transmisi data sering disebut sebagai jaringan komunikasi data
Secara umum ada dua jenis komunikasi data, yaitu:
Melalui Infrastruktur Terestrial 
Menggunakan media kabel dan nirkabel sebagai aksesnya. Membutuhkan biaya yang tinggi untuk membangun infrastruktur jenis ini. Beberapa layanan yang termasuk teresterial antara lain: Sambungan Data Langsung (SDL), Frame Relay, VPN MultiService dan Sambungan Komunikasi Data Paket (SKDP).
Melalui Satelit 
Menggunakan satelit sebagai aksesnya. Biasanya wilayah yang dicakup akses satelit lebih luas dan mampu menjangkau lokasi yang tidak memungkinkan dibangunnya infrastruktur terestrial namun membutuhkan waktu yang lama untuk berlangsungnya proses komunikasi. Kelemahan lain dari komunikasi via satelit adalah adanya gangguan yang disebabkan oleh radiasi gelombang matahari (Sun Outage) dan yang paling parah terjadi setiap 11 tahun sekali.:
Apa Yang menyebabkan kita sangat membutuhkan Komdat :
1.Dengan Menggunakan Sistem ini akan terasa Lebih Efisien
2. Karena Sebaian besar pengguna Komputer Hampir Menggunakan data sebagai alat komunikasi antar kantor,Perusahaan dan Institusi institusi lainnya.
Inilah yang menyebabkan sistem Komdat diperlukan.
3.Menjaga Data agar sampai sesuai tujuan yang diinginkan.
4.Dapat mengurangi Keterbatasan Waktu
5.Data menjadi Terahasiakan.bila ada data yang tidak boleh diketahui pihak lain.
Bagaimana Cara menjaga data dalam sistem komunikasi data
  1. Pastikan media transmisi tidak rusak
  2. Pastikan Alamat IP yang mau dikirim benar
  3. Lindungi kabel-kabel dari binatang perusak
  4. Letakan Kabel kabel ditempat yang aman
  5. selalu rutin scan virus. Recomendasi sehari 2x
  6. HDD yang digunakan tidak boleh Bad sector
  7. Agar lebih baik, HDD yang digunakan tidak dicampur dengan game ini membuat file menjadi lemot untuk dibuka
Prinsip KOMDAT:
1 . Pengirim/senter
2. Media Penghantar
3. Sink/penerima

Isu Utama dalam Komunikasi Data

Isu utama dalam komunikasi data melalui sebuah jaringan baik melalui infrastruktur teresterial ataupun melalui satelit antara lain adalah:
  1. Keterbatasan bandwith, dapat diatasi dengan penambahan bandwith.
  2. Memiliki Round Trip Time (RTT) yang terlalu besar, dioptimalkan dengan adanya TCP Optimizer untuk mengurangi RTT.
  3. Adanya delay propagasi untuk akses via satelit, membangun infrastruktur terestrial jika mungkin.

Sistem Operasi

Sistem operasi

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Sistem operasi (bahasa Inggris: operating system ; OS) adalah seperangkat program yang mengelola sumber daya perangkat keras komputer atau hardware, dan menyediakan layanan umum untuk aplikasi perangkat lunak. Sistem operasi adalah jenis yang paling penting dari perangkat lunak sistem dalam sistem komputer. Tanpa sistem operasi, pengguna tidak dapat menjalankan program aplikasi pada komputer mereka, kecuali program aplikasi booting.
Sistem operasi mempunyai penjadwalan yang sistematis mencakup perhitungan penggunaan memori, pemrosesan data, penyimpanan data, dan sumber daya lainnya.
Untuk fungsi-fungsi perangkat keras seperti sebagai masukan dan keluaran dan alokasi memori, sistem operasi bertindak sebagai perantara antara program aplikasi dan perangkat keras komputer,[1][2] meskipun kode aplikasi biasanya dieksekusi langsung oleh perangkat keras dan seringkali akan menghubungi OS atau terputus oleh itu. Sistem operasi yang ditemukan pada hampir semua perangkat yang berisi komputer-dari ponsel dan konsol permainan video untuk superkomputer dan server web.
Contoh sistem operasi modern adalah Linux, Android, iOS, Mac OS X, dan Microsoft Windows.[3]

Pendahuluan

Biasanya, istilah Sistem Operasi sering ditujukan kepada semua perangkat lunak yang masuk dalam satu paket dengan sistem komputer sebelum aplikasi-aplikasi perangkat lunak terinstal. Sistem operasi adalah perangkat lunak sistem yang bertugas untuk melakukan kontrol dan manajemen perangkat keras serta operasi-operasi dasar sistem, termasuk menjalankan perangkat lunak aplikasi seperti program-program pengolah kata dan peramban web.
Secara umum, Sistem Operasi adalah perangkat lunak pada lapisan pertama yang ditempatkan pada memori komputer pada saat komputer dinyalakan booting. Sedangkan software-software lainnya dijalankan setelah Sistem Operasi berjalan, dan Sistem Operasi akan melakukan layanan inti untuk software-software itu. Layanan inti tersebut seperti akses ke disk, manajemen memori, penjadwalan tugas schedule task, dan antar-muka user GUI/CLI. Sehingga masing-masing software tidak perlu lagi melakukan tugas-tugas inti umum tersebut, karena dapat dilayani dan dilakukan oleh Sistem Operasi. Bagian kode yang melakukan tugas-tugas inti dan umum tersebut dinamakan dengan "kernel" suatu Sistem Operasi.
Kalau sistem komputer terbagi dalam lapisan-lapisan, maka Sistem Operasi adalah penghubung antara lapisan hardware dengan lapisan software. Sistem Operasi melakukan semua tugas-tugas penting dalam komputer, dan menjamin aplikasi-aplikasi yang berbeda dapat berjalan secara bersamaan dengan lancar. Sistem Operasi menjamin aplikasi lainnya dapat menggunakan memori, melakukan input dan output terhadap peralatan lain, dan memiliki akses kepada sistem berkas. Apabila beberapa aplikasi berjalan secara bersamaan, maka Sistem Operasi mengatur schedule yang tepat, sehingga sedapat mungkin semua proses yang berjalan mendapatkan waktu yang cukup untuk menggunakan prosesor (CPU) serta tidak saling mengganggu.
Dalam banyak kasus, Sistem Operasi menyediakan suatu pustaka dari fungsi-fungsi standar, dimana aplikasi lain dapat memanggil fungsi-fungsi itu, sehingga dalam setiap pembuatan program baru, tidak perlu membuat fungsi-fungsi tersebut dari awal.
Sistem Operasi secara umum terdiri dari beberapa bagian:
  • Mekanisme Boot, yaitu meletakkan kernel ke dalam memory
  • Kernel, yaitu inti dari sebuah Sistem Operasi
  • Command Interpreter atau shell, yang bertugas membaca input dari pengguna
  • Pustaka-pustaka, yaitu yang menyediakan kumpulan fungsi dasar dan standar yang dapat dipanggil oleh aplikasi lain
  • Driver untuk berinteraksi dengan hardware eksternal, sekaligus untuk mengontrolnya.
Sebagian Sistem Operasi hanya mengizinkan satu aplikasi saja yang berjalan pada satu waktu (misalnya DOS), tetapi sebagian besar Sistem Operasi baru mengizinkan beberapa aplikasi berjalan secara simultan pada waktu yang bersamaan. Sistem Operasi seperti ini disebut sebagai Multi-tasking Operating System (misalnya keluarga sistem operasi UNIX). Beberapa Sistem Operasi berukuran sangat besar dan kompleks, serta inputnya tergantung kepada input pengguna, sedangkan Sistem Operasi lainnya sangat kecil dan dibuat dengan asumsi bekerja tanpa intervensi manusia sama sekali. Tipe yang pertama sering disebut sebagai Desktop OS, sedangkan tipe kedua adalah Real-Time OS, contohnya adalah Windows, Linux, Free BSD, Solaris, palm, symbian, dan sebagainya.

Layanan inti umum

Seiring dengan berkembangnya Sistem Operasi, semakin banyak lagi layanan yang menjadi layanan inti umum. Kini, sebuah OS mungkin perlu menyediakan layanan jaringan dan koneksi internet, yang dulunya tidak menjadi layanan inti umum. Sistem Operasi juga perlu untuk menjaga kerusakan sistem komputer dari gangguan program perusak yang berasal dari komputer lainnya, seperti virus. Daftar layanan inti umum akan terus bertambah.
Program saling berkomunikasi antara satu dengan lainnya dengan Antarmuka Pemrograman Aplikasi, Application Programming Interface atau disingkat dengan API. Dengan API inilah program aplikasi dapat berkomunikasi dengan Sistem Operasi. Sebagaimana manusia berkomunikasi dengan komputer melalui Antarmuka User, program juga berkomunikasi dengan program lainnya melalui API.
Walaupun demikian API sebuah komputer tidaklah berpengaruh sepenuhnya pada program-program yang dijalankan diatas platform operasi tersebut. Contohnya bila program yang dibuat untuk windows 3.1 bila dijalankan pada windows 95 dan generasi setelahnya akan terlihat perbedaan yang mencolok antara program tersebut dengan program yang lain.

Sistem Operasi saat ini

Sistem operasi-sistem operasi utama yang digunakan komputer umum (termasuk PC, komputer personal) terbagi menjadi 3 kelompok besar:
  1. Keluarga Microsoft Windows - yang antara lain terdiri dari Windows Desktop Environment (versi 1.x hingga versi 3.x), Windows 9x (Windows 95, 98, dan Windows ME), dan Windows NT (Windows NT 3.x, Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7 (Seven) yang dirilis pada tahun 2009, dan Windows 8 yang dirilis pada Oktober 2012)).
  2. Keluarga Unix yang menggunakan antarmuka sistem operasi POSIX, seperti SCO UNIX, keluarga BSD (Berkeley Software Distribution), GNU/Linux, Zeath OS (berbasis kernel linux yang dimodifikasi.)MacOS/X (berbasis kernel BSD yang dimodifikasi, dan dikenal dengan nama Darwin) dan GNU/Hurd.
  3. Mac OS, adalah sistem operasi untuk komputer keluaran Apple yang biasa disebut Mac atau Macintosh. Sistem operasi yang terbaru adalah Mac OS X versi 10.6 (Snow Leopard). Musim panas 2011 direncanakan peluncuran versi 10.7 (Lion).
Sedangkan komputer Mainframe, dan Super komputer menggunakan banyak sekali sistem operasi yang berbeda-beda, umumnya merupakan turunan dari sistem operasi UNIX yang dikembangkan oleh vendor seperti IBM AIX, HP/UX, dll.

Prosesor

Prosesor mengeksekusi program-program komputer. Prosesor adalah sebuah chip dalam sistem komputer yang menjalankan instruksi-instruksi program komputer. Dalam setiap detiknya prosesor dapat menjalankan jutaan instruksi.
Program adalah sederetan instruksi yang diberikan kepada suatu komputer. Sedangkan proses adalah suatu bagian dari program yang berada pada status tertentu dalam rangkaian eksekusinya. Di dalam bahasan Sistem Operasi, kita lebih sering membahas proses dibandingkan dengan program. Pada Sistem Operasi modern, pada saat tertentu tidak seluruh program dimuat dalam memori, tetapi hanya satu bagian saja dari program tersebut. Sedangkan bagian lain dari program tersebut tetap beristirahat di media penyimpan disk. Hanya pada saat dibutuhkan saja, bagian dari program tersebut dimuat di memori dan dieksekusi oleh prosesor. Hal ini sangat menghemat pemakaian memori.
Beberapa sistem hanya menjalankan satu proses tunggal dalam satu waktu, sedangkan yang lainnya menjalankan multi-proses dalam satu waktu. Padahal sebagian besar sistem komputer hanya memiliki satu prosesor, dan sebuah prosesor hanya dapat menjalankan satu instruksi dalam satu waktu. Maka bagaimana sebuah sistem prosesor tunggal dapat menjalankan multi-proses? Sesungguhnya pada granularity yang sangat kecil, prosesor hanya menjalankan satu proses dalam satu waktu, kemudian secara cepat ia berpindah menjalankan proses lainnya, dan seterusnya. Sehingga bagi penglihatan dan perasaan pengguna manusia, seakan-akan prosesor menjalankan beberapa proses secara bersamaan.
Setiap proses dalam sebuah sistem operasi mendapatkan sebuah PCB (Process Control Block) yang memuat informasi tentang proses tersebut, yaitu: sebuah tanda pengenal proses (Process ID) yang unik dan menjadi nomor identitas, status proses, prioritas eksekusi proses dan informasi lokasi proses dalam memori. Prioritas proses merupakan suatu nilai atau besaran yang menunjukkan seberapa sering proses harus dijalankan oleh prosesor. Proses yang memiliki prioritas lebih tinggi, akan dijalankan lebih sering atau dieksekusi lebih dulu dibandingkan dengan proses yang berprioritas lebih rendah. Suatu sistem operasi dapat saja menentukan semua proses dengan prioritas yang sama, sehingga setiap proses memiliki kesempatan yang sama. Suatu sistem operasi dapat juga mengubah nilai prioritas proses tertentu, agar proses tersebut akan dapat memiliki kesempatan lebih besar pada eksekusi berikutnya (misalnya: pada proses yang sudah sangat terlalu lama menunggu eksekusi, sistem operasi menaikkan nilai prioritasnya).

Status Prosesor

Jenis status yang mungkin dapat disematkan pada suatu proses pada setiap sistem operasi dapat berbeda-beda. Tetapi paling tidak ada 3 macam status yang umum, yaitu:
  1. Ready, yaitu status dimana proses siap untuk dieksekusi pada giliran berikutnya
  2. Running, yaitu status dimana saat ini proses sedang dieksekusi oleh prosesor
  3. Blocked, yaitu status dimana proses tidak dapat dijalankan pada saat prosesor siap/bebas

Tujuan Sistem Operasi

  • Sistem Operasi membuat komputer menjadi lebih mudah dan menarik serta nyaman untuk digunakan.
  • Sistem Operasi memungkinkan sumberdaya komputer digunakan secara efisien.
  • Sistem Operasi yang disusun/ diprogram sedemikian rupa memungkinkan menerima perubahan/ pengembangan baru yang efektif dan efisien, dapat melakukan pengujian sistem tanpa mengganggu layanan yang telah ada.

Sabtu, 19 Juli 2014

Artikel Struktur Data



STRUKTUR DATA TREE (POHON)

Tree structure (struktur pohon) sangat umum ditemui. Mulai dari struktur folder/direktori di komputer Anda, sampai di setiap halaman web yang Anda kunjungi (dokumen HTML memiliki struktur tree, setiap browser ada struktur tree untuk DOM HTML). Beberapa contoh lain di mana Anda akan menemui struktur pohon:
  1. Memproses XML memerlukan pemahaman mengenai tree
  2. Pohon keluarga (family tree)
  3. Pohon organisasi
  4. Membuat pivot table yang kompleks memerlukan pemahaman mengenai tree
Jika Anda menjadi administrator database yang ingin bisa mengoptimasi sampai level penyimpanan, Anda harus tahu struktur dasar seperti B-tree. Di beberapa database, misalnya Oracle, Anda bisa mengatur ukuran blocksize untuk indeks B-tree.
Struktur graph (graf) juga banyak digunakan sehari-hari:
  1. Node-node dalam sebuah jaringan membentuk graf, dan ini perlu dipahami oleh administrator jaringan.
  2. Jalan dan lokasi di sebuah peta bisa dianggap sebagai graf.
  3. Jaringan pertemanan (di Facebook, Friendster, dsb) juga merupakan graf. Jika Anda membuat situs seperti itu, Anda perlu tahu konsep graf.
Ada beberapa gabungan dari tree dan graph. Jika Anda menjadi administrator jaringan, Anda perlu mengenal konsep spanning tree untuk mengkonfigurasi STP (spanning tree protocol). Jika Anda perlu membuat program peta sendiri, Anda perlu struktur data quad-tree untuk mengakses dengan cepat node-node dalam graf yang Anda miliki.
Mungkin sebagian dari Anda berpikir: itu kan hanya sebagian saja struktur data yang ada, bagaimana dengan yang lain?
Ketika belajar struktur data yang sederhana akan membantu kita memahami struktur data yang lebih kompleks. Misalnya jika seseorang tiba-tiba diminta mengimplementasikan tree dengan pointer, dia biasanya akan bingung. Sementara jika diajari selangkah demi selangkah mulai dari linked list, maka biasanya akan lebih mudah. Jadi fungsi pertama struktur yang sederhana adalah untuk mempelajari struktur yang lebih rumit. Dalam berbagai bahasa, struktur Linked List, Double Linked List, dsb sudah masuk menjadi API standar.
Dalam mengimplementasikan suatu struktur data, Anda bisa melihat kelebihan dan kekurangan masing-masing struktur data. Misalnya linked list sangat efisien untuk menyimpan data yang selalu ditambahkan di akhir. Ini akan membantu Anda memilih struktud data terbaik untuk keperluan Anda (jadi Anda tidak selalu hanya memakai java.util.Vector saja di Java). Jadi penggunaan struktur data spesifik berguna untuk optimasi.
Misalnya Anda punya beberapa punya struktur data yang hanya selalu ditambah saja di akhir. Struktur List akan sangat efisien untuk hal ini. Jika Anda sudah tahu tepatnya berapa data yang akan datang Anda bisa memakai array (atau std::vector di C++, atau java.util.Vector di Java). Tapi jika Anda tidak tahu, setiap kali array mencapai kapasitasnya, Anda perlu meresize memori (dan jika ternyata memori tidak cukup, tanpa sepengetahuan Anda kadang perlu ada penyalinan data ke lokasi memori yang baru). Jadi dalam kasus ini Anda bisa melihat bahwa List sederhana juga punya kegunaan.
Kesimpulannya adalah: mempelajari struktur data merupakan hal yang penting. Hanya di bidang yang sangat sempit saja kita tidak perlu mempelajari struktur data. Dan bahkan dalam bidang yang sempit itu, pemahaman struktur data akan bisa banyak membantu untuk membuat program yang lebih baik.

 STRUKTUR DATA QUEUE

Queue (antrian) adalah struktur data dimana data yang pertama kali dimasukkan adalah data yang pertama kali bisa dihapus. Atau bisa juga disebut dengan struktur data yang menggunakan mekanisme FIFO (First In First Out). Queue dalam kehidupan sehari-hari seperti antrian pada penjualan tiket kereta api, dimana orang yang pertama datang adalah orang yang pertama kali dilayani untuk membeli tiket.
Jika ada orangbaru yang datang akan membali tiket, maka posisinya berada pada urutan paling belakang dalam antrian tersebut. Orang yang berada pada posisi terakhir dalam antrian adalah yang terakhir kali dapat dilayani dan memperoleh tiket kereta api (kalau kurang beruntung, maka akan kehabisan tiket). Contoh lain adalah nasabah yang antri di teller bank, paket data yang menunggu untuk ditransmisikan lewat internet, antrian printer dimana terdapat antrian print job yang menunggu giliran untuk menggunakan printer, dsb. Istilah-istilah yang digunakan dalam queue (antrian)
Memasukkan data (insert) disebut juga dengan put, add, atau enqueue. Menghapus data (remove) biasa disebut dengan istilah delete, get, atau dequeue. Bagian belakang queue, dimana data bisa dimasukkan disebut dengan back, tail (ekor), atau end (akhir). Sedangkan bagian depan (front) queue dimana data bisa dihapus juga biasa disebut dengan istilah kepala (head).

Circular Queue
Di dunia nyata apabila seseorang sedang mengantri (misalnya antri tiket kereta api), apabila telah dilayani dan memperoleh tiket, maka ia akan keluar dari antrian dan orang-orang yang berada di belakangnya akan bergerak maju ke dapan. Kita bisa saja menggerakkan setiap item data ke depan apabila kita menghapus data yang terdepan, tetapi hal ini kurang efektif. Sebaliknya kita tetap menjaga setiap item data di posisinya, yang kita lakukan hanyalah merubah posisi front dan rear saja.
Yang menjadi permasalahan adalah apabila posisi rear berada pada bagian akhir dari array (atau pada nomor indeks yang terbesar). Meskipun ada bagian yang kosong di awal-awal array – karena mungkin data telah dihapus, data baru tidak bisa dimasukkan lagi karena rear-nya sudah tidak bisa bergerak lagi. Atau mungkinkah posisi rear nya bisa berpindah? Situasi seperti itu bisa dilihat seperti gambar berikut:

circular queueUntuk menghindari permasalahan seperti itu (tidak bisa memasukkan data baru) – meskipun queue-nya belum penuh, maka front dan rear-nya berputar (kembali) ke bagian awal array. Kejadian seperti ini dinamakan dengan circular queue (atau kadang-kadang disebut juga dengan istilah ring buffer). Kejadian seperti ini seperti terlihat pada gambar berikut:

Berikut Contoh Implementasi Antrian dalam Java :

Queue.java

class Queue
{
private int maxSize;
private long[] queArray;
private int front;
private int rear;
private int nItems;
//————————————————————–
public Queue(int s) // konstruktor
{
maxSize = s;
queArray = new long[maxSize];
front = 0;
rear = -1;
nItems = 0;
}
//————————————————————–
public void insert(long j) // letakkan item (data) di posisi belakang dari queue
{
if(rear == maxSize-1) //
rear = -1;
queArray[++rear] = j; //naikkan rear dan masukkan item (data) pada posisi rear yang baru
nItems++; //tambah satu item lagi
}

//————————————————————–
public long remove() // hapus item (data) yang berada pada posisi front
{
long temp = queArray[front++]; //dapatkan nilainya dan naikkan front
if(front == maxSize) //
front = 0;
nItems–; // item (data) berkurang satu
return temp;
}
//————————————————————–
public long peekFront() //
{

return queArray[front];
}
//————————————————————–
public boolean isEmpty() //benar jika queue-nya kosong
{
return (nItems==0);
}
//————————————————————–
public boolean isFull() // benar jika queue-nya penuh
{
return (nItems==maxSize);
}
//————————————————————–
public int size() // jumlah ietm (data) dalam queue
{
return nItems;
}
//————————————————————–
} // end class Queue

QueueApp.java

class QueueApp
{
public static void main(String[] args)
{
Queue theQueue = new Queue(5); // queue menampung 5 item (data)
theQueue.insert(10); // masukkan 4 item (data)
theQueue.insert(20);
theQueue.insert(30);
theQueue.insert(40);
theQueue.remove(); // hapus 3 item (data)
theQueue.remove(); // (10, 20, 30)
theQueue.remove();
theQueue.insert(50); // masukkan 4 item (data) lagi
theQueue.insert(60); // (wraps around)
theQueue.insert(70);
theQueue.insert(80);
while( !theQueue.isEmpty() ) // hapus dan tampilkan
{ // all items

long n = theQueue.remove(); // (
System.out.print(n);
System.out.print(“ “);
}
System.out.println(“”);
} // end main()
} // end class QueueApp

method insert()
Method insert() mengasumsikan bahwa queue tidak penuh (full). Kita tidak melihatnya dalam main(), tetapi kita bisa memanggil insert() hanya setelah memanggil isFull() dan memperoleh nilai kembalian yang salah. Pengisian data dengan cara menaikkan rear dan mengisikan data baru tersebut pada rear yang baru sekarang. Tetapi, jika rear berada di puncak array, pada maxSize-1, maka harus kembali ke posisi terbawah array sebelum penyisipan dilakukan. Caranya dengan memberi nilai rear=-1, sehingga jika terjadi kenaikan pada pada rear, maka rear akan menjadi 0, dasar dari array. Dan akhirnya, nItem bertambah.

Method remove()
method remove mengasumsikan queue-nya tidak kosong. Untuk meyakinkan bahwa queue-nya tidak kosong, anda harus memanggil method isEmpty(). Penghapusan selalu dimulai dengan memperoleh nilai pada front dan kemudian mengurangi front. Jika front-nya terletak pada akhir array, maka harus kembali ke 0. Kemudian nItems dikurangi.

Method peek()
untuk mendapatkan nilai pada front.

Method isEmpty(), isFull(), and size()
untuk mengecek nItems, apakah kosong atau penuh.

Struktur Data Stack 
Secara bahasa, Stack berarti tumpukan. Jika dikaitkan dengan struktur data, Stack berarti sekumpulan data yang organisasi atau strukturnya bersifat tumpukan atau menyerupai tumpukan.
Secara ilustrasi, stack dapat digambarkan dengan gambar di samping.
“Top “ merupakan pintu untuk keluar masuknya elemen – elemen stack. A, B, dan C merupakan suatukoleksi. Dari ilustrasi dapat digambarkan bahwa C merupakan elemen yang terakhir memasuki stack namunpertama keluar dari stack. Begitu sebaliknya dengan A. A merupakan elemen pertama yang memasukitumpukan namun terakhir saat keluar dari tumpukan.
Di dalam gambar juga terlihat urutan masuk dan keluar yang berkebalikan. Elemen yang masuk pertama akankeluar erakhir dan sebaliknya. Prinsip ini telah dikenal dalam struktur data dengan nama prinsip LIFO (Last In First Out).
Di dalam pengembangannya, stack dapat dikelompokkan menjadi dua bagian. Dua bagian tersebut yaitudan Double Stack. Single Stack
Single Stack
Single Stack atau Stack Tunggal adalah stack yang hanya terdiri dari satu koleksi. Bila stack inidirepresentasikan dengan array, maka pengisian dan penghapusan harus dilakukan bertahap dari indeksnya. TOP-
Di dalam proses single stack terdapat tiga macam proses utama, yaitu :
-          Inisialisasi
-          PUSH (Insert, Masuk, Simpan, Tulis)
-          POP (Delete, Keluar, Ambil, Baca, Hapus)
INISIALISASI
Proses inisialisasi merupakan proses awal yang dilakukan untuk menyimpan indeks penunjuk stack. Roses inidilakukan dengan intruksi :
top = -1;



PUSH
Proses push adalah proses memasukkan data baru ke stack indeks selanjutnya. Algoritma dasar proses PUSH adalah :
top = top + 1; array[top] = variable_tampung;

POP
Proses pop adalah proses mengeluarkan  / mengambil data dari stack dengan indeks yang disimpan padaAlgoritma dasar proses POP adalah : variable top.
variable_tampung = array[top]; top = top – 1;

Double Stack
Double Stack atau Stack Ganda adalah stack yang hanya terdiri dari dua single stack. Bila stack inidirepresentasikan dengan array, maka pengisian dan penghapusan harus melalui salah satu arah.
Di dalam proses double stack terdapat lima macam proses utama, yaitu :
-          Inisialisasi
-          PUSH1 (Proses Push untuk Single Stack pertama)
-          POP1 (Proses Pop untuk Single Stack pertama)
-          PUSH2 (Proses Push untuk Single Stack kedua)
-          POP2 (Proses Pop untuk Single Stack kedua)
Algoritma dasar masing – masing proses adalah sebagai berikut :
INISIALISASI
top1 = -1; top2 = MAX_ARRAY;
PUSH1
top1 = top1 + 1; array[top1] = variable_tampung;
POP1
variable_tampung = array[top1]; top1 = top1 – 1;
PUSH2
top2 = top2 – 1; array[top2] = variable_tampung;
POP2
variable_tampung = array[top2]; top2 = top2 + 1;
 

STRUKTUR DATA GRAPH
Graph merupakan struktur data yang paling umum. Jika struktur linear memungkinkan pendefinisian keterhubungan sikuensial antara entitas data, struktur data tree memungkinkan pendefinisian keterhubungan hirarkis, maka struktur graph memungkinkan pendefinisian keterhubungan tak terbatas antara entitas data.

Banyak entitas-entitas data dalam masalah-masalah nyata secara alamiah memiliki keterhubungan langsung (adjacency) secara tak terbatas demikian. Contoh: informasi topologi dan jarak antar kota-kota di pulau Jawa. Dalam masalah ini kota x bisa berhubungan langsung dengan hanya satu atau limaentitas-entitas data dalam masalah-masalah nyata secara alamiah memiliki keterhubungan langsung (adjacency) secara tak terbatas demikian. Contoh: informasi topologi dan jarak antar kota-kota di pulau Jawa. Dalam masalah ini kota x bisa berhubungan langsung dengan hanya satu atau lima kota lainnya. Untuk memeriksa keterhubungan dan jarak tidak langsung antara dua kota dapat diperoleh berdasarkan data keterhubungan-keterhubungan langsung dari kota-kota lainnya yang memperantarainya.

Representasi data dengan struktur data linear ataupun hirarkis pada masalah ini masih bisa digunakan namun akan membutuhkan pencarian-pencarian yang kurang efisien. Struktur data graph secara eksplisit menyatakan keterhubungan ini sehingga pencariannya langsung (straightforward) dilakukan pada strukturnya sendiri.

Masalah-masalah Graph
Masalah path minimum (Shortest path problem):
mencari route dengan jarak terpendek dalam suatu jaringan transportasi.

Masalah aliran maksimum (maximum flow problem):
menghitung volume aliran BBM dari suatu reservoir ke suatu titik tujuan melalui jaringan pipa.

Masalah pencariah dalam graph (graph searching problem):
mencari langkah-langkah terbaik dalam program permainan catur komputer.

Masalah pengurutan topologis (topological ordering problem):
menentukan urutan pengambilan mata-mata kuliah yang saling berkaitan dalam hubungan prasyarat (prerequisite).

Masalah jaringan tugas (Task Network Problem):
membuat penjadwalan pengerjaan suatu proyek yang memungkinkan waktu penyelesaian tersingkat.

Masalah pencarian pohon rentang minimum (Minimum Spanning Tree Problem):
mencari rentangan kabel listrik yang totalnya adalah minimal untuk menghubungkan sejumlah kota.

Travelling Salesperson Problem:
tukang pos mencari lintasan terpendek melalui semua alamat penerima pos tanpa harus mendatangi suatu tempat lebih dari satu kali.

Four-color problem:
dalam menggambar peta, memberikan warna yang berbeda pada setiap propinsi yang saling bersebelahan.


Definisi
Suatu graph didefinisikan oleh himpunan verteks dan himpunan sisi (edge). Verteks menyatakan entitas-entitas data dan sisi menyatakan keterhubungan antara verteks. Biasanya untuk suatu graph G digunakan notasi matematis
G = (V, E)

V adalah himpunan verteks dan E himpunan sisi yang terdefinisi antara pasangan-pasangan verteks. Sebuah sisi antara verteks x dan y ditulis {x, y}.

Suatu graph H = (V1, E1) disebut subgraph dari graph G jika V1 adalah himpunan bagian dari V dan E1 himpunan bagian dari E.

Digraph & Undigraph

Graph Berarah (directed graph atau digraph): jika sisi-sisi pada graph, misalnya {x, y} hanya berlaku pada arah-arah tertentu saja, yaitu dari x ke y tapi tidak dari y ke x; verteks x disebut origin dan vertex y disebut terminus dari sisi tersebut. Secara grafis maka penggambaran arah sisi-sisi digraph dinyatakan dengan anak panah yang mengarah ke verteks terminus, secara notasional sisi graph berarah ditulis sebagai vektor dengan (x, y).
graph di samping ini adalah suatu contoh Digraph G = {V, E}
dengan V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
dan E = {( (A,B),(A,C), (A,D), (A,F), (B,C), (B,H), (C,E), (C,G), (C,H), (C,I), (D,E), (D,F), (D,G), (D,K), (D,L), (E,F), (G,I), (G,K), (H,I), (I,J), (I,M), (J,K), (J,M), (L,K), (L,M)}.

Graph Tak Berarah (undirected graph atau undigraph): setiap sisi {x, y} berlaku pada kedua arah: baik x ke y maupun y ke x. Secara grafis sisi pada undigraph tidak memiliki mata panah dan secara notasional menggunakan kurung kurawal.
graph di samping ini adalah suatu contoh Undigraph G = {V, E}
dengan V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
dan E = { {A,B},{A,C}, {A,D}, {A,F}, {B,C}, {B,H}, {C,E}, {C,G}, {C,H}, {C,I}, {D,E}, {D,F}, {D,G}, {D,K}, {D,L}, {E,F}, {G,I}, {G,K}, {H,I}, {I,J}, {I,M}, {J,K}, {J,M}, {L,K}, {L,M}}.

Dalam masalah-masalah graph undigraph bisa dipandang sebagai suatu digraph dengan mengganti setiap sisi tak berarahnya dengan dua sisi untuk masing-masing arah yang berlawanan.
Undigraph di atas tersebut bisa dipandang sebagai Digraph G = {V, E}
dengan V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
dan E = { (A,B),(A,C), (A,D), (A,F), (B,C), (B,H), (C,E), (C,G), (C,H), (C,I), (D,E), (D,F), (D,G), (D,K), (D,L), (E,F), (G,I), (G,K), (H,I), (I,J), (I,M), (J,K), (J,M), (L,K), (L,M), (B,A), (C,A), (D,A), (F,A), (C,B), (H,B), (E,C), (G,C), (H,C), (I,C), (E,D), (F,D), (G,D), (K,D), (L,D), (F,E), (I,G), (K,G), (I,H), (J,I), (M,I), (K,J), (M,J), (K,L), (M,L)}

Selain itu, berdasarkan definisi ini maka struktur data linear maupun hirarkis adalah juga graph. Node-node pada struktur linear atupun hirarkis adalah verteks-verteks dalam pengertian graph dengan sisi-sisinya menyusun node-node tersebut secara linear atau hirarkis. Sementara kita telah ketahui bahwa struktur data linear adalah juga tree dengan pencabangan pada setiap node hanya satu atau tidak ada. Linear 1-way linked list adalah digraph, linear 2-way linked list bisa disebut undigraph.

Pengertian Struktur Data Linked List
Linked list (list bertaut) adalah salah satu struktur data dasar yang sangat fundamental dalam bidang ilmu komputer. Dengan menggunakan linked list maka programmer dapat menimpan datanya kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada linked list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian program (run-time).

Pada array, apabila programmer ingin menyimpan data, programmer diharuskan untuk mendefinisikan besar array terlebih dahulu, seringkali programmer mengalokasikan array yang sangat besar(misal 100). Hal ini tidak efektif karena seringkali yang dipakai tidak sebesar itu. Dan apabila programmer ingin menyimpan data lebih dari seratus data, maka hal itu tidak dapat dimungkinkan karena sifat array yang besarnya statik. Linked list adalah salah satu struktur data yang mampu menutupi kelemahan tersebut.

Secara umum linked list tersusun atas sejumlah bagian-bagian data yang lebih kecil yang terhubung (biasanya melalui pointer). Linked list dapat divisualisasikan seperti kereta, bagian kepala linked list adalah mesin kereta, data yang disimpan adalah gerbong, dan pengait antar gerbong adalah pointer.

-------- -------- --------
Mesin Data Data
-------- -------- --------
(kepala) ---> Pointer ---> Pointer --
-------- -------- --------

Programmer membaca data menyerupai kondektur yang ingin memeriksa karcis penumpang. Programmer menyusuri linked list melalui kepalanya, dan kemudian berlanjut ke gerbong (data) berikutnya, dan seterusnya sampai gerbong terakhir (biasanya ditandai dengan pointer menunjukkan alamat kosong (NULL)). Penyusuran data dilakukan secara satu persatu sehingga penyusuran data bekerja dengan keefektifan On. Dibandingkan array, ini merupakan kelemahan terbesar linked list. Pada array, apabilan programmer ingin mengakses data ke-n (index n), maka programmer dapat langsung mengaksesnya. Sedangkan dengan linked list programmer harus menyusuri data sebanyak n terlebih dahulu. 


STRUTUR DATA SORT

Sort adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu.
Pada umumnya terdapat 2 jenis pengurutan :
v Ascending (Naik)
v Descending (Turun)
Contoh :
Data Acak : 5 6 8 1 3 25 10
Terurut Ascending : 1 3 5 6 8 10 25
Terurut Descending : 25 10 8 6 5 3 1
Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai macam cara / metoda. Beberapa metoda diantaranya :
a) Buble / Exchange Sort
b) Selection Sort
c) Insertion Sort
d) Quick Sort
Bubble / Exchange Sort
Memindahkan elemen yang sekanag dengan elemen yang berikutnya, jika elemen sekarang > elemen berikutnya, maka tukar
Proses :
22 10 15 3 8 2
22 10 15 3 2 8
22 10 15 2 3 8
22 10 2 15 3 8
22 2 10 15 3 8
2 22 10 15 3 8
Langkah 1 :
Pengecekan dapat dimulai dari data paling awal atau paling akhir. Pada contoh di samping ini pengecekan di mulai dari data yang paling akhir. Data paling akhir dibandingkan dengan data di depannya, jika ternyata lebih kecil maka tukar. Dan pengecekan yang sama dilakukan terhadap data yang selanjutnya sampai dengan data yang paling awal.
Langkah 2 :
Proses di atas adalah pengurutan data dengan metoda bubble ascending.
Untuk yang descending adalah kebalikan dari proses diatas.
Berikut penggalan listing program Procedure TukarData dan Procedure Bubble Sort.
Procedure TukarData
Procedure TukarData(var a,b : word);
Var c : word;
Begin
c:=a;
a:=b;
b:=c;
end;
Procedure Bubble Sort Ascending
Procedure Asc_Bubble(var data:array; jmldata:integer);
Var i,j : integer;
Begin
For i:= 2 to jmldata do
For j:= jmldata downto I do
If data[j] <>
Tukardata (data[j], data[j-1]);
end;
Untuk pengurutan secara descending anda hanya perlu menggantikan baris ke-6 dengan berikut ini :
If data[j] > data[j-1] then
Selection Sort
Membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai dengan elemen yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar. Dan begitu seterusnya.