04. Introduction to Tree, Binary Tree And Expression Tree – 2101676504 – Alexander Michael Oei

Introduction to Tree, Binary Tree And Expression Tree

Tree
Apa yang dimaksud dengan tree?
Tree adalah pohon? Bukan namun tree yang akan dibahas ini merupakan kumpulan node.

Layaknya sebuah pohon, tree ini juga memiliki banyak bagian seperti akar, daun, dll.
Tree terdiri dari :
> Root : Bagian teratas dari tree
> Edge : Garis yang menghubungkan node-node yang ada
> Leaf : Bagian node yang tidak mempunyai anak (node) di bawahnya

Dari gambar diatas dapat diambil kesimpulan bahwa :
> 1 Merupakan root
> 8 dan 9 Merupakan sibling karena mempunyai parent yang sama, yaitu 4
> 8, 9, 5, 6, 7 Adalah Leaf

Binary Tree
Terdiri dari berbagai macam model seperti berikut :

Perfect Binary Tree

Sesuai dengan namanya perfect yang berarti sempurna, memiliki bentuk yang sempurna.

Complete Binary Tree

Tree jenis ini sudah memiliki bentuk yang lengkap. Maksudnya adalah memiliki jumlah node yang pas sampai pada node terakhir.

Skewed Tree

Tree ini termasuk tree yang bentuknya berantakan, sehingga tak heran orang-orang menyebutnya juga sebagai unbalanced tree, karena bentuknya yang lebih menjorok ke satu sisi (kanan/kiri).

Rumus yang dapat dikatakan ampuh untuk Binary Tree :

> Index untuk anak yang sebelah kiri

2p + 1 ; dimana p merupakan index dari parent

> Index untuk anak yang sebelah kanan

2p + 2

> Index untuk parent

(p – 1) / 2

Expression Tree

Berbeda dengan yang kita pelajari di tree dan binary tree, disini hanya dikenal 3 cara untuk menyatakan expression tree, yaitu :

> Prefix
> Postfix
> Infix

Dari ketiga hal diatas, yang paling kita sering gunakan dalam operasi matematika ialah infix.
– Infix adalah keadaan dimana operator (* / + -) berada di tengah-tengah angka.

Contoh Infix :
(A + B) / C

– Postfix adalah keadaan dimana operator berada setelah angka / diakhir.

Contoh Postfix:
A B + C /

– Prefix adalah keadaan dimana operator berada sebelum angka / diawal.

Contoh Prefix:
/ + A B C

Kalau masih kurang paham dengan contoh diatas, ada cara yang mudah untuk mengerjakannya.

> Infix : LVR
> Postfix : LRV
> Prefix : VLR

Posted in Uncategorized | Leave a comment

3. Link List Implemantation II – 2101676504 – Alexander Michael Oei

Link List Implemantation 2
Linked List adalah suatu struktur data linier.

Berbeda dengan array yang juga merupakan struktur data linier dan tipe data komposit, linked list dibentuk secara dinamik. Pada saat awal program dijalankan elemen linked list belum data. Elemen linked list (disebut node) dibentuk sambil jalan sesuai instruksi. Apabila setiap elemen array dapat diakses secara langsung dengan menggunakan indeks, sebuah node linked list diakses dengan menggunakan pointer yang mengacu (menunjuk) ke node tersebut.

Awal atau kepala linked list harus diacu sebuah pointer yang biasa diberi nama head. Pointer current  digunakan untuk memindahkan pengacuan kepada node tertentu. Node Pembentuk Linked List Elemen pembentuk linked list disebut node.
.
Node
terdiri dari dua bagian, bagian data dan bagian kait (link). Bagian data berupa satu atau beberapa field.  Bagian link terdiri dari pointer.
Linked
list yang nodenya mempunyai satu buah pointer disebut singly-linked list.
Linked list
yang nodenya mempunyai dua pointer , satu untuk mengait ke node berikutnya dan yang lain untuk mengait ke node sebelumnya, disebut doubly-linked list.
Untuk
menyederhanakan pembahasan, dalam tulisan ini bagian data berupa satu buah
field
.
Contoh:
struct tnode {
int data;
struct tnode *next;
};
Operasi Pada Linked List adalah Operasi yang berkaitan dengan struktur data linked list.
Beberapa diantaranya:

