Thanks for visit http://randylio.blogspot.com Or http://rlpower.cz.cc
English French German Spain Italian Dutch

Russian Brazil Japanese Korean Arabic Chinese Simplified
Translate Widget by Google

14/11/12

Program DFS



LISTING PROGRAM:
#include
#include
#include
#include

typedef struct Tree
{
            char info[5];
            struct Tree *left;
            struct Tree *midle;
            struct Tree *right;
} T,*PT;

#define true 1
#define false 0

char init = false;

void preorder(PT root);
PT NewRoot(char info[]);
void destruct(PT root);
void DestructTree();
void DFS(PT root);
void create();
void insert(struct Tree **root,char info[]);
void input();
void CetakDFS();
void cetak();

PT hPohon = {0};

int main()
{
            int pil;
            clrscr();

            do {

                        printf("Tree\n\n");
                        printf("1. Create Tree\n");
                        printf("2. Insert Data\n");
                        printf("3. Print DFS\n");
                        printf("4. Exit\n\n");
                        printf("Pilihan [1..4] : ");
                        scanf("%d",&pil);

                        switch(pil)
                        {
                                    case 1:
                                                create();
                                                break;
                                    case 2:
                                                input();
                                                break;
                                    case 3:
                                                cetak();
                                                break;
                                    case 4:
                                                DestructTree();
                                                break;
                                    default:
                                                printf("Pilihan salah\n");
                        }
                        printf("\n");
            }while(pil != 4);
            getch();
            return 0;
}


void preorder(PT root)
{
            if(root != NULL)
            {
                        printf("%s",root->info);
                        preorder(root->left);
                        preorder(root->midle);
                        preorder(root->right);
            }
}

PT NewRoot(char info[])
{
            PT dummy;
            dummy = (PT)malloc(sizeof(T)); // Alokasi memori sebesar T
            //dummy->info = info;

            strcpy(dummy->info,info);
            dummy->left = NULL;
            dummy->midle = NULL;
            dummy->right = NULL;

            return dummy;
}

void destruct(PT root)
{
            if(root != NULL)
            {
                        destruct(root->left);
                        destruct(root->midle);
                        destruct(root->right);
                        free(root); // Membersihkan memori
            }
}

void DestructTree(void)
{
            destruct(hPohon);
}

void DFS(PT root)
{
            if(root != NULL)
            {
                        printf("%s",root->info);
                        preorder(root->left);
                        preorder(root->midle);
                        preorder(root->right);
            }
}

void create(void)
{
            char pil[4];
           
            if(hPohon != NULL)
            {
                        printf("Inisialisasi Tree Baru [Y/T] : ");
                        scanf("%s",pil);

                        if(pil[0] == 'Y' || pil[0] == 'y')
                        {
                                    destruct(hPohon);
                                    hPohon = NULL;
                                    printf("Tree Reinitialized\n");
                        }
            }
            else
            {
                        hPohon = NULL;
                        printf("Tree Initialized\n");
            }
            init = true;
}

void insert(struct Tree **root,char info[])
{
            char pil[4];
            if(*root == NULL)
                        (*root) = NewRoot(info);
            else
            {
                        printf("Penunjuk di -> %s\n",(*root)->info);
                        printf("Kiri (L), Tengah (M) atau Kanan (R) : ");
                        scanf("%s",pil);
                       
                        if(pil[0] == 'R' || pil[0] == 'r')
                                    insert(&(*root)->right,info);
                        else if(pil[0] == 'M' || pil[0] == 'm')
                                    insert(&(*root)->midle,info);
                        else
                                    insert(&(*root)->left,info);

            }
}

void input(void)
{
            char info[5];
            if(!init)
                        printf("Initialized Tree Needed\n");
            else
            {
                        printf("Input data : ");
                        scanf("%s",info);
                        insert(&hPohon,info);
                        printf("Data Telah masuk di Tree\n");
            }
}

void CetakDFS(void)
{
            printf("Depth First Search : ");
            DFS(hPohon);
}

void cetak(void)
{
            if(!init)
                        printf("Initialized Tree Needed\n");
            else
                        CetakDFS();
}






