Anda di halaman 1dari 32

A.

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).

Karakteristik Queue atau antrian :


1. elemen antrian
2. front (elemen terdepan antrian)
3. tail (elemen terakhir)
4. jumlah elemen pada antrian
5. status antrian

Operasi pada Queue atau antrian


1. tambah(menambah item pada belakang antrian)
2. hapus (menghapus elemen depan dari antrian)
3. kosong( mendeteksi apakah pada antrian mengandung elemen atau tidak)

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

B. Tree (Struktur Pohon)

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

merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip

sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-node dari
atas ke bawah. Suatu struktur data yang tidak linier yang

menggambarkan hubungan yang hirarkis (one-to-many) dan tidak linier antara

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:

typedef char TypeInfo;

typedef struct Simpul *Tree;


struct Simpul {

TypeInfo Info;

tree Kiri, /* cabang kiri */

Kanan; /* cabang kanan */

};

ISTILAH DALAM TREE

1. JENIS-JENIS TREE

BINARY TREE

Tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua sub

pohon dan kedua subpohon harus terpisah.


Kelebihan struktur Binary Tree :

Mudah dalam penyusunan algoritma sorting


Searching data relatif cepat
Fleksibel dalam penambahan dan penghapusan data
1. KUNJUNGAN PADA POHON BINER

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.

Terdapat tiga jenis kunjungan pada pohon biner, yaitu :

1. PREORDER

Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :

Cetak isi simpul yang dikunjungi.

Kunjungi cabang kiri.

Kunjungi cabang kanan.

Prosedur untuk melakukan traversal secara PREORDER adalah sebagai berikut:


1. INORDER

Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :

Kunjungi cabang kiri.

Cetak isi simpul yang dikunjungi.

Kunjungi cabang kanan.

Prosedur untuk melakukan traversal secara INORDER adalah sebagai berikut:

1. POSTORDER

Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :

Kunjungi cabang kiri.

Kunjungi cabang kanan.

Cetak isi simpul yang dikunjungi

BERIKUT MERUPAKN CONTOH PROGRAMNYA

#include<stdio.h>//header file

#include<conio.h>

/* Deklarasi struct */

typedef struct Node{

int data; //data pada tree

Node *kiri; //penunjuk node anak kiri

Node *kanan; //penunjuk node anak kanan


};

/* Fungsi untuk memasukkan data ke dalam tree */

