Stack & Queue : Implementasi Palindrome dalam Java

7 04 2010

Display Output Program :


Algoritma Program :

1.Program menampilkan statemen selamat datang.

2.Program meminta user untuk memilih operasi yang ingin dikerjakan.

2.1.Operasi Tambah.

2.1.1.Program meminta user untuk memasukkan node yang akan ditambahkan.

2.1.2.Program memanggil method Tambah dari class classop.

2.1.2.1.Linked list belum berisi node (head = null)

2.1.2.1.1.Head dan tail ditempatkan pada node tersebut.

2.1.2.2.Linked list berisi node.

2.1.2.2.1.tail.next ditempatkan pada node tersebut.

2.1.2.2.2.Tail ditempatkan pada tail.next.

2.1.2.2.3.Tail.next ditempatkan pada head.

2.1.3.Program menanyakan apakah user ingin menambahkan node lagi.

2.1.3.1.Program akan menjalankan operasi Tambah kembali.

2.1.3.2.Program menghentikan operasi Tambah.

2.2.Operasi Hapus.

2.2.1.Program meminta user memasukkan node yang akan dihapus.

2.2.2.Program memanggil method Hapus dari class classop.

2.2.2.1.Selama node yang akan dihapus (hapus1) bukan null atau ada pada linkedlist, akan terjadi looping.

2.2.2.1.1.Hapus1 sama dengan hapus1.input.

2.2.2.1.1.1.Hapus1 adalah head.

2.2.2.1.1.1.1.Head ditempatkan pada hapus1.next.

2.2.2.1.1.1.2.Hapus1 diinisialisasi dengan nilai null.

2.2.2.1.1.1.3.Tail.next ditempatkan pada head dan operasi Hapus dihentikan.

2.2.2.1.1.2.Hapus1  bukan head.

2.2.2.1.1.2.1.Hapus1 adalah tail

2.2.2.1.1.2.1.1.Hapus1.next ditempatkan pada head.next.

2.2.2.1.1.2.1.2.Inisialisasi hapus1 bernilai null.

2.2.2.1.1.2.1.3.Tail ditempatkan pada hapus2.

2.2.2.1.1.2.1.4.Tail.next ditempatkan pada head dan operasi dihentikan.

2.2.2.1.1.2.2.Hapus1 bukan tail

2.2.2.1.1.2.2.1.Hapus2.next ditempatkan pada hapus1.next.

2.2.2.1.1.2.2.2.Inisialisasi hapus1 dengan nilai null dan operasi dihentikan.

2.2.2.1.2.Hapus1 tidak sama dengan hapus1.input.

2.2.2.1.2.1.Hapus2 ditempatkan pada hapus1.

2.2.2.1.2.2.Hapus1 ditempatkan pada hapus1.next.

2.2.2.2.1.Program menampilkan laporan bahwa node yang akan dihapus tidak ditemukan.

2.3.Operasi Cetak.

2.3.1.Program memanggil method Cetak dari class classop

2.3.2.Inisialisasi variable cetak = head.

2.3.3.Selama cetak tidak berisi null akan dilooping sebanyak 20 kali cetak node.

2.3.3.1.Mencetak cetak.input.

2.3.3.2.Menempatkan cetak pada cetak.next.

2.4.Program menampilkan laporan bahwa operasi yang dipilih tidak ada.

3.Program menanyakan apakah user ingin memilih operasi yang lain.

3.1.Program mengulangi dari awal (looping).

3.2.Program menampilkan statemen terima kasih.

Source Code Program :

import javax.swing.*;

public class PALINDROME3

