Rabu, 01 Mei 2013

Widgets

Single Linked List

Berikut ini merupakan contoh program yang menggunakan 2 metode, yaitu :


LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)
FIFO (First In First Out), aplikasinya : Queue (Antrean) 

Sourcecode :
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

struct Node
{
   int data;
   Node *next;
};

Node *head, *tail;

void headerProgram();
void menu();

void metodeLIFO();
void metodeFIFO();

void inisialisasi();
void insertData();
void removeDepan();
void removeBelakang();

void bersih();
void tampil();

void main()
{
   char pilihMetode;
   int ulangMetode = 1;

   do
   {


         headerProgram();

         cout<<"Pilih metode input data : \n";
         cout<<"\n";
         cout<<"1. LIFO (Last In First Out)  : Stack (Tumpukan)\n";
         cout<<"2. FIFO (First In First Out) : Queue (Antrian)\n";
         cout<<"3. Exit \n";
         cout<<endl;

         printf("Masukkan Pilihan Anda : ");
         pilihMetode = getche();
         printf("\n");

         switch(pilihMetode)
         {
         case '1' :
               metodeLIFO();
               break;
         case '2' :
               metodeFIFO();
               break;
         case '3' :
         exit(0);
         break;
         default :
         {
         puts("\nMaaf...Kode pilihan yang Anda masukkan Salah!!!\n");
         puts("::: Tekan sembarang tombol untuk kembali ke menu :::");
         getch();
         }
         break;
         }
   }
   while(ulangMetode == 1);
}

void headerProgram()
{
   cout<<"±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±\n";
   cout<<"±  SINGLE LINKED LIST WITH LIFO AND FIFO  ±\n";
   cout<<"±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±\n";
   cout<<endl;
}

void menu()
{
   cout<<"======== Menu :\========\n";
   cout<<"\n\n";
   cout<<"1. Insert data\n";
   cout<<"2. Remove data\n";
   cout<<"3. Print data linked list\n";
   cout<<"4. Clear data linked list\n";
   cout<<"5. Kembali ke pilihan metode\n";
   cout<<"6. Exit\n";
   cout<<endl;
}


void metodeLIFO()
{
   char pilihMenu;
   int ulang = 1;

   do
   {
         system("cls");

         headerProgram();

         cout<<"-- LIFO --\n";
         cout<<endl;

         menu();

         printf("Pilihan : ");
         pilihMenu = getche();
         printf("\n\n");

         switch(pilihMenu)
         {
         case '1' :
               insertData();
               break;
         case '2' :
               removeBelakang();
               break;
         case '3' :
               tampil();
               break;
         case '4' :
               bersih();
               break;
         case '5' :
               ulang = 0;
               break;
         case '6' :
         exit(0);
         break;
         default :
         {
         puts("Maaf... Pilihan menu yang Anda pilih Salah!\n");
         puts("::: Tekan sembarang tombol untuk kembali ke menu :::");
         getch();
         }
         break;
         }
   }
   while(ulang == 1);
}

void metodeFIFO()
{
   char pilihMenu;
   int ulang = 1;

   do
   {
         system("cls");

         headerProgram();

         cout<<"-- FIFO --\n";
         cout<<endl;

         menu();

         printf("Pilihan : ");
         pilihMenu = getche();
         printf("\n\n");

         switch(pilihMenu)
         {
         case '1' :
               insertData();
               break;
         case '2' :
               removeDepan();
               break;
         case '3' :
               tampil();
               break;
         case '4' :
               bersih();
               break;
         case '5' :
               ulang = 0;
               break;
         case '6' :
         exit(0);
         break;
         default :
         {
         puts("Maaf... Pilihan menu yang Anda Pilih Salah!\n");
         puts("::: Tekan sembarang tombol untuk kembali ke menu :::");
         getch();
         }
         break;
         }
   }
   while(ulang == 1);
}

void inisialisasi()
{
   head = NULL;
   tail = NULL;
}

void insertData()
{
   int angka;
   Node *nodeBaru;
   nodeBaru = new Node;

   cout<<"Masukkan bilangan (integer) : "; cin>>angka;

   nodeBaru->data = angka;
   nodeBaru->next = NULL;

   if(tail == NULL)
   {
         head = tail = nodeBaru;
         tail->next = NULL;
   }
   else
   {
         tail->next = nodeBaru;
         tail = nodeBaru;
   }

   printf("Data %i masuk!\n\n", angka);
   puts("::: Tekan sembarang tombol untuk kembali ke menu :::");
   getch();
}

void removeDepan()
{
   int elDel;
   Node *del;
   del = new Node;

   if(tail != NULL)
   {
         del = head;
         elDel = del->data;

         if(head == tail)
         {
               head = head->next;
               tail = head;
         }
         else
               head = head->next;

         delete del;

         printf("Data %i telah terhapus!\n\n", elDel);
   }
   else
   {
  puts("--> Linked list telah kosong! Tidak ada data yang dapat dihapus! <--\n");
   }

   puts("::: Tekan sembarang tombol untuk kembali ke menu :::");
   getch();
}

void removeBelakang()
{
   int elDel;
   Node *del, *prevTail;
   del = new Node;

   if(tail != NULL)
   {
         del = tail;
         elDel = del->data;

         if(tail == head)
         {
               inisialisasi();
         }
         else
         {
               prevTail = head;

               while(prevTail->next != tail)
                     prevTail = prevTail->next;

               tail = prevTail;
               tail->next = NULL;
         }

         delete del;

         printf("Data %i telah terhapus!\n\n", elDel);
   }
   else
   {
  puts("--> Linked list kosong! Tidak ada data yang dapat dihapus! <--\n");
   }

   puts("::: Tekan sembarang tombol untuk kembali ke menu :::");
   getch();
}

void bersih()
{
   Node *clear, *point;

   if(tail != NULL)
   {
         point = head;

         while(point != NULL)
         {
               clear = point;
               point = point->next;

               delete clear;
         }

         inisialisasi();

         puts("--> Linked list sudah dikosongkan! <--\n");
   }
   else
         puts("--> Linked list masih kosong! <--\n");

   puts("::: Tekan sembarang tombol untuk kembali ke menu :::");
   getch();
}

void tampil()
{
   Node *see;

   see = head;

   if(tail != NULL)
   {
         puts("====================================");
         puts("Data yang ada di dalam linked list :");
         puts("====================================");
         puts("");

         while(see != NULL)
         {
               printf("%i ", see->data);
               see = see->next;
         }
         puts("\n");
   }
   else
         puts("--> Linked list masih dalam keadaan kosong <--\n");

   puts("::: Tekan sembarang tombol untuk kembali ke menu :::");
   getch();
}

Printscreen Tampilan :






0 komentar:

Posting Komentar