🌱 오늘의 주제 : Stack과 Queue
🌱 Stack
- 마지막에 저장한 데이터를 가장 먼저 꺼내는 구조 (LIFO : last in first out)
- 동전통과 같은 구조로 양 옆과 바닥이 막혀 있어서 한 방향으로만 뺄 수 있는 구조
- ArrayList와 같은 배열기반의 컬렉션 클래스에 적합.
🌱 Queue
- 처음에 저장한 데이터를 가장 먼저 꺼내는 구조.(FIFO : first in first out)
- 양 옆만 막혀 있고 위아래로 뚫려 있어서 한 방향으로는 넣고 한 방향으로는 빼는 파이프 구조
- 데이터의 추가/삭제가 쉬운 LinkedList로 구현하는 것이 적합.
🌱 Stack과 Queue의 메서드
🌱Stack과 Queue 예제
package Stack_And_Queue;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Ex11_2 {
public static void main(String[] args) {
// Stack과 Queue 예제
Stack st = new Stack();
Queue q = new LinkedList(); //Queue 인터페이스의 구현체인 LinkedList를 사용
st.push("0");
st.push("1");
st.push("2");
q.offer("0");
q.offer("1");
q.offer("2");
System.out.println("=Stack=");
while(!st.empty()) {
System.out.println(st.pop()); // 스택에 요소 하나를 꺼내서 출력
}
System.out.println("= Queue =");
while(!q.isEmpty()) {
System.out.println(q.poll()); // 큐에서 요소 하나를 꺼내서 출력
}
}
}
-------
<결과>
=Stack=
2
1
0
= Queue =
0
1
2
package Stack_And_Queue;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Ex11_4 {
// Stack과 Queue의 활용 예제2
static Queue q = new LinkedList(); //Queue가 인터페이스라서 LinkedList 객체 생성 사용.
static final int MAX_SIZE = 5; // Queue에 최대 5개까지만 저장
public static void main(String[] args) {
System.out.println("help를 입력하면 도움말을 볼 수 있습니다.");
while(true) {
System.out.println(">>");
try {
// 화면으로부터 라인단위로 입력받는다.
Scanner s = new Scanner(System.in);
String input = s.nextLine().trim(); // 공백 삭제.
if("".equals(input))
continue;
if(input.equalsIgnoreCase("q")) {
System.exit(0);
} else if (input.equalsIgnoreCase("help")) {
System.out.println(" help - 도움말을 보여줍니다.");
System.out.println("q 또는 Q - 프로그램을 종료합니다.");
System.out.println("history - 최근에 입력한 명령어를 " + MAX_SIZE + "개 보여줍니다.");
} else if (input.equalsIgnoreCase("history")) {
save(input); // 입력받은 명령어를 저장.
LinkedList list = (LinkedList)q;
final int SIZE = list.size();
for (int i = 0; i < SIZE; i++)
System.out.println((i+1) + "." + list.get(i));
} else {
save(input);
System.out.println(input);
}
} catch(Exception e) {
System.out.println("입력오류입니다.");
}
} // while
} // main
public static void save(String input) {
if (!"".equals(input)) {
q.offer(input); // queue에 저장한다.
}
// queue의 최대크기를 넘으면 제일 처음 입력된 것을 삭제한다.
if(q.size() > MAX_SIZE) { // size()는 Collection인터페이스의 정의
q.remove(); // 꺼내서 반환.
}
}
}
----------
<결과>
help를 입력하면 도움말을 볼 수 있습니다.
>>
help
help - 도움말을 보여줍니다.
q 또는 Q - 프로그램을 종료합니다.
history - 최근에 입력한 명령어를 5개 보여줍니다.
>>
a
a
>>
b
b
>>
c
c
>>
d
d
>>
history
1.a
2.b
3.c
4.d
5.history
>>
q
'Java' 카테고리의 다른 글
Java - try - catch문 (0) | 2023.02.20 |
---|---|
Java - TreeSet (0) | 2023.02.15 |
Java - 내부 클래스(inner class) (0) | 2023.02.07 |
Java - HashMap (0) | 2023.02.04 |
Java - HashSet (0) | 2023.02.04 |