반응형
스택의 동작
간단하게 배열을 이용한 방법이고, 사용자가 입력하는 size에 따라 Stack의 크기가 결정됩니다.
크게 어렵지 않으니 활용하시길
스택 클래스에는 기본적으로 Peek, Pop, Push 의 메소드가 구현되어야 기초 동작을 수행할 수 있습니다.
package stack;
class Stack {
int top;
int[] stack;
int size;
public Stack(int size) {
top = -1;
stack = new int[size];
this.size = size;
}
public int peek() {
return stack[top];
}
public void push(int value) {
stack[++top] = value;
System.out.println(stack[top] + " PUSH !");
}
public int pop() {
System.out.println(stack[top] + " POP !");
return stack[top--];
}
public void printStack() {
System.out.println("-- STACK LIST --");
for (int i = top; i >= 0; i--)
System.out.println(stack[i]);
System.out.println("-- END OF LIST --");
}
}
public class GompangStack {
public static void main(String args[]) {
// 스택 동작 테스트
Stack st = new Stack(100);
st.push(5);
st.push(2);
st.push(3);
st.push(4);
st.push(1);
st.printStack();
st.pop();
st.pop();
st.push(15);
st.printStack();
st.peek();
st.pop();
st.pop();
st.pop();
st.pop();
st.push(30);
st.peek();
}
}
@실행결과
5 PUSH !
2 PUSH !
3 PUSH !
4 PUSH !
1 PUSH !
-- STACK LIST --
1
4
3
2
5
-- END OF LIST --
1 POP !
4 POP !
15 PUSH !
-- STACK LIST --
15
3
2
5
-- END OF LIST --
PEEK : 15
15 POP !
3 POP !
2 POP !
5 POP !
30 PUSH !
PEEK : 30
+ java.util.Stack의 구현체를 열어보자
/**
* The Stack class represents a last-in-first-out
* (LIFO) stack of objects. It extends class Vector with five
* operations that allow a vector to be treated as a stack. The usual
* push and pop operations are provided, as well as a
* method to peek at the top item on the stack, a method to test
* for whether the stack is empty, and a method to search
* the stack for an item and discover how far it is from the top.
* When a stack is first created, it contains no items.
* @author Jonathan Payne
* @since JDK1.0
*/
// java util에서 제공하는 Stack은 Vector를 상속해서 구현한 클래스이다
public class Stack extends Vector {
/**
* Creates an empty Stack.
*/
public Stack() {
}
/**
* 스택의 맨 윗부분에 원소를 집어넣는다. -> Vector의 addElement와 동일한 동작을 한다
* @param item the item to be pushed onto this stack.
* @return the item
argument.
* @see java.util.Vector#addElement
*/
public E push(E item) {
addElement(item);
return item;
}
/**
* top에 있는 요소를 꺼내고 해당 요소를 return 해준다
*
* @return The object at the top of this stack (the last item
* of the Vector object).
* @throws EmptyStackException if this stack is empty.
*/
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
/**
* top에 있는 요소를 제거하지 않고 그냥 조회 용도로 읽어온다
*
* @return the object at the top of this stack (the last item
* of the Vector object).
* @throws EmptyStackException if this stack is empty.
*/
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
/**
* 스택이 비어있는지 확인한다
* @return true
if and only if this stack contains
* no items; false
otherwise.
*/
public boolean empty() {
return size() == 0;
}
/**
* 스택의 원소를 순회하면서 찾고자 하는 요소가 있는지 확인한다
* Returns the 1-based position where an object is on this stack.
* If the object o occurs as an item in this stack, this
* method returns the distance from the top of the stack of the
* occurrence nearest the top of the stack; the topmost item on the
* stack is considered to be at distance 1. The equals
* method is used to compare o to the
* items in this stack.
*
* @param o the desired object.
* @return the 1-based position from the top of the stack where
* the object is located; the return value -1
* indicates that the object is not on the stack.
*/
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
반응형
'Development > Java' 카테고리의 다른 글
[Spring] Annotation 관련 (0) | 2017.03.23 |
---|---|
[JAVA / 네트워크] 비동기 통신 프로그램 샘플 (3) | 2016.06.12 |
[JAVA / 네트워크] 멀티룸 구조에 대하여(게임&채팅 방 여러개) (44) | 2016.05.22 |
[JAVA / 네트워크] 간단한 통신 메세지 프로토콜 구성하기 (6) | 2016.04.28 |
[JAVA] HTTP 페이지 읽기 (0) | 2015.11.30 |