void tambah(Node **root, int databaru){

if((*root) == NULL){ //jika pohon/subpohon masih kosong

Node *baru;//node baru dibentuk

baru = new Node;//berdasarkan struct Node

baru->data = databaru; //data node baru diisi oleh variabel databaru

baru->kiri = NULL;//penunjuk kiri node baru masih kosong

baru->kanan = NULL;//penunjuk kanan node baru masih kosong

(*root) = baru; //node pohon (root) diletakkan pada node baru

(*root)->kiri = NULL;//penunjuk kiri node root masih kosong

(*root)->kanan = NULL; //penunjuk kanan node root masih kosong

printf(Data bertambah!);

else if(databaru < (*root)->data)//jika databaru kurang dari data node root

tambah(&(*root)->kiri, databaru);//tambahkan databaru pada subpohon kiri

else if(databaru > (*root)->data)//jika databaru lebih dari data node root

tambah(&(*root)->kanan, databaru); //tambahkan databaru pada subpohon kanan

else if(databaru == (*root)->data)//jika databaru sama dengan data node root

printf(Data sudah ada!);//databaru tidak dapat ditambahkan pada tree

/* Fungsi untuk menampilkan data secara pre-order

(data ditampilkan dari node induk, node anak kiri, lalu node anak kanan)

*/

void preOrder(Node *root){


if(root != NULL){//jika pohon/subpohon tidak kosong

printf(%d , root->data);//menampilkan data node yang dikunjungi

preOrder(root->kiri);//mengunjungi node anak kiri

preOrder(root->kanan); //mengunjungi node anak kanan

/* Fungsi untuk menampilkan data secara in-order

(data ditampilkan dari node anak kiri, node induk, lalu node anak kanan)

*/

void inOrder(Node *root){

if(root != NULL){//jika pohon/subpohon tidak kosong

inOrder(root->kiri);//mengunjungi node anak kiri

printf(%d , root->data);//menampilkan data node yang dikunjungi

inOrder(root->kanan);//mengunjungi node anak kanan

/* Fungsi untuk menampilkan data secara post-order

(data ditampilkan dari node anak kiri, node anak kanan, lalu node induk)

*/

void postOrder(Node *root){

if(root != NULL){//jika pohon/subpohon tidak kosong

postOrder(root->kiri); //mengunjungi node anak kiri

postOrder(root->kanan);//mengunjungi node anak kanan

printf(%d , root->data); //menampilkan data node yang dikunjungi


}

main(){

int pil, c;

Node *pohon, *t;

pohon = NULL;

do{

int data;

printf(MENU\n);

printf(1. Tambah\n);

printf(2. Lihat Pre-Order\n);

printf(3. Lihat In-Order\n);

printf(4. Lihat Post-Order\n);

printf(5. Exit\n);

printf(Pilihan : ); scanf(%d, &pil);

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

9, 14, 19, 67 dan 76 adalah daun.


Semua simpul yang berada pada tingkat terendah dari pohon dinamakan daun (leaf node).
Sejak mereka terletak pada tingkat paling bawah, mereka tidak memiliki anak satupun.
Seringkali, daun merupakan simpul terjauh dari akar. Dalam teori grafik, sebuah daun adalah
sebuah sudut dengan tingkat 1 selain akar (kecuali jika pohonnya hanya memiliki satu sudut;
maka akarnya adalah daunnya juga). Setiap pohon memiliki setidaknya satu daun.
Dalam pohon berdasarkan genetic programming sebuah daun (juga dibilang terminal) adalah
bagian terluar dari sebuah program pohon. Jika dibandingkan dengan fungsinya atau simpul
dalam, daun tidak memiliki argumen. Di banyak kasus dalam daun-GP input ke programnya.

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).

Metode Traversal Pohon Biner

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:

1. Melintasi subpohon kiri.


2. Kunjungi akar.
3. Melintasi subpohon kanan.

3. Untuk menjelajahi sebuah pohon biner tidak kosong di postorder, melakukan


operasi berikut secara rekursif pada setiap node:

1. Melintasi subpohon kiri.


2. Melintasi subpohon kanan.
3. Kunjungi akar.

Contoh

Di Dalam Pohon Binary ini jika disusun secara :


Penyusunan Secara PreOrder ( Belum Disusun ) : F, B, A, D, C, E, G, I, H (root,
left, right)
Penyusunan Secara InOrder : A, B, C, D, E, F, G, H, I (left, root, right)
Penyusunan Secara PostOrder: A, C, E, D, B, H, I, G, F (left, right, root)
3. Contoh Jika Dimasukkan kedalam bentuk Logika Stack :

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.

1. Selection Sort (Ascending):


Pengurutan dilakukan dengan memilih elemen terbesar dan menempatkan pada posisinya,
kemudian mencari element terbesar berikutnya dan menempatkan pada tempatnya, dan
seterusnya.

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

contoh kasus bubble sort


3. Metode Penyisipan Langsung (Straight Insertion Sort) / Insertion sort
Ilustrasi :
Data dicek satu per satu mulai dari yang kedua sampai dengan yang terakhir. Apabila
ditemukan data yang lebih kecil daripada data sebelumnya, maka data tersebut disisipkan
pada posisi yang sesuai. Akan lebih mudah apabila membayangkan pengurutan kartu.
Pertama-tama anda meletakkan kartu-kartu tersebut di atas meja, kemudian melihatnya
dari kiri ke kanan. Apabila kartu di sebelah kanan lebih kecil daripada kartu di sebelahkiri,
maka ambil kartu tersebut dan sisipkan di tempat yang sesuai.
Contoh:
4.Metode Penggabungan (Merge Sort)
Metode penggabungan biasanya digunakan pada pengurutan berkas. Prinsip dari
metode penggabungan sebagai berikut : mula-mula diberikan dua kumpulan data yang
sudah dalam keadaan urut. Kedua kumpulan data tersebut harus dijadikan satu table
sehingga dalam keadaan urut.
Contoh:

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.

2. Metode pencarian dibagi menjadi 2, yaitu:


1. Metode Pencarian Beruntun
Konsep yang digunakan dalam metode ini adalah membandingkan data-data yang ada dalam
kumpulan tersebut, mulai dari elemen pertama sampai elemen ditemukan, atau sampai
elemen terakhir.
2. Metode Pencarian Bagi Dua (Binary Search)
Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau menurun).
Metode ini lebih cepat dibandingkan metode pencarian beruntun. Data yang sudah terurut
menjadi syarat mutlak untuk menggunakan metode ini.
Konsep dasar metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data
yang berada pada elemen paling tengah bernilai sama, lebih dari atau kurang dari nilai data
yang akan dicari. Jika bernilai sama, maka langsung data yang dicari ditemukan. Jika data di
elemen terurut naik, maka jika data yang berada di tengah kurang dari data yang dicari, maka
pencarian selanjutnya berkisar di elemen tengah ke kanan, dan begitu seterusnya sampai
ketemu atau tidak sama sekali. Dan sebaliknya untuk nilai data yang berada di tengah lebih
dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kiri, dan
begitu seterusnya sampai ketemu atau tidak sama sekali. Dan demikian sebaliknya untuk data
yang terurut menurun. Dalam hal ini tentukan indeks paling awal dan indeks paling akhir,
untuk membagi 2 elemen tersebut.
Indeks awal = i, dimana nilai i, pada awalnya bernilai 0;
Indeks akhir = j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elemen.

Contoh implementasi searching

#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];
}

/* menentukan nilai max */


nilai_max=bil[0];
for(i=0;i
{
if (bil[i]>nilai_max)
{
nilai_max=bil[i];
}
}

/* mencetak nilai max */


cout<<"nilai maksimum : "<<nilai_max<
cout<

getch();

Algoritma dari

Proses yang terjadi pada pencarian dengan metode ini adalah sebagai berikut :

1. Membaca Array data


2. Apabila Array belum terurut maka array diurutkan terlebih dahulu.
3. Menentukan data yang akan dicari
4. Menentukan elemen tengah dari array
5. Jika nilai elemen tengah sama dengan data yang dicari, maka pencarian berhenti.
6. Jika elemen tengah tidak sama dengan data yang dicari maka :
1. Jika nilai elemen tengah > data yang dicari maka pencarian dilakukan pada setengah array
pertama.
2. Jika nilai elemen tengah lebih kecil dari pada data yang dicari maka pencarian dilakukan
pada setengah array berikutnya.

</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}

Dalam digraph didefinisikan juga terminologi-terminologi berikut ini.Predesesor dari suatu


verteks x (ditulis Pred(x)) adalah himpunan semua vertex yang adjacent ke x. Suksesor dari
verteks x (ditulis Succ(x)) adalah himpunan

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.

Tabel 1. Representasi Adjacency List


Vertex Adjacency Array of Adjacent
a adjacent to b,c
b adjacent to a,c
c adjacent to a,b

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.

Contoh : untuk matriks 3 x 4 sebagai berikut :

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.

Contoh : matriks berukuran 4 x 5 mempunyai baris sebanyak 4 dam kolom sebanyak


5,sehingga dapat menyimpan 20 elemen.Ada beberapa bahasa pemrograman yang meminta
ukuran matriks pada pendefinisian,ada yang meminta penomoran minimum dan maksimum
dari baris dan kolom.Pada notasi algoritmik yang kita pakai,cara kedua yang akan di
pakai,sebab ukuran matriks dapat di dedukasi dari penomoran.

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) :

Elemen Matriks : A[1,1], A[1,2], A[1,3], A[2,1], A[2,2], A[2,3]

Indeks baris dari Matriks A : 1, 2

Indeks kolom dari Matriks : 1, 2, 3

Mengisi elemen Matriks : A[2,1] 100

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.