@AstikaAyuningtyas. Diberdayakan oleh Blogger.
RSS

Contoh Binary Tree

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);
}

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Linked List


Single Linked List-Double Linked List-Circular 
Single Linked 
Bila struktur data sebuah node hanya memiliki satu tautan atas node berikutnya dalam sebuah Linked List/ memiliki satu arah pointer, maka daftar bertaut tersebut dinamakan sebagai Single Liked List.
Double Linked List
Struktur data yang memiliki 2 pointer penunjuk, sehingga bisa saling terhubung antara elemen satu dengan elemen lainnya. Menggunakan struktur data seperti berikut :
  • data
  • pointer penunjuk elemen setelahnya (next)
  • pointer penunjuk elemen sebelumnya (prev)
Berbeda halnya dengan Single Linked List, pada Double Linked List, struktur data atas tiap-tiap node memiliki rujukan pada node sebelum dan berikutnya. pointer menunjuk pada dua arah.

Circular linked List  
Pada dua linked list sebelumnya, node terakhir dalam daftar tersebut merujuk pada null yang artinya akhir dari sebuah daftar, begitu pula null sebagai rujukan node sebelumnya pada node pertama bila daftar yang dimaksudkan adalah Double Linked List.

Perbedaan dari ketiganya àpada Single Liked list pointer hanya menunjuk ke satu arah dan berakhir pada elemen NULL, Sedangkan pada Double Linked List pointer menunjuk pada dua arah, yaitu ke arah elemen sebelumnya dan elemen berikutnya, walupun sama-sama berakhir pada elemen NULL. Dan pada Circular Linked List, memiliki satu arah pointer, namun pada elemen terakhir akan kembali mengarah pada elemen pertama, bukan NULL.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

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');
}

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

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();
}

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Stack and Queue




Stack  

Prinsip Stack adalah LIFO (Last In First Out) ! Yang masuk paling belakang akan memiliki prioritas untuk keluar paling depan

Pada stack, operasi penambahan dan penghapusan elemen dilakukan di satu ujung. Elemen yang terakhir kali dimasukkan akan berada paling dekat dengan ujung dianggap paling atas sehingga pada operasi penghapusan, elemen teratas tersebut akan dihapus paling awal

Stack mempunyai satu pointer yang selalu menunjuk ke arah top.

Ilustrasi Stack

Queue

Queue (antrian) beroperasi dalam cara FIFO (First-In-First-Out). !Elemen yang pertama masuk merupakan elemen yang pertama ke luar.

Pada queue, operasi tersebut dilakukan di tempat yang berbeda.Penambahan elemen selalu dilakukan melalui salah satu ujung, menempati posisi dibelakang elemen-elemen yang sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling awal atau elemen terdepan.
Queue mempunyai dua pointer yang menunjuk ke arah head dan tail.

Ilustrasi Queue

PERSAMAAN STACK DENGAN QUEUE

Sama-sama menunggu panggilan data.
Sama-sama  diproses pada saat ada data yang masuk tetapi dilihat menurut waktu masuk data tersebut.




  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS