package ch11;

import java.util.*;

public class StackQueueEx {

 public static void main(String[] args) {

  Stack st = new Stack();
  
  Queue q = new 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();
  
  System.out.println("=Queue=");
  
  while(!q.isEmpty()){
   System.out.println(q.poll());
  }
 }

}

/*Stack 메서드
 * 1.empty() : 비워있는지
 * 2.peek() : 저장된 객체를 반환..꺼내지는 않는다. 비워있을때는 null 을 반환한다.
 * 3.pop() : 맨위에 저장된 객체를 꺼낸다.
 * 4.push(Object item) : item(객체)를 저장한다.
 * 5.search(Object o) : o(객체)를 찾아서 위치를 반환한다..배열과 달리 1부터 시작함.
 *
 *
 * Queue 메서드
 * 1.element() : 삭제없이 저장된 요소를 읽어온다. 비워 있을때는 Exception 을 발생시킴
 * 2.offer(Object o) : o(객체)를 저장한다.
 * 3.peek() : 삭제없이 읽어온다. 비워 있을때는 null 을 반환한다.
 * 4.poll() : 꺼내온다. 비워 있으면 null 을 반환
 * 5.remove() : 꺼내온다. 비워 있으면 Exception 발생~
 *
 *
 */

 

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

 

package ch11;

import java.util.*;

public class MyStack extends Vector{

 public Object push(Object item){    //item 객체 저장 메서드
  
  addElement(item);
  return item;
 }
 
 public Object pop(){   // 맨 위에 저장된 객체 꺼내오기 메서드
  
  Object obj = peek();     // 맨위에 저장된 객체를 반환한다. 비워있을때는 Exception 발생
  removeElementAt(size()-1); //마지막 요소 삭제. (배열 0부터니깐 1을 빼줌)
  return obj;
 }
 
 public Object peek(){
  
  int len = size();
  
  if(len==0)
   throw new EmptyStackException();
  
  return elementAt(len-1);
 }
 
 public boolean empty(){
  
  return size()==0;
 }
 
 public int search(Object o){  // o객체를 찾아와 위치를 반환
  
  int i = lastIndexOf(o);   // o 객체를 끝에서 부터 찾는다.
  
  if(i>=0){                     // 객체를 찾은 경우
   return size()-i;        //위치를 반환한다.
  }
  return -1;                    //못찾은 경우 -1을 반환한다.
 }
}

 

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

 

package ch11;

import java.util.*;

public class StackEx1 {

 public static Stack back = new Stack();
 public static Stack forword = new Stack();
 
 public static void main(String[] args) {

  goURL("1.네이트");
  goURL("2.야후");
  goURL("3.네이버");
  goURL("4.다음");
  
  printStatus();
  
  ///////////////////////////////////////////////////////
  
  goBack();
  System.out.println("=뒤로 가기 버튼을 누른 후=");
  printStatus();
  
  //////////////////////////////////////////////////////
  
  goBack();
  System.out.println("='뒤로' 버튼을 누른 후=");
  printStatus();
  
  //////////////////////////////////////////////////////
  
  goForword();
  System.out.println("='앞으로' 버튼을 누른 후=");
  printStatus();
  
  //////////////////////////////////////////////////////
  
  goURL("javachobo.com");
  System.out.println("=새로운 주소로 이동 후=");
  printStatus();
  
 }
 
 
 public static void printStatus()           //출력 메서드
 {
  System.out.println("back :"+back);    
  System.out.println("forword :"+forword);
  System.out.println("현재화면은'"+back.peek()+"'입니다.");  //back 에 맨위에 객체를 하나씩 반환
  System.out.println();
 }
 
 public static void goURL(String url)         //url 매개변수를 갖는 goURL 메서드
 {
  back.push(url);               // back 객체를 저장 (url 주소)
  if(!forword.empty())      //  forword 객체가 비워있지 않다면
   forword.clear();         //  forword 객체를 비워라~
 }
 
 public static void goForword()
 {
  if(!forword.empty())              // forword 객체가 비워있지 않다면
   back.push(forword.pop());  
  //back 객체를 저장 <-- push // forword 객체를 꺼낸다.<--pop() 메서드 
 }
 
 public static void goBack()
 {
  if(!back.empty())                      // forword 객체가 비워있지 않다면
   forword.push(back.pop());    
  // forword 객체를 저장 <-- push /// 뒤에 있는 저장된 객체를 꺼낸다.<--pop()
 }

}

 

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

 

package ch11;

import java.util.*;
public class ExpValidCheck {

 public static void main(String[] args) {

  if(args.length!=1){       // 배열 args 변수값이 1이 아니면
   
   System.out.println("Usage : JAva ExpValidCheck\"EXPRESSION\"");
   System.out.println("Example : java ExpValidCheck\"((2+3)*1)+3\"");
   System.exit(0);
  }
  
  Stack st = new Stack();  //스택 인스턴스 생성
     String expression = args[0];   // args[0] 그러니깐 배열1개의 값을 갖는 args~
  
  System.out.println("expression :"+expression); //args[0] 출력하면 args[0] = 1개의 공간을 가지고 있는 배열 그길이도 1
                                                                          //그리하여 위에 내용이 그대로 출력
  
  try {
   for(int i =0;i<expression.length();i++){
    char ch = expression.charAt(i);   // expression 의 i번째 를 문자열로 반환 하여 ch 에 넣겠다
    
    if(ch=='('){
     st.push(ch+"");    // 스택에 저장한다. 
    }else if(ch==')'){
     st.pop();             // 스택에서 꺼내라
    }
   }
   
   //여기 for 문까지 일련의 괄호 열고 닫고가 전부 진행하여 스택이 비워있어야 정상이다. 
   
   if(st.isEmpty()){               //스택이 비워있는지 확인하여 맞으면
    System.out.println("괄호가 일치합니다.");
   }else {
    System.out.println("괄호가 일치하지 않습니다.");
   }
   
  } catch (Exception e) {
   System.out.println("괄호가 일치하지 않습니다.");
  }
 }

}

//이번 구문은 중간에 for 문에서 사용된 스택 메서드의 활용성이다.

 

 

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

 

 

 

package ch11;

import java.util.*;

public class QueueEx2 {

 static Queue q = new LinkedList();    // q 리스트배열로 설정하고,
 static final int MAX_size=5;              // 크기를 5로 잡아서 static 영역에 올린다.
 
 
 public static void main(String[] args) {

  System.out.println("help 를 입력하면 도움말을 볼 수 있습니다.");
  
  while(true){
   
   System.out.println(">>");
   
   try {
    Scanner sc = new Scanner(System.in);
    String input = sc.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")){
     int i =0;
     
     save(input);
     
     LinkedList tmp = (LinkedList)q;
     ListIterator it = tmp.listIterator();
     
     while(it.hasNext()){
      System.out.println(++i+"."+it.next());
     }
    }else {
     save(input);
     System.out.println(input);
    }
    
   } catch (Exception e) {
    System.out.println("입력오류입니다.");
   }
  }
 }
 
 public static void save(String input){
  
  if(!"".equals(input))
   q.offer(input);
  
  if(((LinkedList)q).size()>MAX_size)
   q.remove();
 }

}

'::::특별한 Java Story' 카테고리의 다른 글

SVN Eclipse 연동 방법  (0) 2014.03.25
Comparator 와 Comparable  (0) 2013.07.07
ArrayList / Vector / LinkedList  (0) 2013.06.26
배열(Array) 연습문제  (0) 2013.06.24
JSP_세팅  (0) 2013.06.20
Posted by 옆모습오빠
: