2020.10.22 고급자바 수업 노트 StackTest, StackQueue

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());

}


}

-----------------------------------------------------------------------------------------------------






댓글