Академический Документы
Профессиональный Документы
Культура Документы
Queue (Antrian)
Queue pada Struktur Data atau antrian adalah sekumpulan data yang mana penambahan
elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan
penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan
atau front).
Pada Stack atau tumpukan menggunakan prinsipMasuk terakhir keluar pertamaatau LIFO
(Last In First Out), Maka pada Queue atau antrian prinsip yang digunakan adalah Masuk
Pertama Keluar Pertama atau FIFO (First In First Out).
Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, ex: antrian Mobil
diloket Tol, Antrian mahasiswa Mendaftar, dll.
Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi waktu(time-
sharing computer system) dimana ada sejumlah pemakai yang akan menggunakan sistem
tersebut secara serempak.
Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu
keluar di ujung satunya dimana membutuhkan variabel Head dan Tail ( depan/front,
belakang/rear).
Operasi-operasi Queue :
1. Create()
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail = -1
2. IsEmpty()
Untuk memeriksa apakah Antrian sudah penuh atau belum
Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama
dalam antrian) yang tidak akan berubah-ubah
Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu
menggunakan nilai Tail.
3. IsFull
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen
array pada C) berarti sudah penuh
4. Enqueue
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di
elemen paling belakang
Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail
terlebih dahulu
5. Dequeue()
Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian
Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1
Penggeseran dilakukan dengan menggunakan looping.
6. Clear()
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya
mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi
terbaca
7. Tampil()
Untuk menampilkan nilai-nilai elemen Antrian
Menggunakan looping dari head s/d tail
1. PENGERTIAN TREE
Kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang
membentuk layakya struktur sebuah pohon. Struktur pohon adalah suatu cara
sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-node dari
atas ke bawah. Suatu struktur data yang tidak linier yang
elemen-elemennya.
Deklarasi Pohon
Jika kita memperhatikan setiap simpul dalam pohon biner, kita bisa menyusun struktur data
yang tepat dari simpul-simpul tersebut. Kita dapat melihat bahwa dalam setiap simpul selalu
berisi dua buah pointer untuk menunjuk ke cabang kiri dan cabang kanan, dan informasi
yang akan disimpan dalamsimpul tersebut. Dengan memperhatikan hal ini, simpul dalam
pohon biner disajikan sebagai berikut:
Sesuai dengan gambar 7.1, maka deklarasi list yang sesuai adalah:
TypeInfo Info;
};
1. JENIS-JENIS TREE
BINARY TREE
Tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua sub
Sebuah pohon biner memiliki operasi traversal yaitu suatu kunjungan pada
suatu simpul tepat satu kali. Dengan melakukan kunjungan lengkap kita akan
memperoleh urutan informasi secara linier yang tersinpan di dalam pohon biner.
1. PREORDER
1. POSTORDER
#include<stdio.h>//header file
#include<conio.h>
/* Deklarasi struct */
printf(Data bertambah!);
else if(databaru < (*root)->data)//jika databaru kurang dari data node root
else if(databaru > (*root)->data)//jika databaru lebih dari data node root
(data ditampilkan dari node induk, node anak kiri, lalu node anak kanan)
*/
(data ditampilkan dari node anak kiri, node induk, lalu node anak kanan)
*/
(data ditampilkan dari node anak kiri, node anak kanan, lalu node induk)
*/
main(){
int pil, c;
pohon = NULL;
do{
int data;
printf(MENU\n);
printf(1. Tambah\n);
printf(5. Exit\n);
switch(pil){
case 1 :
printf(Data baru : );
scanf(%d, &data);
tambah(&pohon, data);
break;
case 2 :
if(pohon != NULL)
preOrder(pohon);
else
printf(Masih kosong!);
break;
case 3 :
if(pohon != NULL)
inOrder(pohon);
else
printf(Masih kosong!);
break;
case 4 :
if(pohon != NULL)
postOrder(pohon);
else
printf(Masih kosong!);
break;
getch();
printf(\n);
while(pil != 5);
HASIL
C. Binary Tree
Contoh Aplikasi Binary Tree :
1.Interface
2.Tampilan PreOrder
3.Tampilan InOrder
4.Tampilan PostOrder
Pohon biner
Dalam ilmu komputer, sebuah pohon biner (binary tree) adalah sebuah pohon struktur data
dimana setiap simpul memiliki paling banyak dua anak. Secara khusus anaknya dinamakan
kiri dan kanan. Penggunaan secara umum pohon biner adalah Pohon biner terurut.
Node
Sebuah Simpul dapat mengandung sebuah nilai atau suatu kondisi atau menggambarkan
sebuah struktur data terpisah atau sebuah bagian pohon itu sendiri. Setiap simpul dalam
sebuah pohon memiliki nol atau lebih simpul anak (child nodes), yang berada dibawahnya
dalam pohon (menurut perjanjian, pohon berkembang ke bawah, tidak seperti yang
dilakukannya di alam). Sebuah simpul yang memiliki anak dinamakan simpul ayah (parent
node) atau simpul leluhur (ancestor node) atau superior . Sebuah simpul paling banyak
memiliki satu ayah. Tinggi dari pohon adalah panjang maksimal jalan ke sebuah daun dari
simpul tersebut. Tinggi dari akar adalah tinggi dari pohon. Kedalaman dari sebuah simpul
adalah panjang jalan ke akarnya dari simpul tersebut.
Root Nodes
Simpul yang paling atas dalam pohon adalah akar (root node). Menjadi simpul teratas, simpul
akar tidak akan memiliki orang tua. Ini merupakan simpul di mana biasanya merupakan
tempat untuk memulai operasi dalam pohon (walaupun beberapa algoritma dimulai dengan
daun dan berakhir pada akar). Semua simpul yang lain dapat dicapai dari akar dengan
menelusuri pinggiran atau pranala. (Dalam definisi resmi, setiap jalan adalah khas). Dalam
diagram, ini secara khusus di gambar paling atas. Di beberapa pohon, seperti heap, akar
memiliki sifat khusus. Setiap simpul dalam sebuah pohon dapat dilihat sebagai akar dari sub
pohon yang berakar pada simpul tersebut.
Leaf Nodes
Internal Nodes
Sebuah simpul dalam adalah semua simpul dari pohon yang memiliki anak dan bukan
merupakan daun. Beberapa pohon hanya menyimpan data didalam simpul dalam, meskipun
ini mempengaruhi dinamika penyimpanan data dalam pohon. Sebegai contoh, dengan daun
yang kosong, seseorang dapat menyimpan sebuah pohon kosong dengan satu daun.
Bagaimanapun juga dengan daun yang dapat menyimpan data, tidak dimungkinkan untuk
menyimpan pohon kosong kecuali jika seseorang memberikan beberapa jenis penanda data di
daun yang menandakan bahwa daun tersebut seharusnya kosong (dengan demikian pohon itu
seharusnya kosong juga).
Seringkali, seseorang berkeinginan untuk mengunjungi simpul dalam pohon dan menjalankan
beberapa penyusunan perintahnya disana. Terdapat umum dimana simpul-simpuk tersebut
dapat dikunjungi, dan setiap simpul memiliki sifat-sifat yang berguna yang dimanfaatkan
dalam algoritma yang berdasarkan pada pohon biner.
1. Untuk menjelajahi sebuah pohon biner yang tidak kosong di preorder, melakukan operasi
berikut secara rekursif pada setiap node, dimulai dengan simpul akar:
1. Kunjungi akar.
2. Melintasi subpohon kiri.
3. Melintasi subpohon kanan.
2. Untuk menjelajahi sebuah pohon biner tidak kosong di inorder (simetris), melakukan
operasi berikut secara rekursif pada setiap node:
Contoh
D. Sorting
Sorting adalah proses menyusun elemen elemen dengan tata urut tertentu dan proses
tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi
perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif.
Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan secara
ascending demi kenyamanan dalam penelusuran data.
Beberapa macam algoritma sorting telah dibuat karena proses tersebut sangat mendasar dan
sering digunakan. Oleh karena itu, pemahaman atas algoritma algoritma yang ada sangatlah
berguna.
Proses pengurutan dengan menggunakan metode selection sort secara terurut naik adalah :
1. Mencari data terkecil dari data pertama sampai data terakhir, kemunian di tukar posisinya
dengan data pertama.
2. mencari data terkecil dari data kedua sampai data terakhir, kemudian di tukar dengan
posisinya dengan data kedua.
3. mencari data terkecil dari data ketiga sampai data terakhir, kemudian di tukar posisinya
dengan data ketiga
4. dan seterusnya sampai semua data turut naik. apabila terdapat n buah data yang akan di
urutkan, maka membutukan (n - 1) langkah pengurutan, dimana data terakhir yaitu data ke-n
tidak perlu di urutkan karena hanya tinggal satu satunya.
Contoh:
2. Bubble Sort
Konsep Buble Sort
Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh gelembung sabun yang
berada dipermukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat
jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas dipakai
pada pengurutan gelembung.
Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan dengan cara
melakukan penukaran data dengan tepat disebelahnya secara terus menerus sampai bisa
dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada perubahan
berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci akan
dengan lambat menggelembung ke posisinya yang tepat
5.Quick Sort
Algoritma sortir yang efisien yang ditulis oleh C.A.R. Hoare pada 1962. Dasar strateginya
adalah memecah dan menguasai. Quicksort dimulai dengan menscan daftar yang disortir
untuk nilai median. Nilai ini, yang disebut tumpuan (pivot), kemudian dipindahkan ke satu
sisi pada daftar dan butir-butir yang nilainya lebih besar dari tumpuan di pindahkan ke sisi
lain.
Contoh
6. Metode Shell (Shell Sort)
Metode ini disebut juga dengan metode pertambahan menurun (diminishing
increment). Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959, sehingga
sering disebut dengan Metode Shell Sort. Metode ini mengurutkan data dengan cara
membandingkan suatu data dengan data lain yang memiliki jarak tertentu, kemudian
dilakukan penukaran bila diperlukan
Contoh:
7. Radix sort
Ide dasar dari metode Radix sort ini adalah
mengkategorikan data-data menjadi sub kumpulan
subkumpulan data sesuai dengan nilai radix-nya,
mengkonkatenasinya, kemudian
mengkategorikannya kembali berdasar nilai radix
contoh:
E. Searching
1. Pengertian Searching
Pencarian (Searching) merupakan proses yang fundamental dalam pemrograman, guna
menemukan data (nilai) tertentu di dalam sekumpulan data yang bertipe sama. Fungsi
pencarian itu sendiri adalah untuk memvalidasi (mencocokkan) data.
#include
void main()
{
clrscr();
int bil[5];
int jml_bil,nilai_max;
int i;
/* input data */
cout<<"masukkan jumlah bilangan kurang dari 5 : ";cin>>jml_bil;
for(i=0;i
{
cout<<"bilangan ke"<<i+1<<":";cin>>bil[i];
}
getch();
Algoritma dari
Proses yang terjadi pada pencarian dengan metode ini adalah sebagai berikut :
</nilai_max<</i+1<<":";cin>
F. Graph
Suatu graph didefinisikan oleh himpunan verteks dan himpunan sisi (edge). keterhubungan
antara verteks. Biasanya untuk suatu graph G digunakan notasi matematis. Verteks
menyatakan entitas-entitas data dan sisi menyatakan G = (V, E) Dimana :
G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
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. Cara pendefinisian lain untuk graph adalah dengan menggunakan himpunan
keterhubungan langsung Vx. Pada setiap verteks x terdefinisi Vx sebagai himpunan dari
verteks-verteks yang adjacent dari x. Secara formal: Vx = {y | (x,y) -> E}
Pokok bahasan sebelumnya menjelaskan bahwa graf menampilkan visualisasi data dan
hubungannya. Sedangkan jika berbicara masalah implementasi struktur data graf itu sendiri,
isu utama yang dihadapi adalah bagaimana informasi itu disimpan dan dapat diakses dengan
baik, ini yang dapat disebut dengan representasi internal.
Secara umum terdapat dua macam representasi dari struktur data graf yang dapat
diimplementasi. Pertama, disebut adjacency list, dan diimplementasi dengan menampilkan
masing-masing simpul sebagai sebuah struktur data yang mengandung senarai dari semua
simpul yang saling berhubungan. Yang kedua adalah representasi berupa adjacency matrix
dimana baris dan kolom dari matriks (jika dalam konteks implementasi berupa senarai dua
dimensi) tersebut merepresentasikan simpul awal dan simpul tujuan dan sebuah entri di
dalam senarai yang menyatakan apakah terdapat sisi di antara kedua simpul tersebut.
Adjacency List
Dalam teori graf, adjacency list merupakan bentuk representasi dari seluruh sisi atau busur
dalam suatu graf sebagai suatu senarai. Simpul-simpul yang dihubungkan sisi atau busur
tersebut dinyatakan sebagai simpul yang saling terkait. Dalam implementasinya, hash table
digunakan untuk menghubungkan sebuah simpul dengan senarai berisi simpul-simpul yang
saling terkait tersebut.
Graf pada gambar diatas dapat dideskripsikan sebagai senarai {a,b},{a,c},{b,c}. Dan
representasi adjacency list dapat digambarkan melalui tabel di bawah ini.
Salah satu kekurangan dari teknik representasi ini adalah tidak adanya tempat untuk
menyimpan nilai yang melekat pada sisi. Contoh nilai ini antara lain berupa jarak simpul,
atau beban simpul.
Adjacency Matrix
Adjacency Matrix merupakan representasi matriks nxn yang menyatakan hubungan antar
simpul dalam suatu graf. Kolom dan baris dari matriks ini merepresentasikan simpul-simpul,
dan nilai entri dalam matriks ini menyatakan hubungan antar simpul, apakah terdapat sisi
yang menghubungkan kedua simpul tersebut. Pada sebuah matriks nxn, entri non-diagonal aij
merepresentasikan sisi dari simpul i dan simpul j. Sedangkan entri diagonal aii menyatakan
sisi kalang(loop) pada simpul i.
Gambar diatas merupakan adjacency matrix yang berkorelasi dengan graf tak berarah pada
gambar 4. Kolom dan baris pada matriks merupakan simpul- simpul berlabel 1-6. Kelebihan
dari adjacency matrix ini adalah elemen matriksnya dapat diakses langsung melalui indeks,
dengan begitu hubungan ketetanggan antara kedua simpul dapat ditentukan dengan langsung.
Sedangkan kekurangan pada representasi ini adalah bila graf memiliki jumlah sisi atau busur
yang relative sedikit, karena matriksnya bersifat jarang yaitu hanya mengandung elemen
bukan nol yang sedikit. Kasus seperti ini merugikan, karena kebutuhan ruang memori untuk
matriks menjadi boros dan tidak efisien karena komputer menyimpan elemen 0 yang tidak
perlu.
G. Matriks
Matriks adalah struktur data dengan memori internal.Struktur ini praktis untuk di pakai
memakan memory ! (Matriks integer 100 x 100 memakan 10000 x tempat penyimpanan
integer).
Sering dikatakan bahwa matriks adalah tabel atau array berdimensi 2.Tetapi patut di
perhatikan,bahwa pengertian dimensi 2, baris dan kolom adalah dalam pemikiran
kita.Pengaturan letak elemen matriks dalam memori komputer selalu tetap sebagai deretan sel
linier.Pengertian 2 dimensi ini hanya untuk mempermudah pemrograman dalam mendesain
programnya.Maka matriks adalah salah satu contoh struktur data lojik.
1 2 3 4
5 6 7 8
9 10 11 12
Dapat disimpan secara linier dan kontigu dengan dua alternatif sebagai berikut :
1. Perbaris
1 2 3 4 5 6 7 8 9 10 11 12
1. Perkolom
1 5 9 2 6 10 3 7 11 4 8 12
Banyaknya baris dan banyaknya kolom biasanya disebut sebagai ukuran matriks.
Matriks adalah struktur data yang statik,yaitu ukuran maksimum memorinya di tentukan dari
awal.Batas indeks baris dan kolom harus terdefinisi dengan pasti saat dideklarasikan dan tak
dapat di ubah-ubah.Seringkali dalam persoalan semacam ini ,kita memesan memory secara
berlebihan untuk alasan terjaminnya memory yang tersedia,dan hanya memakai sebagian
saja.Biasanya memori yang di pakai (selanjutnya sisebut efektif) adalah yang kiri atas
seperti ilustrasi sebagai berikut,dimana pada saat deklarasi,memori maksimum yang di
sediakan adalah 10 x 10,dan hanya akan di pakai untuk 3 x 4.
Pendeklarasian matriks
Sebelum matriks digunakan untuk menyimpan data, terlebih dahulu matriks harus
dideklarasikan. Mendeklarasikan matriks artinya menentukan nama matriks, tipe datanya dan
ukuran matriks. Pendeklarasian matriks di dalam teks algoritma di tulis di dalam bagian
deklarasi. Pendeklarasian matriks itu dapat memudahkan membuat suatu program dengan
cara pendeklarasian matriks tersebut.
Definisi Matriks
Matriks atau array dua dimensi adalah struktur data yang mengacu pada sebuah/sekumpulan
elemen yang di akses.Berbeda dengan larik,maka pada matriks index terdiri dari dua bagina
yaitu index baris dan index kolom.Setiap elemen matriks dapat di akses melalui
indeknya,misalanya mengisi elemen matriks yang baris ke 2 dan kolom ke 1 dengan nilai
100,maka cara mengisinya adalah A(2,1) 100.Contoh matriks bernama A dengan ukuran
2 x 3 (yang memiliki indeks baris 2 dan indeks kolom 3) :
CONTOH CODING :
HASIL CODING :
H. Multi-List (Daftar)
List linier adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu,
yang setiap elemennya terdiri dari 2 bagian. sebuah list linier dikenali dengan (1) elemen
pertamanya, biasanya melalui alamat elemen pertama yang disebut (first); (2) Alamat elemen
berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen, yang dapat diakses
melalui field next; (3) Setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat
diacu. Untuk mengacu sebuah elemen, alamat harus terdefinisi. Dengan alamat tersebut
informasi yang tersimpan pada elemen list dapat diakses; (4) Elemen terakhirnya.