JAVA Queue/Stack 구현하기
by 으렴자바를 활용해서 정수 값을 넣고 출력하는 것을 만들어 보았다.
data산출 방식인 Stack과 Queue 두가지 방식을 사용해서 선택하여 숫자를 출력하는 것이다.
Queue는 선입선출로 data가 출력된다
Frist In Frist Out(FIFO)으로 먼저 들어간 data가 맨 먼저 나가는 형식이다.
위 그림과 같이 맨 먼저 push된 data A가 맨 첫번째로 pop되는 것을 볼 수 있다.
Stack방식은 다음 그림과 같다.
Stack은 위 그림처럼 컵과 같다.
맨 처음 들어간 data A는 맨마지막 들어간 C가 나오고 B가 나오고 나서야 맨 마지막에 나올 수 있다.
이러한 방식을 Frist In Last Out(FILO)이라고 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 |
package D0321;
import java.util.Scanner;
abstract class Memory {
public int [] arr;
public int buf,cnt;
public Memory()
{
arr = new int [20];
buf = 0;
cnt = 0;
}
Scanner sc = new Scanner(System.in);
public void push()
{
System.out.println("push push baby~");
buf = sc.nextInt();
arr[cnt] = buf;
if(arr[19]!=0){System.out.println("full");}
cnt++;
System.out.println("complete!");
}
abstract void pop();
}
|
cs |
Memory라는 class를 생성했다. 이 class는 추상클래스(abstract class)로 형성되었다.
그리고 추상 메소드( abstract method → pop )를 만들었다.
push는 Stack과 Queue의 공통된 함수로 활용 할 수 있기 때문에 부모class에 넣었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
public class Queue extends Memory {
Queue(){}
@Override
public void pop()
{
System.out.println("Queue pop");
System.out.println(arr[0]);
for(int i=1;i<arr.length;i++)
{
arr[i] = arr[i+1];
if(arr[i]==0) {break;}
}
}
}
|
cs |
Queue는 Memory class의 super class이다.
Queue의 pop은 항상 array의 0번째 숫자만 출력한다.
그렇기 때문에 0번째가 비지 않게 만들기 위해서 for문을 활용해서 앞으로 값을 당겨 넣어준다.
그리고 만약 arr[i]번째의 값이 0(null)일 경우 for문을 돌리지 말아라고 예외처리를 해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13 |
public class Stack extends Memory {
Stack(){}
@Override
public void pop()
{
System.out.println("stack pop pop pop!");
System.out.println(arr[--cnt]);
}
} |
cs |
Stack은 cnt변수를 사용해서 count만큼의 배열 번째에 있는 값을 출력 할수 있게 만들었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 |
package D0321;
import java.util.Scanner;
public class Menu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stack st = new Stack();
Queue qu = new Queue();
int mainum,num;
while(true) {
System.out.println("select 1. Stack 2. Queue");
mainum = sc.nextInt();
switch(mainum)
{
case 1: System.out.println("stack 1.push 2.pop");
num= sc.nextInt();
switch(num)
{
case 1: st.push();break;
case 2: st.pop();break;
}
break;
case 2: System.out.println("stack 1.push 2.pop");
num= sc.nextInt();
switch(num)
{
case 1: st.push();break;
case 2: st.pop();break;
}
break;
case 3: System.exit(0); break;
default : System.out.println("err!"); break;
}
}
}
}
|
cs |
기본 메뉴로 Stack과 Queue를 has-a하고 있다.
예외처리는 되어있지 않다.
'Programming Language > JAVA' 카테고리의 다른 글
JAVA의 접근 지정자 (0) | 2019.02.20 |
---|---|
정적 바인딩과 동적 바인딩 (0) | 2019.02.19 |
Java Class에는 무엇이 들어갈까? (0) | 2019.02.19 |
JAVA란 무엇인가? (0) | 2019.02.19 |
DESIGN-PATTERN :: Strategy Pattern 스트래티지 패턴 (0) | 2019.01.05 |
사이트의 정보
코딩하렴
으렴