package kr.or.ddit.basic;
import java.util.LinkedList;
public class StackTest {
public static void main(String[] args) {
Browser b = new Browser();
b.goURL("1. 네이버");
b.goURL("2. 야후");
b.goURL("3. 구글");
b.goURL("4. 다음");
b.history ();
System.out.println("뒤로 가기 후 ...");
b.goBack();
b.history();
b.history ();
System.out.println("뒤로 가기 후 ...");
b.goBack();
b.history();
System.out.println("앞으로 가기 후 ...");
b.goForward();
b.history();
System.out.println("새로운 싸이트 방문 후 ");
b.goURL("5. 네이트 ");
b.history();
}
}
//웹브라우저의 앞으로가기, 뒤로가기 기능 구현 (stack 이용)
class Browser{
private LinkedList<String> back; // 이전 방문 내역이 저장될 stack
private LinkedList<String> forward; // 다음 방문 내역이 저장될 stack
private String currentURL; // 현재 페이지
//생성자
public Browser() {
back = new LinkedList<>();
forward = new LinkedList<>();
currentURL = "" ;
}
//사이트를 방문하는 메서드 ==> 매개변수에 방문할 url이 저장된다.
public void goURL(String url) {
System.out.println(url + "싸이트에 접속했습니다.");
if(currentURL!=null && !currentURL.equals("")) { //현재페이지가 있으면
back.push(currentURL); //현재 페이지를 back 스택에 추가
}
currentURL = url; //입력한 URL 로 현재 페이지를 변경한다.
}
//뒤로가기 기능
public void goBack() {
//is.Empty () => List 가 비어 있으면 true, 비어있지 않으면 false
if(!back.isEmpty()) { //비어있지 않으면
forward.push(currentURL); // 현재 페이지를 forward 스택에 추가
currentURL = back.pop(); // back 스텍에서 1개의 요소를 꺼내와 현재 페이지
}
}
// 앞으로 거는 기능
public void goForward() {
if ( !forward.isEmpty() ) {
back.push(currentURL);
currentURL = forward.poll();
//forward 스택에서 1개의 요소를 꺼내와 현재 페이지로 한다.
}
}
//방문 기록 확인하기
public void history () {
System.out.println();
System.out.println("-------------------------");
System.out.println("방문기록");
System.out.println("-------------------------");
System.out.println("back ==> " + back);
System.out.println("현재 ==> " + currentURL);
System.out.println("forward ==> " + forward);
System.out.println("-------------------------");
System.out.println();
}
}
-----------------------------------------------------------------------------------------------------
package kr.or.ddit.basic;
import java.util.LinkedList;
public class StackQueueTest {
/*
* Stack :
* 제일 먼저 넣는 애가 맨 밑에 쌓여서 맨 나중에 들어온애가 가장 먼저 나간다.
* 후입선출(LIFO) 의 자료 구조
*
* Queue :
* 입구 -> 출구 가 다르다. 먼저 들어간 것이 먼저 나간다.
* 선입선출(FIFO) 의 자료 구조
* List 에 Stack , Queue 용으로 사용할 수 있는 명령어가 존재한다.
*
* stact 과 Queue 는 LinkedList 로 구현해서 사용할 수 있다.
*
*/
public static void main(String[] args) {
/*stack 명령
* 1. 자료 입력 : push( 입력데이터 );
* 2. 자료 출력 : pop(); ==> 자료를 꺼내온 후 꺼내온 데이터를 Stack 에서 지운다.
* peak(); ==> 삭제없이 자료를 꺼내온다.
*/
LinkedList<String> stack = new LinkedList<>();
stack.push("홍길동");
stack.push("일지매");
stack.push("이순신");
stack.push("변학도");
System.out.println("stack 값 : " + stack);
String data = stack.pop();
System.out.println("꺼내온 값 : " + data);
System.out.println("stack 값 : " + stack);
stack.push("성춘향");
System.out.println("추가후 stack 값 : " + stack);
System.out.println();
System.out.println();
System.out.println("꺼내온 값 : " + stack.pop());
System.out.println("stack 값 : " + stack);
System.out.println();
System.out.println("삭제 없이 꺼내온 값 : " + stack.peek());
System.out.println("stack 값 : " + stack);
System.out.println("-----------------------------------");
System.out.println();
/* Queue 명령
* 1. 자료입력 : offer ( 입력 데이터 ) ;
* 2. 자료출력 : poll() ; ==> 자료를 꺼내온 후 꺼내온 데이터를 Queue 에서 삭제한다.
* peak(); ==> 삭제없이 데이터를 꺼내온다.
*/
LinkedList<String> queue = new LinkedList<>();
queue.offer("홍길동");
queue.offer("일지매");
queue.offer("이순신");
queue.offer("변학도");
System.out.println("queue 값 : " + queue );
String temp = queue.poll();
System.out.println("꺼내온 값 : " + temp );
System.out.println("꺼내온 값 : " + queue.poll());
System.out.println("queue 값 : " + queue );
queue.offer("성춘향");
System.out.println("추가후 queue 값 : " + queue);
System.out.println();
System.out.println("꺼내온 값 : " + queue.poll());
System.out.println();
System.out.println("삭제없이 꺼내온 값 : " + queue.peek());
}
}
댓글
댓글 쓰기