create, empty, insertathead , insertaftercurr , insertattail  v,

retrieve,update,findfirst,findnext,findprev,deletenode, dan clear.
linked list:kosong empty memeriksa status kosong suatu linked list insert_head menambah node baru pada posisi awal linked list sehingga node ini menjadi node yang pertama, pointer current menunjuk ke node yang baru ditambahkan ini insert_curr menambah node baru pada posisi setelah pointer current, pointer current menunjuk ke
node yang baru ditambahkan ini insert_tail menambah node pada akhir linked list, sehingga node ini menjadi node terakhir linked list;
pointer current menunjuk kepada node yang baru ditambahkan ini.
Thompson S.Ngoen Linked List 2 retrieve  mengembalikan nilai data node yang ditunjuk pointer current update, mengubah nilai data node yang ditunjuk pointer current findfirst memindahkan pointer current ke posisi node pertama findnext memindahkan, pointer current ke posisi node berikutnya apabila tidak sedang berada pada posisi
node terakhir findprev( ) memindahkan pointer current ke posisi node sebelumnya apabila tidak sedang berada pada posisi node, pertama deletenote menghapus node pada posisi current dan memindahkan pointer current ke posisi node pertama clear dan menghapus linked list dengan membebaskan seluruh node satu persatu.
Posted in Uncategorized | Leave a comment

02 – Linked List Implementation – 2101676504 – Alexander Michael Oei

Linked List Implementation

Pada dasarnya Link dibagi menjadi beberapa bagian, diantaranya:

Single Linked List, Polynomial Representation, Circular Single Linked List, Doubly Linked List, Circular Doubly Linked List, Header Linked List

* Single Linked List

Contohnya:

#include <stdio.h>
#include <iostream.h>
#include <conio.h>
struct TNode{
int data;
TNode *next;
};
TNode *head, *tail;
void init(){
head = NULL;
tail = NULL;
}
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
}
void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=tail=baru;
tail->next=NULL;
}
else {
baru->next = head;
head = baru;
}
cout<<“Data masuk\n”;
}
void insertBelakang(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=baru;
tail=baru;
tail->next = NULL;
}
else {
tail->next = baru;
tail=baru;
}
cout<<“Data masuk\n”;
}
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
cout<<bantu->data<<” “;
bantu=bantu->next;
}
} else cout<<“Masih kosong\n”;
}
void hapusDepan(){
TNode *hapus;
int d;
if (isEmpty()==0){
if(head!=tail){
hapus = head;
d = hapus->data;
head = head->next;
delete hapus;
} else {
d = tail->data;
head=tail=NULL;
}
cout<<d<<“terhapus”;
} else cout<<“Masih kosong\n”;
}
void hapusBelakang(){
TNode *bantu,*hapus;
int d;
if (isEmpty()==0){
bantu = head;
if(head!=tail){
while(bantu->next!=tail){
bantu = bantu->next;
}
hapus = tail;
tail=bantu;
d = hapus->data;
delete hapus;
tail->next = NULL;
}else {
d = tail->data;
head=tail=NULL;
}
cout<<d<<” terhapus\n”;
} else cout<<“Masih kosong\n”;
}
void clear()
{
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL)
{
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
printf(“CLEAR”);
}
main()
{
int pil,databaru;
do
{
clrscr();
cout<<endl<<endl;
cout<<” ===========================”<<endl;
cout<<” = PROGRAM LINKED LIST =”<<endl;
cout<<” ===========================”<<endl;
cout<<” = 1. Insert Depan =”<<endl;
cout<<” = 2. Insert Belakang =”<<endl;
cout<<” = 3. Delete Depan =”<<endl;
cout<<” = 4. Delete Belakang =”<<endl;
cout<<” = 5. Tampil Data =”<<endl;
cout<<” = 6. Clear =”<<endl;
cout<<” = 7. Exit =”<<endl;
cout<<” ===========================”<<endl;
cout<<” Masukan Pilihan : “;cin>>pil;
switch (pil)
{
case 1: clrscr();{
cout<<“Masukkan Data = “;
cin>>databaru;
insertDepan(databaru);
break;
}
case 2: clrscr();{
cout<<“Masukkan Data = “;
cin>>databaru;
insertBelakang(databaru);
break;
}
case 3: clrscr();{
hapusDepan();
break;
}
case 4: clrscr();{
hapusBelakang();
break;
}
case 5: clrscr();{
tampil();
break;
}
case 6: clrscr();{
clear();
break;
}
case 7: {
return 0;
break;
}
default : clrscr();{
cout<<“\n Maaf, Pilihan yang anda pilih tidak tersedia!”;
}
}
getch();
}
while(pil!=7);
}

