STACK
A. Definisi Stack
Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO (Last In First Out), benda yang terakhir masuk dalam stack akan menjadi benda pertama yang dikeluarkan dari stack. Stack haruslah memiliki operasi-operasi sebagai berikut :
-Push Untuk menambahkan item pada tumpukan paling atas
-Pop Untuk mengambil item teratas
-Clear Untuk mengosongkan stack
-IsEmpty Untuk memeriksa apakah stack kosong
-IsFull Untuk memeriksa apakah stack sudah penuh
-Retreive Untuk mendapatkan nilai dari item teratas
Sebuah STACK dapat digambarkan sebagai list linier yang setiap elemennya adalah :
Type ElmtS = record
Bagian Deklarasi dari algoritma pada Stack :
Deklarasi
type InfoType = … {Sebuah type terdefinisi}
type Address pointer to ElmtS
type ElmtS = record
{Deklarasi Nama Peubah}
S : Stack
P : Address
Operasi dan fungsi dasar pada STACK.
a) Test STACK kosong
Mengetahui bahwa stack kosong atau tidak sangat penting, sebab semua operasi akan dilakukan berdasarkan kosong atau tidaknya suatu Stack. Realisasi algoritma dari definisi fungsional ini adalah sebuah fungsi yang melakukan test terhadap Stack sebagai berikut :
function StackEmpty (S : STACK) →
Boolean
{ TEST stack kosong : Mengirim true, jika tumpukan kosong, false jika tumpukan tidak kosong}
Deklarasi
b) Pembuatan STACK kosong
Membuat Stack kosong diperlukan untuk memulai memakai stack. Realisasi algoritma dari definisi fungsional ini adalah sebuah prosedur yang melakukan inisialisasi stack sebagai berikut
Procedure CreateEmptyS (Output S : STACK)
{K. Awal : sembarang,
K. Akhir : sebuah stack S yang kosong siap dipakai terdefinisi
Proses : Membuat stack kosong }
Deklarasi
Deskripsi Top (S) ← Nil
c) Penambahan sebuah elemen pada STACK (Push)
Penambahan selalu dilakukan pada TOP, dan karena alamat TOP diketahui maka prosesnya sederhana. Berikut ini akan diberikan skema prosedur penyisipan tersebut. Realisasi algoritma dari definisi fungsional ini adalah salah satu dari dua buah prosedur yang melakukan penambahan elemen stack sebagai berikut. Prosedur pertama menambahkan suatu ElmtS yang diketahui alamatnya dan yang kedua menambahkan suatu nilai ElmtS yang diberikan.
procedure Push@ (Input/Output S : STACK Input P : address)
{Menambahkan sebuah elemen baru pada TOP sebuah stack, dengan elemen yang diketahui alamatnya}
{K.Awal : Stack mungkin kosong, P terdefinisi (berarti terdefinisi informasinya, Next (P) = Nil}
{K.Akhir : Top (S) adalah P}
Deklarasi
{ insert sebagai elemen pertama }
Next (P) ← TOP (S)
TOP (S) ← P
Procedure Push( Input / Output S:STACK Input E: InfoType )
{ Menambahkan sebuah elemen baru pada TOP sebuah stack, dengan elemen yang diketahui informasinya }
{ K. Awal : Stack mungkin kosong , E terdefenisi , alokasi alamat selalu berhasil }
{ K. Akhir : TOP (S) berisi E )
Deklarasi
P : address
Deskripsi
Alokasi ( P ) { alokasi selau berhasil }
Info(P) ← E { insert sebagai elemen pertama }
Next(P) ← TOP(S)
TOP(S) ← P
d) Penghapusan sebuah elemen pada STACK (Pop)
Penghapusan elemen Stack selalu dilakukan pada TOP , hanya saja harus diperhitungkan bahwa mungkin Stack akan menjadi kosong akibat terjadinya penghapusan. Jika Stack menjadi kosong , maka harga TOP harus diganti . Realisasi algoritma dari definisi funsional ini adalah salah satu dari dua buah prosedur yang melakukan pengambilan elemen stack sebagai berikut . Prosedur pertama mengambil suatu Elements dengan menyimpan alamatnya dan yang kedua mengambil nilai , dan membebaskan alamat ( dealokasi ) yang tadinya dipakai.
procedure PopStack@(Input/Output S : STACK
{K.Awal : Stack tidak kosong K.Akhir : Alamat elemen Top (S) disimpan pada P, sehingga informasinya dapat diakses melalui P Proses : Menghapus elemen stack, stack tidak boleh kosong dan mungkin menjadi kosong }
Deklarasi
Deskripsi
P ← TOP (S)
TOP (S) ← Next(TOP(S))
procedure PopStack(Input/Output S : STACK
Output E : InfoType)
{K.Awal : Stack tidak kosong K.Akhir : Alamat elemen Top (S) disimpan pada E, alamat TOP yang lama didealokasi Proses : Menghapus elemen stack, stack tidak boleh kosong dan mungkin menjadi kosong }
Deklarasi
P : address
Deskripsi
P ← TOP (S)
E ← Info(P)
TOP (S) ← Next(TOP(S))
Dealokasi (P)
B. Stack dengan Array
Sesuai dengan sifat stack, pengambilan / penghapusan di elemen dalam stack harus dimulai dari elemen teratas. Operasi-operasi pada Stack dengan Array
· IsFull
Fungsi ini memeriksa apakah stack yang ada sudah penuh. Stack penuh jika puncak stack terdapat tepat di bawah jumlah maksimum yang dapat ditampung stack atau dengan kata lain Top = MAX_STACK -1.
· Push
Fungsi ini menambahkan sebuah elemen ke dalam stack dan tidak bisa dilakukan lagijika stack sudah penuh.
· IsEmpty
Fungsi menentukan apakah stack kosong atau tidak. Tanda bahwa stack kosong adalah Top bernilai kurang dari nol.
Fungsi ini mengambil elemen teratas dari stack dengan syarat stack tidak boleh kosong.
· Clear
Fungsi ini mengosongkan stack dengan cara mengeset Top dengan -1. Jika Top bernilai kurang dari nol maka stack dianggap kosong.
· Retreive
Fungsi ini untuk melihat nilai yang berada pada posisi tumpukan teratas.
Contoh Program :
Program untuk Insert (Push) Nilai dan Delete (Pop) Nilai dalam Stack
#include
#include
#include
#define MAX 10
void push(int stack[], int *top, int value );
void pop(int stack[], int *top, int *value);
void main()
{
int stack[MAX];
int top = -1;
int n, value;
do
{
do
{
cout<<"Masukkan Nilai yang akan di push : "; cin>>value;
push(stack, &top,value);
cout<<"Tekan 1 untuk Melanjutkan"< >n;
} while (n == 1)
cout<<"Tekan 1 untuk Melakukan POP"< >n;
while (n == 1)
{
pop(stack,&top,&value );
cout<<"Nilai yang di POP : "< <<"tekan="" elemen"< >n;
<<"tekan="" elemen"< }
<<"tekan="" elemen"< cout< <<"tekan="" melanjutkan"< >n;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< } while (n == 1);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< void push(int stack[], int *top, int value)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< if(*top < MAX) { *top = *top + 1; stack[*top] = value ; } else { cout<<"Stack Penuh, Push Nilai Tidak dapat Dilakukan"< = 0)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< *value = stack[*top];
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< *top = 8top - 1;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< Else
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< cout<<"Stack Kosong, pop tidak dapat Dilakukan"<
<<"tekan="" elemen"< <<"tekan="" melanjutkan"<
Dengan InfoType terdefinisi yang menentukan informasi yang disimpan pada setiap elemen queue, dan address adalah “alamat” dari elemen. Selain itu alamat elemen Pertama (Head) dan elemen terakhir (Tail) dicatat. Maka jika Q adalah Queue dan P adalah Address, penulisan untuk Queue adalah :
· Head(Q)
· Tail(Q)
· Next(P)
· Info(P)
· Walaupun berbeda implementasi, struktur data queue setidaknya harus memiliki operasi-operasi sebagai berikut :
1) EnQueue Memasukkan data ke dalam antrian
2) DeQueue Mengeluarkan data terdepan dari antrian
3) Clear Menghapus seluruh antrian
4) IsEmpty Memeriksa apakah antrian kosong
5) IsFull Memeriksa apakah antrian penuh
Bagian Deklarasi dari algoritma pada Queue :
Deklarasi
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< type InfoType = … {Sebuah type terdefinisi}
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< type Address pointer to ElmtQ
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< type ElmtQ = record
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< type Queue = record
<<"tekan="" elemen"< <<"tekan="" melanjutkan"<
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< {Deklarasi Nama Peubah}
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< Q : Queue
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< P : Address
<<"tekan="" elemen"< <<"tekan="" melanjutkan"<
· Linear Array
Linear array adalah suatu array yang dibuat seakan-akan merupakan suatu garis lurus dengan satu pintu masuk dan satu pintu keluar.
Berikut ini diberikan deklarasi kelas Queue Linear sebagai implementasi dari Queuemenggunakan linear array. Dalam prakteknya, anda dapat menggantinya sesuai dengankebutuhan Anda. Data diakses dengan field data, sedangkan indeks item pertama danterakhir disimpan dalam field Head dan Tail. Konstruktor akan menginisialisasikannilai Head dan Tail dengan -1 untuk menunjukkan bahwa antrian masih kosong dan mengalokasikan data sebanyak MAX_QUEUE yang ditunjuk oleh Data. Destruktor akan mengosongkan antrian kembali dan mendealokasikan memori yang digunakan oleh antrian.
· Operasi-Operasi Queue dengan Linear Array
1) IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. hal ini dilakukan dengan mengecek apakah tail bernilai -1 atau tidak. Nilai -1 menandakan bahwa queue masih kosong.
2) IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bisa menampung data dengan cara mengecek apakah nilai tail sudah sama dengan jumlah maksimal queue. Jika nilai keduanya sama, berarti queue sudah penuh.
3) EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen dalam queue.
4) DeQueue
Fungsi DeQueue berguna untuk mengambil sebuah elemen dari queue. Operasi ini sering disebut juga serve. Hal ini dilakukan dengan cara memindahkan sejauh satu langkah ke posisi di depannya sehingga otomatis elemen yang paling depan akan tertimpa dengan elemen yang terletak di belakangnya.
5) Clear
Fungsi Clear berguna untuk menghapus semua lemen dalam queue dengan jalan mengeluarkan semua elemen tersebut satu per satu hingga queue kosong dengan memanfaatkan fungsi DEQueue.
C. Implementasi Queue dengan Circular Array
· Circular Array
Circular array adalah suatu array yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal (head) dan titik akhir (tail) saling bersebelahan jika array tersebut masih kosong. Posisi head dan tail pada gambar diatas adalah bebas asalkan saling bersebelahan. Berikut ini diberikan deklarasi kelas Queue Circular sebagai implementasi circular array. Dalam prakteknya, Anda dapat menggantikanny sesuai dengan kebutuhan Anda.
Data diakses dengan field data, sedangkan indeks itemn pertama dan terakhir disimpan dalam field Head dan Tail. Konstruktor akan menginisialisasi nilai Head dan Tail dengan 0 dan MAX-QUEUE-1 untuk menunjukkan bahwa antrian masih kosong dan mengalokasikan data sebanyak MAX-QUEUE yang ditunjuk oleh Data. destruktor akan mengosongkan antrian kembali dan mendealokasikan memori yang digunakan oleh antrian.
· Operasi-Operasi Queue dengan Circular Array
IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah Queue masih kosong atau sudah berisi. Hal ini dilakukan dengan mengecek apakah tail masih terletak bersebelahan dengan head dan tail lebih besar dari head atau tidak. Jika benar, maka queue masih kosong.
IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bisa menampung data dengan cara mengecek apakah tempat yang masih kosong tinggal.
EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (head dan tail mula-mula meunjukkan ke NULL).
DeQueue
Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan dengan cara menghapus satu simpul yang terletak paling depan (head).
Contoh Program :
Queue dengan Menggunakan Array
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< #include
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< #include
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< #define MAX 10
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< void insert (int queue[], int *rear, int nilai);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< void del (int queue[], int *front, int rear, int *nilai);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< void main ()
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< int queue[MAX];
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< int front, rear;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< int n, nilai;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< front = rear = (-1);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< do
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< do
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< cout<<"MAsukkan Nilai Elemen : ";cin>>nilai;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< insert (queue,&rear,nilai);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< cout< <<"tekan="" melanjutkan="" untuk="">>n;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> } while (n == 1);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> cout< <<"tekan="" elemen="" menghapus="" sebuah="" untuk="">>n;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> while (n == 1)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> del(queue,&front,rear,&nilai);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> cout<<"Nilai telah Dihapus : "< < <<"tekan="" debuah="" elemen="" menghapus="" untuk="">>n; <
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> } <
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> cout< <<<"tekan="" melajutkan="" untuk="">>n;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<<"tekan="" melajutkan="" untuk=""> } while (n == 1);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<<"tekan="" melajutkan="" untuk=""> }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<<"tekan="" melajutkan="" untuk=""> void insert (int queue[], int *rear, int nilai)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<<"tekan="" melajutkan="" untuk=""> {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> if (*rear < MAX-1) { *rear = *rear + 1; queue[*rear] = nilai; } else { cout<<"Queue Penuh, insert tidak dapat dilakukan"< < <<"queue="" dapat="" del="" delete="" dilakukan"<
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< #include
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< #define Nil NULL
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< struct node
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< int data;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< struct node *link;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< };
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< void insert (struct node **front, struct node **rear, int nilai)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< struct node *temp;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< temp = (struct node *)malloc(sizeof(struct node));
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< if (temp == Nil)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< cout<<"Error, Memory Penuh"< data = nilai;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< temp -> link = Nil;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< if (*rear == Nil)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< *rear = temp;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< *front = *rear;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< else
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< (*rear) -> link = temp;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< *rear = temp;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< void del(struct node **front, struct node **rear, int *nilai)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< struct node *temp;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< if ((*front == *rear) && (*rear == Nil))
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< cout<<"Queue Kosong, Delete tidak dapat dilakukan"< data;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< temp = *front;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< *front = (*front) -> link;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< if(*rear == temp)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< *rear = (*rear) -> link;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< free(temp);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< void main()
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< struct node *front = Nil, *rear = Nil;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< int n,nilai;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< do
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< do
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< cout<<"Masukkan nilai Elemen : ";cin>>nilai;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< cout< <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk="">>n;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> } while (n == 1);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> cout< <<"tekan="" elemen="" menghapus="" untuk="">>n;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> while (n == 1)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> < <<"queue="" dapat="" del="" delete="" dilakukan"< <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> del(&front, &rear,&nilai);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> cout< < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag="">>n;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> cout< <<"tekan="" melanjutkan="" untuk="">>n;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> } while (n == 1);
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> }
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk="">
A. Definisi Tree
Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree bias didefinisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut Root. Notde lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lain (disebut Subtree). Untuk lebih jelasnya, di bawah akan diuraikan istilah-istilah umum dalam tree.
a) Predecessor Node yang berada di atas node tertentu
b) Successor Node yang berada dibawah node tertentu
c) Ancestor Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama
d) Descendant Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama
e) Parent Predecessor satu level di atas suatu node
f) Child Successor satu level di bawah suatu node
g) Sibling Node-node yang memiliki parent yang sama dengan suatu node
h) Subtree Bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut.
i) Size Banyaknya node dalam suatu tree
j) Height Banyaknya tingkatan / level dalam suatu tree
k) Root Satu-satunya node khusus dalam tree yang tak punyak predecessor
l) Leaf Node-node dalam tree yang tak memiliki successor
m) Degree Banyaknya child yang dimiliki suatu node
B. Jenis-Jenis Tree
1. Binary Tree
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut tiap node dalam binary tree hanya boleh memiliki paling banyak dua child.
Jenis- Jenis Binary Tree :
a) Full Binary Tree
Jenis binary tree ini tiap nodenya (kecuali leaf) memiliki dua child dan tiap subtree harus mempunyai panjang path yang sama.
b) Complete Binary Tree
Jenis ini mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path yang berbeda dan setiap node kecuali leaf hanya boleh memiliki 2 child.
c) Skewed Binary Tree
Skewed Binary Tree adalah Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki satu child.
d) Implementasi Binary Tree
Binary tree dapat diimplementasikan dalam C++ dengan menggunakan double linkedlist.
Operasi-Operasi pada Binary Tree :
Ø Create Membentuk binary tree baru yang masih kosong
Ø Clear Mengosongkan binary tree yang sudah ada
Ø Empty Function untuk memeriksa apakah binary tree masih kosong
Ø Insert Memasukkan sebuah node ke dalam tree. Ada tiga pilihan insert : sebagai root, left child, atau right child. Khusus insert sebagai root, tree harus dalam keadaan kosong
Ø Find Mencari root, parent, left child, atau right child dari suatu node. (tree tidak boleh kosong).
Ø Update Mengubah isi dari node yang ditunjuk oleh pointer curret (Tree tidak boleh kosong)
Ø Retrieve Mengetahui isi dari node yang ditunjuk oleh pointer current (Tree tidak boleh kosong)
Ø DeleteSub Menghapus sebuah subtree (node beserta seluruh descendantnya) yang ditunjuk current. Tree tidak boleh kosong. Setelah itu, pointer current dakan berpindah ke parent dari node yang dihapus.
Ø Characteristic Mengetahui karakteristik dari suatu tree, yakni: size, height, serta average length. Tree tidak boleh kosong.
Ø Traverse Mengunjungi seluruh node-node pada tree, masing-masing sekali. Hasilnya adalah urutan informasi secara linear yang tersimpan dalam tree. Ada tiga cara traverse,yaitu PreOrder, InOrder, dan PostOrder.
Langkah-langkah Tranverse :
· PreOrder : cetak isi node yang dikunjungi, kunjungi Left Child, kunjungi Right Child
· InOrder : kunjungi Left Child, cetak isi node yang dikunjungi, kunjungi RightChild
· PostOrder : kunjungi Left Child, kunjungi Right Child cetak isi node yang dikunjungi.
2. Binary Search Tree
Binary Tree ini memiliki sifat dimana semua left child harus lebih kecil dari pada right child dan parentnya. Semua right child juga harus lebih besar dari left child serta parentnya.
Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu kesulitan dalam searching / pendarian node tertentu dalam binary tree. Pada dasarnya operasi dalam Binary Search Tree sama dengan Binary Tree biasa, kecuali pada operasi insert, update, dan delete.
v Insert
Pada Binary Search Tree insert dilakukan setelah lokasi yang tepat ditemukan (lokasi tidak ditentukan oleh user sendiri ).
v Update
Update ini seperti yang ada pada Binary Tree biasa, namun di sini update akan berpengaruh pada posisi node tersebut selanjutnya. Bila update mengakibatkan tree tersebut bukan Binary Search Tree lagi, harus dilakukan perubahan pada tree dengan melakukan rotasi supaya tetap menjadi Binary Search Tree.
v Delete
Seperti halnya update, delete dalam Binary Search Tree juga turut mempengaruhi struktur dari tree tersebut.
AVL Tree
AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk tree dapat dipersingkat dan disederhanakan. Selain AVL Tree, terdapat pula Height Balanced n Tree, yakni Binary Search Tree yang memiliki perbedaan level antara subtree kiri dan subtree kanan maksimal adalah n sehingga dengan kata lain AVL Tree adalah Height Balanced 1 Tree.
Untuk memudahkan dalam menyeimbangkan tree, digunakan simbol-simbol Bantu :
v - (tanda minus) : digunakan apabila Subtree kiri lebih panjang dari Subtree kanan.
v + (tanda plus) : digunakan apabila Subtree kanan lebih panjang dari Subtree kiri.
v 0 (nol) : digunakan apabila Subtree kiri dan Subtree kanan mempunyai height yang sama.
Contoh program :
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> #include
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> #include
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> #define Nil NULL
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> sruct nod
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> srtuct nod *left;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> char data;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> struct nod *right;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> };
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> typedef struct nod NOD;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> typedef NOD POKOK;
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> NOD *NodBaru(char item)
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> {
<<"tekan="" elemen"< <<"tekan="" melanjutkan"< <<"tekan="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" sebuah="" untuk=""> < <<"tekan="" debuah="" elemen="" menghapus="" untuk=""> <<"tekan="" melajutkan="" untuk=""> <<"queue="" dapat="" del="" delete="" dilakukan"< < <<"tekan="" insert(&front,&rear,nilai);="" melanjutkan="" untuk=""> <<"tekan="" elemen="" menghapus="" untuk=""> < < <<"nilai="" cout<<"tekan="" dihapus="" elemen="" menghapus="" untuk="" ynag=""> <<"tekan="" melanjutkan="" untuk=""> NOD *n;
n = (NOD +)malloc(sizeof (NOD));
if (n != Nil)
{
n -> data = item;
n -> left =Nil;
n -> right =Nil;
}
return n;
}
void BinaPokok (POKOK **T)
{
*T = Nil;
}
typedef enum {FALSE = 0, TRUE = 1} BOOL;
BOOL PokokKosong (POKOK *T)
{
return ((BOOL) (T == Nil));
}
void TambahNod(NOD **p, char item)
{
NOD *n;
n = NodBaru(item);
*p = n;
}
void preOrder(POKOK *T)
{
if (!PokokKosong(T))
{
COUT<<" "<< t -> DATA;
PREoRDER(t -> LEFT);
preOrder(T -> right);
}
}
void inOrder(POKOK *T)
{
if (!PokokKosong(T))
{
inOrder(T -> left);
cout<<" "<< T -> data;
inOrder(T -> right);
}
}
void postOrder(PKOK *T)
{
if (!PkokKosong(T))
{
postOrder(T -> left);
postOrder(T -> right);
cout<<" "<< T -> data;
}
}
int main()
{
POKOK *kelapa;
char buah;
BinaPokok(&kelapa);
TambahNod(&kelapa, buah = 'M');
TambahNod(&kelapa -> left, buah = 'E');
TambahNod(&kelapa -> left ->right, buah = 'I');
TambahNod(&kelapa -> right, buah = 'L');
TambahNod(&kelapa -> right ->right, buah = 'O');
TambahNod(&kelapa -> right -> right -> left, buah = 'D');
cout<<"Tampila secara PreOrder : ";preOrder(kelapa); cout<<="" achmad.="" analisa="" asyiknya="" bahasa="" bandung.="" belajar="" borland="" budi="" builder.="" c++.="" c++="" c.="" c="" cepat="" cost-benefit="" cout<<"tampilan="" cout<
0 comments:
Post a Comment