Selasa, 03 Juni 2014

CIRCULAR QUEUE



Queque (Antrian)  bersifat abstrak dan dikenal dengan istilah konsep FIFO (First In First Out). Konsep tersebut berarti bahwa item data yang pertama kali masuk kedalam antrian / queue maka item data tersebutlah yang akan dikelurakan pertama kali. Dan sebaliknya jika sebuah item data masuk ke dalam antrian yang terakhir kali, maka item tersebut akan keluar juga paling akhir. Operasi Dasar :
n  Enqueue
            Memasukkan item ke dalam queue.
n  Dequeue
            Mengeluarkan item dari queue.
n  Is_Full
            Mengecek apakah queue penuh.
n  Is_Empty
            Mengecek apakah queue kosong.
n  Initialize
            Membuat queue untuk pertama kali.


SourceCode :


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @authortoshiba
 */
import java.util.Scanner;
public class MenuQLL {
    public static void main(String args[])
    {
        Scanner sc = new Scanner (System.in);
        System.out.print("Berapa data yang akan dimasukkan:");
        int max = sc.nextInt();
        QueueLinkList queue = new QueueLinkList(max);
        int pilihan=0;
       
        while(pilihan != 3)
        {
            System.out.println("Menu");
            System.out.print("1.insert\n2.remove\n3.exit\npilihan Anda:");
            pilihan = sc.nextInt();
            switch (pilihan)
            {
                case 1 : System.out.println("insert queue:");
                        System.out.print("Masukkan data:");
                        int temp;
                        temp = sc.nextInt();
                        queue.enqueue(temp);
                        queue.display();
                break;
                case 2 : System.out.println("remove queue:");
                        queue.dequeue();
                        queue.display();
                break;
                case 3 : System.out.println("exit");
            }}}}
              class item        //atau node/simpul
             {
                public int data; // data item
                public item next; // next node link in list
                public item prev; // previous node link in list
                public item(int id) // constructor
                {
                                data = id; // initialize data
                } // set to null)
                public void displayLink() // display ourself
                {
                                System.out.print("{" + data + "} ");
                }
            } // end class Link
             class QueueLinkList
            {
                private item front; // ref to first link on list
                private item rear; // ref to last link on list
             int jumlah;
             int max;
                public QueueLinkList(int m ) // constructor
                {
              max = m;
              jumlah = 0;
              front = rear = null; // no items on list yet
                }
                public boolean isEmpty() // true if list is empty
                {
                                return (front==null);
                }
                public void enqueue(int id)         //node baru selalu di top // void hanya sesuai prosedur hanya langkah2 dan untuk dirinya sendiri
                { // make new link
               item newitem = new item(id);
               if (jumlah < max)
              {
                               
                                if (front == null)                // the first node created
                                {
                                                front = rear = newitem; // first --> newLink
                        newitem.next = front;
                        newitem.prev = front;
                                }
                                else        // the second node and the next node
                                {
                                                rear.next = newitem;     //next dr top (awal) diarahkan ke node baru
                                                newitem.prev = rear;     //prev dr node baru diarahkan ke tail (awal)
                        newitem.next = front;   //buat circular
                        front.prev = newitem;
                                                rear = newitem;                               //top (baru) diarahkan ke node baru
                                                //newitem.next = null;
                                }
                jumlah++;
                }
                else
               {
                System.out.println("Kapasitas penuh. Terjadi pergesaran item");
                front=front.next;
                front.prev=newitem;
                newitem.next=front;
                rear.next=newitem;
                newitem.prev=rear;
                rear=newitem;
                }
                }
                public item dequeue() // delete first item
                {              item temp = null;
                                if (front == null)                // queue is empty
                                                System.out.println("Queue is empty");
                                else if (front == rear)                      // queue is only one data
                                {
                                                temp = front;
                                                front = rear = null;
                        jumlah--;
                                }
                                else        // queue has more than one data
                                {
                                                temp = front; // save reference to link
                                                front = front.next; // delete it: first-->old next
                        rear.next = front;
                        front.prev = rear;
                        jumlah--;
                                                //front.prev = null;
                                }
                                return temp;
                }
                public void display()
                {
                                item current = front; // start from the first data
                //item stop = front;
                                if (current == null)    //queue kosong
                                                System.out.println("The Queue is empty");
                else if (current.next == front) //node hanya 1
                {
                    current.displayLink();
                }
                else //if (current.next != front)
                {
                    for(;current.next != front;) // until end of list,
                                                {
                                                                current.displayLink(); // print data
                                                                current = current.next; // move to next link
                                                }
                    current.displayLink();
                }System.out.println("");
                }
                } // end class LinkList

Outputnya :




Tidak ada komentar:

Posting Komentar