*Polynomial Representation

Polinomial dari : 6×3 + 9×2 + 1

Setiap istilah individu dalam polinom terdiri dari dua bagian, koefisien dan kekuatan. Di sini, 6, 9, 7, dan 1 adalah koefisien dari persyaratan yang masing-masing memiliki 3, 2, 1, dan 0 sebagai kekuatan masing-masing. Setiap istilah polinomial dapat direpresentasikan sebagai simpul dari linked list.

*Circular Single Linked List

Secara sirkuler, node terakhir berisi pointer ke node pertama, Kita bisa memiliki daftar terkait melingkar dan juga daftar ganda yang saling terkait. Tidak ada penyimpanan nilai NULL dalam daftar.

*Doubly Linked List

Daftar ganda atau linked list dua arah adalah data daftar tertaut. Struktur dengan dua link, satu yang berisi referensi ke data berikutnya dan satu yang berisi referensi ke data sebelumnya.

Contohnya:

#include <iostream>//pada aplikasi Dev.C++ compilenya mendukung format iostream seperti ini
#include <conio.h>
#include <stdio.h>
#include <windows.h>//mendukung format system(“CLS”) sebagai peganti clrscr()
using namespace std;//penambahan untuk header iostream
int pilih; void pilihan();
void insert_data();
void hapus_data();
void cetak_data();
struct node
{
int nomorinduk;
char nama [40];
char gender [20];
float nilai;
node *prev, *next;
};
node *baru, *head=NULL, *tail=NULL,*help,*del;
main()//interface monitor
{
do
{
system(“cls”);
cout<<“\tLIN. DOUBLY LINKED LIST”<<endl;
cout<<“\t==========================”<<endl;
cout<<“\t1. INSERT DATA”<<endl;
cout<<“\t2. HAPUS DATA”<<endl;
cout<<“\t3. CETAK DATA”<<endl;
cout<<“\t4. EXIT”<<endl;
cout<<“\tPilihan (1 – 4) : “;
cin>>pilih;
cout<<endl<<endl;
pilihan();
cout<<“===============================”<<endl;
}
while(pilih!=4);
}
void pilihan()//fungsi “pilihan” untuk pemrosesan
{
if(pilih==1)
insert_data();
else if(pilih==2)
hapus_data();
else if(pilih==3)
cetak_data();
else
{
cout<<“EXIT”;
cout<<“\nSampai Jumpa lagi”<<endl;
}
}
void buat_baru()//fungsi membuat data baru
{
baru = new(node);
cout<<“Masukkan Nomor Induk: “;cin>>baru->nomorinduk;
cout<<“Masukkan Nama: “;cin>>baru->nama;
cout<<“Masukkan Gender: “;cin>>baru->gender;
cout<<“Masukkan Nilai: “;cin>>baru->nilai;
cout<<“\n\t—Data telah dimasukkan—“;
cout<<“\n\nPRESS ENTER TO CONTINUE…”;
getch();
baru->prev=NULL;
baru->next=NULL;
}
void insert_data()
{
buat_baru();
if(head==NULL)
{
head=baru;
tail=baru;
}
else
{
baru->next=head;
head->prev=baru;
head=baru;
}
cout<<endl<<endl;
}
void hapus_data()//fungsi penghapusan data
{
int hapus,nomorinduk;
if(head==NULL)
{
cout<<“\nLinked List kosong, \nPenghapusan tidak dapat dilakukan”<<endl;//data yang habis maka tampilannya
}
else
{
hapus=head->nomorinduk;
cout<<“\nData yang dihapus adalah “;//pemilihan data yang akan dihapus
cin>>nomorinduk;
del = head;
head = head->next;
delete del;
}
}
void cetak_data()
{
if (head==NULL)
cout<<“\nData tidak dapat ditemukan!”<<endl;//data yang kosong
else
{
help=head;
while(help!=NULL)
{
cout<<” Nomor Induk : “<<help->nomorinduk;//data akan muncul dengan tampilan
cout<<” Nama : “<<help->nama;
cout<<” Gender : “<<help->gender;
cout<<” Nilai : “<<help->nilai<<endl;
help=help->next;
}
}
getch();
}

