STRUKTUR DATA
Disusun oleh:
Muhammad Farhan Musthafa 20562020021
Koing Suryo Nugroho 20562020020
Muhammad Rizqy Alim 20562020028
I
BAB I
SINGLE LINKED LIST
B. Penjelasan Method
a. Add :
Untuk menambahkan data yang ingin dimasukan.
b. Set :
Tipe data abstract dimana digunakan untuk menyimpan value tertentu.
Value ini tidak tersimpan dalam order tetapi tidak seharusnya menjadi
pengulangan value didalam set.
c. Get :
Berfungsi menghasilkan suatu nilai dari perhitungan.
d. IndexOf :
Mengembalikan posisi pemunculan pertama dari nilai yang ditentukan
dalam sebuah string.
e. LastIndexOf :
Mengembalikan posisi pemunculan terakhir dari nilai yang ditentukan
dalam sebuah string.
f. Remove(index) :
Mengapus data pada array dapat dilakukan berdasarkan index ataupun
langsung tertuju pada data apa yang akan kita hapus.
g. Remove(Object) :
Mengapus data pada array dapat dilakukan berdasarkan object ataupun
langsung tertuju pada data apa yang akan kita hapus.
h. ToString :
Mengubah nomor menjadi string.
1
BAB II
BINARY TREE
Sebuah tree dengan syarat bahwa tiap node hanya boleh memiliki
maksimal 2 subtree yang disebut sebagai subpohon kiri (left subtree) dan
subpohon kanan (right subtree) dan kedua subtree tersebut harus terpisah,
atau dengan kata lain tiap node dalam binary tree hanya boleh memiliki
paling banyak 2 child.
B. Penjelasan Method
a. Membangun Tree :
Membangun bentuk struktur bukan linier yang menggambarkan bentuk
hirarki antara elemen-elemen.Tree biasanya terdiri dari akar dan node-
node yang berada dibawah akar.
b. Traversal tree InOrder, PostOrder, PreOrder :
mengacu pada proses mengunjungi setiap simpul pohon setidaknya
sekali. Tidak seperti struktur data linier dasar seperti array. Jika
akarnya dikunjungi sebelum sub pohonnya, ini merupakan preorder,
jika akarnya dikunjungi sesudah sub pohonnya ini merupakan
postorder sedangkan akarnya dikunjungi diantara sub pohonnya
dinamakan inorder.
c. Traversal Tree inorder,postorder, dan preorder non rekirsif :
Dalam rekursif penyelesaiannya dilakukan dengan memanggil fungsi
atau prosedur diatasnya, jika untuk mencari non-rekursif
penyelesaiannya memanfaatkan stack. Perbandingan ini didasarkan
kompleksitas beserta kelebihan dan kekurangan pada masing-masing
algoritma.
d. Ketinggian Tree :
Adalah level tertinggi dari tree ditambah 1.
2
e. Copy Tree :
Mencopy binary tree menggunakan postorder scan menduplikat tree
dari bawah ke atas.
f. Jumlah Node :
Jumlah Node terbagi menjadi dua yaitu Depth of node dan Height of
node. Depth of node adalah jumlah edge dan root ke node, sedangkan
Height of node adalah jumlah edge terpanjang dari node ke leaf.
3
BAB III
BINARY SEARCH TREE
B. Penjelasan Method
4
BAB IV
GRAPH
A. Pengertian Graph
B. Penjelasan Method
a. Membuat Graph :
Membuat kumpulan node (simpul) di dalam bidang data dimensi
yang dihubungkan dengan sekumpulan garis.
b. Strongly atau Weakly :
Strongly membentuk partisi menjadi subgraph yang terhubung
dengan sendirinya. Bisa juga untuk menguji koneksivitas dari
grafik, atau untuk menemukan komponen yang terhubung.
c. Connected, Disconnected atau Completes :
Connected merupakan subgraph yang dimana setiap dua simpul
terhubung satu sama lain oleh jalur. Disconnected merupakan
graph yang tidak dapat terhubung satu sama lain pada jalurnya.
Completes adalah ketika semua node terhubung ke semua node.
5
BAB V
TRAVERSAL GRAPH
A. Pengertian Traversal Graph
B. Penjelasan Method
a. Membuat Graph :
Membuat kumpulan node (simpul) di dalam bidang data dimensi
yang dihubungkan dengan sekumpulan garis.
b. Breadth Firstt Search :
Pencarian pertama yang luas menggunakan antrian untuk melintasi
grafik dengan cara yang sama. Node awal ditambahkan ke antrian
untuk memulai. Asalkan antriannya tidak kosong, nodes itu
disingkirkan dan para tetangganya tidak dikunjungi akan
ditambahkan ke dalam antrian, karena sebuah grafik bisa berisi
siklus, seperangkat hash dikunjungi. Hanya ingin memanbahkan
node yang tidak dikunjungi dalam antrian.
c. Dept First Search :
Kedalaman pencarian pertama adalah kebaikan dari FBS. Ini
menggunakan tumpukan sebagai pengganti untuk melintasi grafik.
Node awal ditekan ke tumpukan . selama tumpukan itu tidak kosong,
node-nya akan terbuka. Grafik ini mendalam karena node yang
muncul dari tumpukan adalah yang paling baru didorong, sama
seperti BFS.
6
LAMPIRAN
Soal 1
Algoritma
benda.add( "Sapu");
System.out.println("Benda Baru: ");
System.out.println("" + benda);
System.out.println ("");
7
Algoritma :
Algoritma :
8
benda.removeFirst();
System.out.println("Hapus Depan : ");
System.out.println("" +benda +" Total :"
+benda.size());
System.out.println ("");
benda.removeLast();
System.out.println("Hapus Belakang : ");
System.out.println("" +benda +" Total :"
+benda.size());
System.out.println ("");
benda.remove(3);
System.out.println("Hapus: " +benda);
}
}
Algoritma :
9
Soal 2
Binarty Tree
a. Membangun Tree.
b. Traversal tree inorder, postorder, dan preorder.
c. Traversal tree inorder, postorder, dan preorder non rekrusif.
d. Ketinggian tree.
e. Copy Tree.
f. Jumlah Node.
Algoritma
import static
uasfarhankoingalim.TreeApp.getHeight;
class TreeNode {
int data;
TreeNode left, right;
Algoritma :
10
public void insert(TreeNode input){
if (isEmpty()){
root = input;
} else{
TreeNode current = root;
TreeNode parent = null;
boolean onLeft = true;
while(current != null){
parent = current;
if(current.data < input.data){
current = current.right;
onLeft = false;
}else if(current.data input.data){
current = current.left;
onLeft = true;
}else{
System.out.println("Data "+input.data+" Telah Ada");
break;
}
}
if(onLeft){
parent.left = input;
}else{
parent.right = input;
}
}
}
11
}
public void postOrder(){
postOrder(root);
}
public void preOrder(TreeNode akar){
if(akar != null){
System.out.print(akar.data+ " ");
preOrder(akar.left);
preOrder(akar.right);
}
}
public void inOrder(TreeNode akar){
if(akar != null){
inOrder(akar.left);
System.out.print(akar.data+ " ");
inOrder(akar.right);
}
}
public void postOrder(TreeNode akar){
if(akar != null){
postOrder(akar.left);
postOrder(akar.right);
System.out.print(akar.data+ " ");
}
}
Algoritma :
12
public TreeNode search(int key){
TreeNode node = null;
TreeNode current = root;
while(current != null){
if(current.data == key){
return node;
}else{
if(current.data < key){
current = current.right;
}else{
current = current.left;
}
}
}
return node;
}
public static int getHeight (TreeNode node) {
if (node == null)
return 3;
else{
int a=getHeight(node.left);
int b=getHeight(node.right);
if (a>b)
return a+1;
else
return b+1;
}
}
}
public class Binarytree {
public static void main(String[] args) {
TreeApp tree = new TreeApp();
TreeNode node;
node = new TreeNode(350);
tree.insert(node);
node = new TreeNode(150);
tree.insert(node);
node = new TreeNode(50);
tree.insert(node);
node = new TreeNode(300);
tree.insert(node);
node = new TreeNode(450);
tree.insert(node);
13
node = new TreeNode(100);
tree.insert(node);
node = new TreeNode(200);
tree.insert(node);
node = new TreeNode(400);
tree.insert(node);
node = new TreeNode(250);
tree.insert(node);
node = new TreeNode(500);
tree.insert(node);
System.out.print("\nPreOrder Traversal :
");
tree.preOrder();
System.out.print("\nInOrder Traversal :
");
tree.inOrder();
System.out.print("\nPostOrder Traversal :
");
tree.postOrder();
System.out.println("");
System.out.println("Height : " +getHeight
(node));
}
}
Algoritma :
14
Soal 3
Algoritma
15
Algoritma :
Pertama kami membuat inputan yang berisi int data node kiri dan node
kanan. Lalu buat akar biner dengan perintah public Node root;.
16
//Jika data lebih besar dari data saat ini,
simpul akan disisipkan di sebelah kanan pohon
else {
current = current.right;
if(current == null) {
parent.right = newNode;
return;
}
}
}
}
}
Algoritma :
Membuat perintah insert, digunakan untuk menambah node baru pada
binary tree. Atur titik simpul kearah akar pohon, lacak simpul parent.
Apabila data lebih kecil dari yang saat ini, maka simpul akan di sisipkan
kekiri. Apabila lebih dari data yang saat ini, simpul disisipkan ke kanan.
17
//nilai lebih kecil dari data simpul, cari
nilai di subpohon kiri
if(value < node.data)
node.left = deleteNode(node.left, value);
18
//kemudian cari simpul minimum dari subpohon
kanan
Node temp = minNode(node.right);
// tukar data antara node dan temp
node.data = temp.data;
//Hapus simpul duplikat dari subpohon kanan
node.right = deleteNode(node.right, temp.data);
}
}
return node;
}
}
//inorder() akan melakukan traversal
inorder pada pohon pencarian biner
public void inorderTraversal(Node node) {
//Periksa apakah pohon kosong
if(root == null){
System.out.println("Tree is empty");
return;
}
else {
if(node.left!= null)
inorderTraversal(node.left);
System.out.print(node.data + " ");
if(node.right!= null)
inorderTraversal(node.right);
}
}
19
public static void main(String[] args) {
Binarysearchtree bt = new Binarysearchtree ();
//Tambahkan node ke pohon biner
bt.insert(60);
bt.insert(40);
bt.insert(80);
bt.insert(70);
bt.insert(20);
bt.insert(100);
System.out.println("Binary search
tree after insertion:");
//Menampilkan pohon biner
bt.inorderTraversal(bt.root);
Node deletedNode = null;
//Menghapus node 90 yang tidak memiliki child
deletedNode = bt.deleteNode(bt.root, 80);
System.out.println("\nBinary search tree after
deleting node 90:");
bt.inorderTraversal(bt.root);
//Menghapus node 30 yang memiliki satu child
deletedNode = bt.deleteNode(bt.root,20);
System.out.println("\nBinary search tree after
deleting node 30:");
bt.inorderTraversal(bt.root);
//Menghapus node 50 yang memiliki dua children
deletedNode = bt.deleteNode(bt.root, 60);
System.out.println("\nBinary search
tree after deleting node 50:");
bt.inorderTraversal(bt.root);
}
}
20
Algoritma :
Membuat perintah dengan perintah public static node deleteNode,
digunakan untuk mengetahui minimum node. Dan membuat inputan untuk
menghapus node.
21
Soal 4
Graph
a. Membuat Graph.
b. Strongly atau Weakly.
c. Connected, Disconneted atau Completes.
Algoritma
package uasfarhankoingalim;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
class Graph<T> {
private Map<T, List<T> > map = new HashMap<>();
public void addVertex(T s)
{
map.put(s, new LinkedList<T>());
}
public void addEdge(T source,
T destination,
boolean bidirectional)
{
if (!map.containsKey(source))
addVertex(source);
if (!map.containsKey(destination))
addVertex(destination);
map.get(source).add(destination);
if (bidirectional == true) {
map.get(destination).add(source);
}
}
22
Algoritma :
Pertama-tama kami membuat class simpul edge dan import.
23
public void hasEdge(T s, T d)
{
if (map.get(s).contains(d)) {
System.out.println("The graph has an edge between "
+ s + " and " + d + ".");
}
else {
System.out.println("The graph has no edge between "
+ s + " and " + d + ".");
}
}
@Override
public String toString()
{
StringBuilder builder = new
StringBuilder();
for (T v : map.keySet()) {
builder.append(v.toString() + ": ");
for (T w : map.get(v)) {
builder.append(w.toString() + " ");
}
builder.append("\n");
}
return (builder.toString());
}
24
public static void main(String args[]){
Graph<Integer> g = new Graph<Integer>();
g.addEdge(0, 1, true);
g.addEdge(0, 4, true);
g.addEdge(1, 2, true);
g.addEdge(1, 3, true);
g.addEdge(1, 4, true);
g.addEdge(2, 3, true);
g.addEdge(3, 4, true);
System.out.println("Graph:\n"
+ g.toString());
g.getVertexCount();
g.getEdgesCount(true);
g.hasEdge(3, 4);
g.hasVertex(5);
}
int getvCount() {
throw new
UnsupportedOperationException("Not supported
yet.");
}
Iterable<Integer> neighbours(int i) {
throw new
UnsupportedOperationException("Not supported
yet.");
}
}
25
Algoritma :
Membuat program inputan dan menambahkan data yang ingin di masukan.
Membuat method untuk menghubungkan vertex dan edge.
26
Soal 5
Traversal Graph
a. Membuat Graph.
b. Breadth First Search.
c. Deepth First Search.
Algoritma
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
public class Traversalgraph {
private int vCount;
private List<Integer>[] adj;
Algoritma :
Pertama kita membuat class traversal breath first search dan isi intV dan
linked list yang berisi integer .
27
public void addEdge(int i, int j) {
adj[i].add(j);
}
public void removeEdge(int i, int j) {
Iterator<Integer> it = adj[i].iterator();
while (it.hasNext()) {
if (it.next() == j) {
it.remove();
return;
}
}
}
public boolean hasEdge(int i, int j) {
return adj[i].contains(j);
}
public List<Integer> neighbours(int vertex) {
return adj[vertex];
}
public void printGraph() {
for (int i = 0; i < vCount; i++) {
List<Integer> edges = neighbours(i);
System.out.print(i + ": ");
for (int j = 0; j < edges.size(); j++) {
System.out.print(edges.get(j) + " ");
}
System.out.println();
}
}
28
public static void bfs(Traversalgraph g, int v) {
boolean[] seen = new boolean[g.getvCount()];
LinkedList<Integer> q = new
LinkedList<Integer>(); // queue-like
q.add(v);
seen[v] = true;
while (!q.isEmpty()) {
int i = q.remove();
for (Integer j : g.neighbours(i)) {
if (!seen[j]) {
q.add(j);
seen[j] = true;
}
}
}
Algoritma :
Membuat graph dengan V adj/adjacency yaitu new linked list, tambahkan
adges ke graph.
29
while (!s.isEmpty()) {
int i = s.pop();
if (c[i] == white) {
c[i] = grey;
for (int j : g.neighbours(i))
s.push(j);
c[i] = black;
}
}
System.out.print(v + " -> ");
for (int i = 0; i < c.length; i++) {
if (c[i] == black)
System.out.print(i + ", ");
}
System.out.println();
}
public static void main(String[] args) {
Traversalgraph g = new Traversalgraph(5);
System.out.println("Graph:");
// add Edges
g.addEdge(0, 2);
g.addEdge(0, 4);
g.addEdge(1, 4);
g.addEdge(1, 4);
g.addEdge(2, 1);
g.addEdge(2, 3);
g.addEdge(3, 4);
g.addEdge(4, 2);
30
// print Graph
g.printGraph();
// Traversal Algorithms
System.out.println("BFS:");
bfs(g, 0);
bfs(g, 1);
System.out.println("DFS:");
dfs(g, 0);
dfs(g, 1);
}
}
Algoritma :
Membuat program BFS dan DFS. Buat inputan public static void main
digunakan memanggil progam traversal graph dan panggil inputan BFS dan
DFS.
31