Stack 과 Queue
::::특별한 Java Story 2013. 6. 27. 02:30 |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 |