*Circular Doubly Linked List

Polanya mirip dengan linked list melingkar tunggal, tapi jumlah pointer di setiap node di sini adalah 2 pointer.

Contoh:

 

*Header Link List

Sebuah header linked list adalah tipe khusus linked list yang berisi node header di awal daftar. Jadi, dalam sebuah header linked list, START (L) tidak akan mengarah ke simpul pertama dari daftar tapi START (L) akan berisi alamat simpul header.

 

Posted in Uncategorized | 2 Comments

01 – Array,Pointer, dan Data Struktur – 2101676504 – Alexander Michael Oei

Array

Array adalah kumpulan dari nilai-nilai data bertipe sama dalam urutan tertentu yang menggunakan sebuah nama yang sama.

1) Array Satu Dimensi
Tempat menyimpanya sekumpulan data yang memiliki tipe data yang sama dan hanya ada satu indek saja.

Contoh Program Array 1 Dimensi

import java.io.*;
public class ContohArray1{
public static void main(String[] args)
{
try{
int[] angka = new int[5];
System.out.println(“Masukkan 5 Data”);
System.out.println(“===============”);
BufferedReader in = new BufferedReader(new InputStreamReader (System.in));
for (int i=0;i<angka.length;i++)
{
System.out.print(“Masukkan Data Ke-“+(i+1)+” : “);
angka [i] = Integer.parseInt(in.readLine());
}
System.out.println(“\nData Yang Ada Di Array :”);
System.out.println(“===============”);
for (int i=0;i<angka.length;i++)
{
System.out.println(“Data Ke-“+(i+1)+” : “+angka[i]);
}
}
catch(Exception e) {
System.out.println(“Error”);
}
}
}

Hasilnya

2) Array Dua Dimensi
Array dua dimensi ini biasa digunakan untuk membuat program yang mempunyai aturan baris dan kolom,seperti membuat matrik,untuk pendataan.

Contoh Program Array 2 Dimensi

public class ArrayDuaDimensi {
public static void main(String [] args)

{
int TwoDarray[][]=new int[0][0];
int k=0;
for (int i=0; i<5; i++)
{
for(int j=0; j<4; j++)
{
System.out.print(+i+”,”+j);
}
System.out.print(“”);
}
}
}

Pointer

Pointer adalah sebuah variabel yang berisi alamat lain. Suatu pointer dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah.

Contoh:

#include <stdio.h>
main(){
int *pointer;
int DATA1;
DATA1=27;
printf(” Isi variabel DATA1 = %d”,DATA1);
printf(“\n Alamat variabel DATA1 = %d”,&DATA1);
printf(“\n Alamat variabel *pointer = %d”,&pointer);
printf(“\n Isi variabel *pointer = %d”,pointer);
pointer=&DATA1;
printf(“\n Alamat variabel *pointer = %d”,&pointer);
printf(“\n Isi variabel *pointer = %d”,pointer);
printf(“\n Isi dari alamat %d = %d”,pointer,*pointer);
printf(“\n”);
return 0;
}

Data Struktur

Struktur data adalah cara menyimpan dan data – data pada memori komputer maupun file secara efektif sehingga dapat digunakan dengan efisien, termasuk operasi operasi didalamnya.

Contoh:
#include<constream.h>
#include<stdlib.h>
#include<ctype.h>
#include<stdio.h>

struct mahasiswa
{
int nrp ;
char nama[20];
}:

Struktur data disini menpunyai 2 sifat .yakni:
1. Sederhana, -> kita menggunakan Array
2. Majemuk -> linier, non Linear
Yang dimaksud dengan sederhana & Majemuk disini yaitu susunannya.

Posted in Uncategorized | Leave a comment