LOGIKA PROGRAM:
#include
#include
#include
#include
Pertama-tama kita tuliskan file header apa saja yang akan kita gunakan dalam program ini agar fungsi-fungsi didalam file header tersebut dapat dijalankan. Salah satunya pada program ini kita menggunakan fungsi getch(), maka kita harus menuliskan file header di preprocessor #include ini.

typedef struct Tree
{
            char info[5];
            struct Tree *left;
            struct Tree *midle;
            struct Tree *right;
} T,*PT;
Selanjutnya kita mendeklarasikan struct dengan nama Tree. Didalam struct ini kita mendeklarasikan  info dengan indeks 5 tipe datanya char. Kemudian kita mendeklarasikan struct Tree*left, Tree*midle, dan Tree*right. Lalu tipe dari struct ini adalah T. Dan pointer yang menunjuk dari struct ini *PT.

#define true 1
#define false 0
char init = false;

void preorder(PT root);
PT NewRoot(char info[]);
void destruct(PT root);
void DestructTree();
void DFS(PT root);
void create();
void insert(struct Tree **root,char info[]);
void input();
void CetakDFS();
void cetak();
PT hPohon = {0};
Setelah kita membuat struct, kita mendefinisikan konstanta true dengan nilai 1 dan konstanta false dengan nilai 0. Kemudian memberi nilai init dengan tipe data char yaitu nilai konstanta false. Lalu kita deklarasikan fungsi-fungsi yang akan kita gunakan pada program ini. Disini kita mendeklarasikan fungsi preorder dengan parameter root yang bertipe PT(struct yang tadi telah kita buat), Fungsi NewRoot dengan parameter array info, fungsi Destruct dengan parameter root, fungsi DestructTree, fungsi DFS dengan parameter root, fungsi create, fungsi insert, fungsi input, fungsi cetakDFS, dan fungsi cetak. Selanjutnya kita mendeklarasikan variabel hPohon dengan tipe data PT.


int main()
{
            int pil;
            clrscr();
            do {

                        printf("Tree\n\n");
                        printf("1. Create Tree\n");
                        printf("2. Insert Data\n");
                        printf("3. Print DFS\n");
                        printf("4. Exit\n\n");
                        printf("Pilihan [1..4] : ");
                        scanf("%d",&pil);
                        switch(pil)
                        {
                                    case 1:
                                                create();
                                                break;
                                    case 2:
                                                input();
                                                break;
                                    case 3:
                                                cetak();
                                                break;
                                    case 4:
                                                DestructTree();
                                                break;
                                    default:
                                                printf("Pilihan salah\n");
                        }
                        printf("\n");
            }while(pil != 4);
            getch();
            return 0;
}
Sekarang kita masuk ke fungsi main. Pertama kita deklarasikan variabel pil untuk nanti menyimpan inputan user dan nilainya kita gunakan pada seleksi kondisi switch. Saat program dijalankan, program akan membersihkan layar terlebih dahulu. Kemudian kita masuk ke perulangan do...while. Program akan mencetak tampilan menu untuk menanyakan inputan nilai yang akan disimpan dalam variabel pil. Tampilan menu diatas akan terus dicetak selama kondisi nilai dari variabel pil yang diinput user tidak sama dengan 4.
Untuk setiap nilai yang diinput user untuk variabel pil, maka kita akan masuk ke seleksi kondisi switch...case. Jika nilai yang diinput adalah 1 maka program akan memanggil fungsi create. Jika nilai yang diinput adalah 2 maka program akan memanggil fungsi input. Jika nilai yang diinput adalah 3 maka program akan memanggil fungsi cetak. Jika nilai yang diinput adalah 4 maka program akan memanggil fungsi DestructTree. Tetapi jika nilai yang diinput selain 1 sampai 4 maka program akan mencetak ”Pilihan salah”.

void preorder(PT root)
{
            if(root != NULL)
            {
                        printf("%s",root->info);
                        preorder(root->left);
                        preorder(root->midle);
                        preorder(root->right);
            }
}
Sekarang kita masuk ke fungsi preorder. Didalam fungsi ini program akan mengecek apakah nilai dari parameter root tidak sama dengan null atau tidak. Jika nilai dari parameter root tidak sama dengan null maka program akan mencetak nilai dari root->info. Maksudnya adalah kita akan mencetak nilai dari info yang merupakan variabel dari struct PT yang diakses oleh root(karena root bertipe data PT).
Selanjutnya program akan memanggil fungsi preorder lagi dengan mengirimkan parameter root->left. Lalu program akan melakukan memanggil fungsi preorder lagi dengan mengirimkan parameter root->midle. Lalu program akan melakukan memanggil fungsi preorder lagi dengan mengirimkan parameter root->right.  

