Binary Tree
#include <stdio.h>
#include <conio.h>
typedef struct Node{
int data;
Node *kiri;
Node *kanan;
};
//Menambah data pada tree
void tambah(Node **root,int databaru){
if((*root) == NULL){
//Data baru di declare sebagai node -->akar(root)
Node *baru;
baru = new Node;
baru->data = databaru;
//left and right masih empty set
baru->kiri = NULL;
baru->kanan = NULL;
(*root) = baru;
(*root)->kiri = NULL;
(*root)->kanan = NULL;
printf("Data bertambah!");
}
//Menambah susunan data
//jika data yang ditambah(databaru<akarnya-root-->kiri)
else if(databaru < (*root)->data)
tambah(&(*root)->kiri,databaru);
//Jika data yang ditambah(databaru>akarnya-root-->kanan)
else if(databaru > (*root)->data)
tambah(&(*root)->kanan,databaru);
//Jika data yang ditambah(databaru)==akarnya->data sudah ada)
else if(databaru == (*root)->data)
printf("Data sudah ada!");
}
//Fungsi untuk pre order (Node(data)-->Left-->Right)
void preOrder(Node *root){
//kondisi jika root terisi/tidak boleh kosong
if(root != NULL){
printf("%d ",root->data);
preOrder(root->kiri);
preOrder(root->kanan);
}
}
//Fungsi untuk in order (Left-->Node(data)-->Right)
void inOrder(Node *root){
//kondisi jika root terisi/tidak boleh kosong
if(root != NULL){
inOrder(root->kiri);
printf("%d ",root->data);
inOrder(root->kanan);
}
}
//Fungsi untuk post order (Left-->Right-->Node(data))
void postOrder(Node *root){
//kondisi jika root terisi/tidak boleh kosong
if(root != NULL){
postOrder(root->kiri);
postOrder(root->kanan);
printf("%d ",root->data);
}
}
void main(){
int pil,c;
//deklarasi pohon/tree
Node *pohon,*t;
//set kondisi awal pohon=0
pohon = NULL;
do{
clrscr();
//Menu tampilan awal saja-untuk menjalankan fungsi pilihan
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){
//Kondisi jika menjalankan fungsi menambah data
case 1: printf("Data baru : ");scanf("%d",
&data);
tambah(&pohon,data);
break;
//Kondisi jika menjalankan fungsi tampilkan data secara preOrder
case 2: if(pohon!=NULL) preOrder(pohon);
else printf("Masih kosong!");
break;
//Kondisi jika menjalankan fungsi tampilkan data secara inOrder
case 3: if(pohon!=NULL) inOrder(pohon);
else printf("Masih kosong!");
break;
//Kondisi jika menjalankan fungsi tampilkan data secara postOrder
case 4: if(pohon!=NULL) postOrder(pohon);
else printf("Masih kosong!");
break;
}
getch();
//Sampai kondisi false berhenti
}while(pil!=5);
}
Contoh Binary Tree
Linked List
- data
- pointer penunjuk elemen setelahnya (next)
- pointer penunjuk elemen sebelumnya (prev)
Contoh Implementasi Queue
#include "stdio.h"
#include "conio.h"
void main()
{
int cek=0, data[20], x, hapus;
char pil;
do {
clrscr();
printf("1. Tambah Antrian\n");
printf("2. Hapus Antrian\n");
printf("3. Lihat Antrian\n");
printf("4. Keluar\n");
printf("Silahkan masukkan pilihan anda... ");
pil=getche();
if(pil!='1' && pil !='2' && pil !='3' && pil!='4' )
printf("\n\nKalian salah mengetikkan inputan (cek lagi ya!)...\n");
else
{
if(pil=='1') //PUSH
{
if(cek==20)
printf("\nAntrian Penuh\n\n");
else
{
printf("\nMasukkan nilai-->");scanf("%i",&x);
data[cek]=x;
cek++;
}}
else
{
if(pil=='2') //POP
{
if(cek==0)
printf("\nAntrian kosong\n\n");
else
{
hapus=data[0];
for(int v=0;v<cek;v++)
data[v]=data[v+1];
data[cek-1]=NULL;
cek--;
printf("\nData dgn nilai=%i terhapus.",hapus);
}
getch();
}
else
{
if(pil=='3') //CEK DATA
{
if(cek==0)
printf("\nAntrian Kosong.\n\n");
else
{
printf("\n");
for(int z=0;z<cek;z++)
{
printf(" | ");
printf("%i",data[z]);
printf(" | ");
}
}
getch();
}
}
}
}
}while(pil!='4');
}
Contoh Implementasi Stack
Contoh Implementasi Stack
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
void inisialisasi();
void push();
void pop();
void clear();
#define MAX_STACK 10
typedef struct STACK
{ int top;
char data[10][10];};
STACK tumpuk;
void inisialisasi()
{ tumpuk.top= -1;}
//fungsi untuk melakukan pengecekan terhadap stack, apakah stack tersebut penuh atau tidak
int IsFull()
{ if(tumpuk.top== MAX_STACK-1) return 1; else return 0;}
//fungsi untuk melakukan pengecekan terhadap stack, apakah stack tersebut kosong atau tidak
int IsEmpty()
{ if(tumpuk.top== -1) return 1; else return 0;}
//fungsi untuk memasukkan sebuah nilai/ data ke dalam stack.
//Sebelum sebuah nilai/ data dimasukkan ke dalam stack
//Prosedur ini terlebih dahulu akan menaikkan posisi TOP satu level ke atas
void Push(char d[10])
{ tumpuk.top++;
strcpy(tumpuk.data[tumpuk.top],d); }
void Pop()
{ printf("Elemen terakhir stack sudah dihapus, yaitu : %s\n",tumpuk.data
[tumpuk.top]);
tumpuk.top--; }
void Clear()
{ tumpuk.top=-1; }
void TampilStack()
{
for(int i=tumpuk.top;i>=0;i--)
{ printf("Data : %s\n",tumpuk.data[i]); }
}
int main()
{
int pil;
inisialisasi();
char dt[10];
do{
clrscr();
printf("PILIHAN PROSES\n");
printf("[1] Masukan Data\n");
printf("[2] Hapus Data\n");
printf("[3] Tampil Isi Stack\n");
printf("[4] Mereset Stack\n");
printf("[5] Keluar\n");
printf("Masukan kode pilihan (1 ... 5) : "); scanf("%d",&pil);
switch(pil)
{
case 1: if(IsFull() != 1)
{ printf("Nama = ");scanf("%s",dt);
Push(dt); }
else
printf("\nSudah penuh, push gagal!\n");
break;
case 2: if(IsEmpty() != 1)
Pop();
else
printf("\nMasih kosong!\n");
break;
case 3: if(IsEmpty() != 1)
TampilStack();
else
printf("\nStack kosong!\n");
break;
case 4: Clear();
printf("\nStack sudah di hapus!\n");
break;
}
getch();
} while(pil!= 5);
getch();
}
Stack and Queue
Stack mempunyai satu pointer yang selalu menunjuk ke arah top.