- Linear Queue에 대한 개념만 읽고 코딩을 시작했는데 뭔가 비효율적이라는 생각이 들어서 효율적으로 구현하기 시작

- 그 결과 원형 큐(Circular Queue)가 되었다.


package dailyCoding;


interface Queue{

    boolean isEmpty();

    void enQueue(char element);

    void deQueue();

    void printQueue();

}


class ArrayQueue implements Queue{

    public int front;

    public int rear;

    public int size;

    public char arr[];

    public int count;


    public ArrayQueue(int size){

        this.size = size;

        this.front = -1;

        this.rear = -1;

        this.arr = new char[size];

        this.count = -1;

    }


    @Override

    public boolean isEmpty() {

        if(rear < 0){

            return true;

        }

        return false;

    }


    @Override

    public void enQueue(char element) {

        count++;

        System.out.print("enQueue ) " + (count+1) + " &&& ");

        

        

        if(count > size-1){

            count = size-1;

            System.out.println("It's full.");

            return;

        }

        rear++;

        

        if(rear < size){

            arr[rear] = element;

        }else{

            rear = 0;

            if(rear < front){

                arr[rear] = element;

            }

        }

        System.out.println("rear : " + rear + " front : " + front);

    }


    @Override

    public void deQueue() {

        if(count > -1){

            count--;

        }

        System.out.print("deQueue ) " + (count+1) + " &&& ");

        if(!isEmpty()){

            front++;

            if(front >= size){

               front = 0; 

            }

            if(front == rear){

                System.out.println("It's empty!");

                front = -1;

                rear = -1;

            }else if(front > size){

                front = 0;

            }

        }else{

            System.out.println("It's empty!");

        }

        System.out.println("rear : " + rear + " front : " + front);

    }


    @Override

    public void printQueue(){

        System.out.print("*** Print Queue :");

        if(!isEmpty()){

            if(front < rear && rear < size){

                for(int i=front+1; i<=rear; i++){

                    System.out.print(" " + arr[i]);

                }

            }else{

                if(rear < size ){

                    for(int i=0; i<=rear; i++){

                        System.out.print(arr[i] + " ");

                    }

                    for(int i=front+1; i<size; i++){

                        System.out.print(arr[i] + " ");

                    }

                }

            }

        }else{

            System.out.print("It's empty!");

        }

        System.out.println("");

    }

}


public class dailyCode{

    public static void main(String []args){

        ArrayQueue aq = new ArrayQueue(5);


        aq.enQueue('1');

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.enQueue('2');

        aq.printQueue();

        aq.enQueue('3');

        aq.printQueue();

        aq.enQueue('4');

        aq.printQueue();

        aq.enQueue('5');

        aq.printQueue();

        aq.enQueue('6');

        aq.printQueue();

        aq.enQueue('7');

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.enQueue('A');

        aq.printQueue();

        aq.enQueue('B');

        aq.printQueue();

        aq.enQueue('C');

        aq.printQueue();

        aq.enQueue('C');

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.deQueue();

        aq.printQueue();

        aq.enQueue('C');

        aq.printQueue();

    }


'프로그래밍 > JAVA' 카테고리의 다른 글

자바의 객체 (3)  (0) 2020.07.20
자바의 객체 (2)  (0) 2020.07.20
자바의 객체 (1)  (0) 2019.03.19
DatagramSocket Example  (0) 2016.12.03
Implement Stack  (0) 2016.12.01
LinkedList Implementation  (0) 2016.11.29
How to get google server time (URLConnection Example)  (0) 2016.11.27





import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.Inet4Address;

import java.net.InetAddress;

import java.util.Random;


public class dailyCode{

public static void main(String[] args){

try {

// InetAddress addr = Inet4Address.getByName("0.0.0.0");

InetAddress addr = Inet4Address.getLocalHost();

Random ran = new Random();

int port = ran.nextInt(65535) + 0;

System.out.println("ip = " + addr + " port = " + port);

DatagramSocket socket = new DatagramSocket(port, addr);

System.out.println("getLocalAddress = " + socket.getLocalAddress() + " getLocalPort = " + socket.getLocalPort());

System.out.println("getInetAddress = " + socket.getInetAddress() + " getLocalSocketAddress = " + socket.getLocalSocketAddress());

System.out.println("getRemoteSocketAddress = " + socket.getRemoteSocketAddress() + " getReuseAddress = " + socket.getReuseAddress());

String str = "111";

DatagramPacket sendPacket = new DatagramPacket(str.getBytes(), str.getBytes().length, addr, port);

String msg = new String(sendPacket.getData(), 0, sendPacket.getLength());

System.out.println("To Server : " + msg);

socket.send(sendPacket);

DatagramPacket receivePacket = new DatagramPacket(str.getBytes(), str.getBytes().length);

socket.receive(receivePacket);

msg = new String(receivePacket.getData(), 0, receivePacket.getLength());

System.out.println("From Client : " + msg);

} catch (Exception e) {

e.printStackTrace();

}

}



'프로그래밍 > JAVA' 카테고리의 다른 글

자바의 객체 (2)  (0) 2020.07.20
자바의 객체 (1)  (0) 2019.03.19
원형 큐(Circular Queue)  (0) 2016.12.08
Implement Stack  (0) 2016.12.01
LinkedList Implementation  (0) 2016.11.29
How to get google server time (URLConnection Example)  (0) 2016.11.27
URL class Example  (0) 2016.11.27



- LIFO(Last In First Out)

- top은 마지막에 들어온 element를 가르킴


interface Stack{

boolean isEmpty();

boolean isFull();

void push(char item);

char pop();

}


class ArrayStack implements Stack{

private int top;

private int size;

private char[] arr;

public ArrayStack(int size){

this.size = size;

arr = new char[this.size];

top = -1;

}

@Override

public boolean isEmpty(){

if(this.top == -1){

return true;

}

return false;

}

@Override

public boolean isFull(){

if(this.size-1 <= this.top){

return true;

}

return false;

}


@Override

public void push(char element) {

if(!isFull()){

System.out.println("push()");

arr[++this.top] = element;

}else{

System.out.println("[push()] It's full.");

}

}


@Override

public char pop() {

if(!isEmpty()){

System.out.println("pop()");

return arr[this.top--];

}

System.out.println("[pop()] It's empty.");

return 0;

}

public void printStack(){

if(isEmpty()){

System.out.println("[printStack()] It's empty.\n");

}else{

System.out.print("arr >> ");

for(int i=0; i<=this.top; i++){

System.out.print(this.arr[i] + " ");

}

System.out.println("\n");

}

}

}


public class dailyCode{

public static void main(String[] args){

final int MAX_STACK_SIZE = 5;

ArrayStack stack = new ArrayStack(MAX_STACK_SIZE);

stack.pop();

stack.printStack();

stack.push('A');

stack.printStack();

stack.push('B');

stack.printStack();

stack.push('C');

stack.printStack();

stack.push('D');

stack.printStack();

stack.push('E');

stack.printStack();

stack.push('F');

stack.printStack();

stack.pop();

stack.printStack();

stack.push('F');

stack.printStack();

}


'프로그래밍 > JAVA' 카테고리의 다른 글

자바의 객체 (1)  (0) 2019.03.19
원형 큐(Circular Queue)  (0) 2016.12.08
DatagramSocket Example  (0) 2016.12.03
LinkedList Implementation  (0) 2016.11.29
How to get google server time (URLConnection Example)  (0) 2016.11.27
URL class Example  (0) 2016.11.27
Find Google IP (InetAddress class Example)  (0) 2016.11.25

+ Recent posts