PT NewRoot(char info[])
{
            PT dummy;
            dummy = (PT)malloc(sizeof(T)); // Alokasi memori sebesar T
            //dummy->info = info;
            strcpy(dummy->info,info);
            dummy->left = NULL;
            dummy->midle = NULL;
            dummy->right = NULL;
            return dummy;
}
Sekarang kita masuk ke fungsi NewRoot. Didalam fungsi ini kita mendeklarasikan variabel dummy dengan tipe data PT. Lalu kita alokasikan memori sebesar T ke dalam variabel dummy. Kemudian kita akan mengkopi nilai string dari variabel info ke variabel dummy->info. Lalu memberi pada variabel dummy->left, dummy->midle, dan dummy->right sama dengan null. Setelah itu program mengembalikan nilai variabel dummy melalui parameter info.

void destruct(PT root)
{
            if(root != NULL)
            {
                        destruct(root->left);
                        destruct(root->midle);
                        destruct(root->right);
                        free(root); // Membersihkan memori
            }
}
Sekarang kita masuk ke fungsi destruct. Didalam fungsi ini program akan mengecek apakah nilai dari parameter root tidak sama dengan null atau tidak. Jika nilai dari parameter root tidak sama dengan null maka program akan memanggil fungsi destruct lagi dengan mengirimkan parameter root->left. Lalu program akan melakukan memanggil fungsi destruct lagi dengan mengirimkan parameter root->midle. Lalu program akan melakukan memanggil fungsi destruct lagi dengan mengirimkan parameter root->right. Setelah itu program akan membersihkan memori parameter root. 

void DestructTree(void)
{
            destruct(hPohon);
}
Sekarang kita masuk ke fungsi destruct. Pada fungsi DestructTree ini program akan memanggil fungsi destruct dengan mengirimkan parameter hPohon.

void DFS(PT root)
{
            if(root != NULL)
            {
                        printf("%s",root->info);
                        preorder(root->left);
                        preorder(root->midle);
                        preorder(root->right);
            }
}
Sekarang kita masuk ke fungsi DFS. Didalam fungsi ini program akan mengecek apakah nilai dari parameter root tidak sama dengan null atau tidak. Jika nilai dari parameter root tidak sama dengan null maka program akan mencetak nilai dari root->info.
Selanjutnya program akan memanggil fungsi preorder lagi dengan mengirimkan parameter root->left. Lalu program akan melakukan memanggil fungsi preorder lagi dengan mengirimkan parameter root->midle. Lalu program akan melakukan memanggil fungsi preorder lagi dengan mengirimkan parameter root->right. 

void create(void)
{
            char pil[4];
           
            if(hPohon != NULL)
            {
                        printf("Inisialisasi Tree Baru [Y/T] : ");
                        scanf("%s",pil);

                        if(pil[0] == 'Y' || pil[0] == 'y')
                        {
                                    destruct(hPohon);
                                    hPohon = NULL;
                                    printf("Tree Reinitialized\n");
                        }
            }
            else
            {
                        hPohon = NULL;
                        printf("Tree Initialized\n");
            }
            init = true;
}
Sekarang kita masuk ke fungsi create. Didalam fungsi ini kita deklarasikan string pil dengan indeks 4. Lalu program akan mengecek apakah nilai dari variabel hPohon tidak sama dengan null atau tidak. Jika nilai dari variabel hPohon tidak sama dengan null maka program akan mencetak ”Inisialisasi Tree Baru [Y/T] :”. Lalu nilai yang diinput akan dimasukkan kedalam variabel pil.
Selanjutnya nilai dari variabel pil tersebut akan diseleksi dengan perintah if. Jika nilai yang diinput adalah ”Y” atau ”y”  maka program akan memanggil fungsi destruct dengan mengirim parameter hPohon. Lalu memberi nilai variabel hPohon sama dengan null. Setelah itu mencetak ”Tree Reinitialized”.
Tetapi jika nilai yang diinput untuk variabel pil bukan ”Y” atau ”y”  maka program akan memberi nilai variabel hPohon sama dengan null. Setelah itu mencetak ”Tree Reinitialized”.
Setelah selesai dengan seleksi kondisi nilai pil untuk melakukan proses yang akan dilakukan, selanjutnya memberi nilai variabel init sama dengan true. 

void insert(struct Tree **root,char info[])
{
            char pil[4];
            if(*root == NULL)
                        (*root) = NewRoot(info);
            else
            {
                        printf("Penunjuk di -> %s\n",(*root)->info);
                        printf("Kiri (L), Tengah (M) atau Kanan (R) : ");
                        scanf("%s",pil);
                       
                        if(pil[0] == 'R' || pil[0] == 'r')
                                    insert(&(*root)->right,info);
                        else if(pil[0] == 'M' || pil[0] == 'm')
                                    insert(&(*root)->midle,info);
                        else
                                    insert(&(*root)->left,info);

            }
}
Sekarang kita masuk ke fungsi insert. Didalam fungsi ini kita deklarasikan string pil dengan indeks 4. Lalu program akan mengecek apakah nilai dari pointer *root tidak sama dengan null atau tidak. Jika nilai dari pointer *root tidak sama dengan null maka nilai dari NewRoot(info) akan ditunjuk oleh pointer *root.
Tetapi Jika nilai dari pointer *root tidak sama dengan null maka program akan mencetak ”Penunjuk di->(disertai nilai dari variabel ifo yang ditunjuk pointer *root. Selanjutnya program akan mencetak "Kiri (L), Tengah (M) atau Kanan (R) : " untuk menanyakan inputan yang akan disimpan ke dalam variabel pil.
Selanjutnya nilai dari variabel pil tersebut akan diseleksi dengan perintah if. Jika nilai yang diinput adalah ”R” atau ”r”  maka program akan memanggil fungsi insert dengan mengirim parameter (&(*root)->right,info). Tetapi jika yang diinput adalah ”M” atau ”m”  maka program akan memanggil fungsi insert dengan mengirim parameter (&(*root)->midle,info).
Tetapi jika nilai yang diinput untuk variabel pil bukan ”R” atau ”r”  maupun ”M” atau ”m” maka program akan memanggil fungsi insert dengan mengirim parameter (&(*root)->left,info).

void input(void)
{
            char info[5];
            if(!init)
                        printf("Initialized Tree Needed\n");
            else
            {
                        printf("Input data : ");
                        scanf("%s",info);
                        insert(&hPohon,info);
                        printf("Data Telah masuk di Tree\n");
            }
}
Sekarang kita masuk ke fungsi input. Didalam fungsi ini kita deklarasikan string info dengan indeks 5. Kemudian kita masuk ke seleksi kondisi if. Jika nilainya tidak init maka program akan mencetak ”Initialized Tree Needed”. Tetapi jika nilainya adalah string init maka program akan mencetak :Input data :” untuk menanyakan inputan yang akan disimpan ke dalam variabel info. Kemudian program akan memanggil fungsi insert dengan mengirimkan parameter &hPohon,info. Setelah itu program mencetak ”Data Telah masuk di Tree”.

void CetakDFS(void)
{
            printf("Depth First Search : ");
            DFS(hPohon);
}
Sekarang kita masuk ke fungsi CetakDFS. Didalam fungsi ini program akan mencetak ”Depth First Search :”. Kemudian program akan memanggil fungsi DFS dengan mengirimkan parameter hPohon.

void cetak(void)
{
            if(!init)
                        printf("Initialized Tree Needed\n");
            else
                        CetakDFS();
}
Sekarang kita masuk ke fungsi cetak. Didalam fungsi ini kita masuk ke seleksi kondisi if. Jika nilainya tidak init maka program akan mencetak ”Initialized Tree Needed”. Tetapi jika nilainya adalah string init maka program akan memanggil fungsi CetakDFS.


OUTPUT PROGRAM:
Untuk memeriksa pembuatan program tekan tombol Alt+F9. Jika tidak ada kesalahan, tekan sembarang tombol lalu tekan Ctrl+F9. Kemudian setelah kita input maka hasilnya adalah:



 







 

RL.power | CLEAR & FAST Copyright © 2010 LKart Theme is Designed by Lasantha