{

public static void main(String[] args)

{

classop Operasi=new classop(); //membuat obyek dari class Operasi

JOptionPane.showMessageDialog(null,"     MODUL 2 PSD\n     PALINDROME\nOleh KELOMPOK 84","SELAMAT DATANG",JOptionPane.INFORMATION_MESSAGE);

System.out.println("               MODUL 2 PSD PALINDROME Oleh KELOMPOK 84");

System.out.println("               <<<<<<<=========================>>>>>>>\n");

int jawab3=0;

do

{

Operasi=new classop(); //obyek diinisialisasi kembali

String insert=JOptionPane.showInputDialog("Insert String :");

//duplikasi String yang diinsertkan

String insert1=insert;

String insert2=insert;

String insert3=insert;

System.out.println("insert : ("+insert+")");

int sps1=0, sps2=0;

for(int a=0; a<insert1.length(); a++) //membaca String dari depan

{

char kar1=insert1.charAt(a); //mendapatkan char dari String

if(kar1==' ')

sps1++; //hitung jumlah spasi depan

else

break; //berhenti setelah bertemu char bukan spasi

}

for(int b=insert2.length()-1; b>=0; b--) //membaca String dari belakang

{

char kar2=insert2.charAt(b); //mendapatkan char dari String

if(kar2==' ')

sps2++; //hitung jumlah spasi belakang

else

break; //berhenti setelah bertemu char bukan spasi

}

int index=insert.length()-(sps1+sps2); //jumlah char dari String tanpa spasi depan belakang

for(int i=sps1; i<index/2+sps1; i++) //1/2 bagian String

{

char karQ=insert.charAt(i);

Operasi.InsertQ(karQ); //simpan char dalam que

}

Operasi.PrintQ();

System.out.println();

for(int j=index/2+sps1; j<index+sps1; j++) //1/2 bagian selanjutnya dari String

{

char karS=insert.charAt(j);

Operasi.InsertS(karS); //simpan char dalam stack

}

Operasi.PrintS();

int tesStr=Operasi.Cek(index); //panggil methode untuk cek palindrome & simpan return value di tesStr

System.out.print("\nKata atau Frase (");

for(int c=sps1; c<index+sps1; c++) //mencetak String tanpa spasi depan belakang

{

char kar3=insert3.charAt(c);

System.out.print(kar3);

}

if(tesStr==1) //flag 1 jika palindrome

System.out.println(") adalah PALINDROME");

else //flag 0 jika bukan palindrome

System.out.println(") BUKAN PALINDROME");

String jawab2=JOptionPane.showInputDialog("Tekan '1' jika ingin Insert String yang lain");

jawab3=Integer.parseInt(jawab2);

}

while(jawab3==1); //looping lagi

JOptionPane.showMessageDialog(null,"TERIMA KASIH ATAS KUNJUNGAN ANDA","SAMPAI JUMPA DI MODUL 3",JOptionPane.INFORMATION_MESSAGE);

}

}

//============================================================================//

class classnd

{

public char inputQ, inputS;

public classnd next, prev;

}

//============================================================================//

class classop

{

private classnd rear, front, front1, top, top1, bottom, printQ, printS;

private int nitemQ, nitemS;

public void classop() //konstruktor

{

rear=null;

front=null;

top=null;

bottom=null;

nitemQ=0;

nitemS=0;

}

public void InsertQ(char karQ) //methode untuk memasukkan node dalam que

{

classnd node=new classnd();

node.inputQ=karQ;

if(rear==null && front==null)

{

rear=front=node;

}

else

{

node.prev=rear;

rear.next=node;

rear=rear.next;

}

nitemQ++;

}

public void InsertS(char karS) //methode untuk memasukkan node dalam stack

{

classnd node=new classnd();

node.inputS=karS;

if(bottom==null)

{

bottom=top=node;

}

else

{

node.prev=top;

top.next=node;

top=top.next;

}

nitemS++;

}

public void PrintQ() //mencetak que

{

classnd print=rear;

System.out.println("\nMencetak Que :");

System.out.print("null");

while(nitemQ!=0)

{

System.out.print("->"+print.inputQ);

print=print.prev;

--nitemQ;

}

System.out.println();

}

public void PrintS() //mencetak stack

{

classnd print=bottom;

System.out.println("\nMencetak Stack :");

System.out.print("null");

while(nitemS!=0)

{

System.out.print("->"+print.inputS);

print=print.next;

--nitemS;

}

System.out.println();

}

public char Remove(int indQ) //mengeluarkan node dari que

{

front1=front;

nitemQ=indQ;

if(nitemQ!=0)

{

if(nitemQ!=1)

front=front.next;

else

front.next=rear.next=front.prev=rear.prev=front=rear=null;

}

return front1.inputQ; //return node yang diRemove

}

public char Pop(int indS) //mengeluarkan node dari stack

{

top1=top;

nitemS=indS;

if(nitemS!=0)

{

if(nitemS!=1)

{

top.next=top;

top=top.prev;

top.next=null;

}

else

top.next=top.prev=top=null;

}

return top1.inputS; //return node yg diPop

}

public int Cek(int ind) //cek kesamaan char

{

int pos=ind/2;

int l=0;

for(int k=0; k<ind/2; k++)

{

char matchQ=Remove(pos);

char matchS=Pop(pos);

pos--;

//bandingkan char yag diRemove dg yg diPop

if(matchQ!=matchS)

System.out.println("tidak sama > "+matchQ+"!="+matchS);

else

{

System.out.println("sama > "+matchQ+"=="+matchS);

l++; //jumlah char yg sama

}

}

if(l==ind/2) //jika jumlah char yg sama bernilai sama dengan 1/2 jumlah char

return 1;

else

return 0;

}

}

Posted By : Evan Yofiyanto @ Evan’s Blog : Kuliah Informatika (kuliahinformatika.wordpress.com)

[FREAX]


Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: