반응형
Notice
Recent Posts
Recent Comments
Link
불로구
[ 자바 알고리즘/자료구조] - 스택 (Stack) <2> 본문
반응형
앞에서 push, pop, peek 메서드에 대해 알아보았다.
그럼 이번에는 그 외 메서드에 대해 알아보자
indexOf
- 검색 메서드로서, 스택 본체의 배열에 x와 같은 값의 데이터가 있는지 위치를 알려주는 메서드
- 배열 인덱스가 큰쪽에서 작은쪽으로 스캔
- 해당 데이터가 있으면 위치를 반환, 없으면 -1반환
clear
- 스택에 모든 데이터 삭제
capacity
- 스택의 용량을 반환하는 값
size
- 데이터 수를 확인
IsEmpty
- 스택이 비어있는지 검사
- 비었으면 true / 아니면 false
IsFull
- 스택이 가득 찼는지 검사
- 가득 찼으면 true / 아니면 false
dump
- 스택안에 있는 모든 데이터 표시
- 바닥에서 꼭대기 순으로 표시
- 스택이 비었으면, 비었다고 표시한다.
package 스택큐.스택;
class IntStack{
private int max;
private int ptr;
private int[] st;
public IntStack(int capacity) {
ptr = 0;
max = capacity;
try {
st = new int[max];
}catch (OutOfMemoryError e) {
max = 0;
}
}
public class EmptyStack extends RuntimeException{
public EmptyStack() {}
}
public class OverflowStack extends RuntimeException{
public OverflowStack() {}
}
public void push(int num) throws OverflowStack{
if(ptr >= max) {
throw new OverflowStack();
}
st[ptr++] = num;
}
public void pop() throws EmptyStack{
if(ptr <= 0) {
throw new EmptyStack();
}
System.out.println(st[--ptr]);
}
public void peek() throws EmptyStack{
if(ptr <= 0) {
throw new EmptyStack();
}
System.out.println(st[ptr-1]);
}
public int indexOf(int num) {
for(int i=0; i<ptr-1; i++) {
if(st[i] == num) {
return i;
}
}
return -1;
}
public void clear() {
ptr = 0;
}
public int size() {
return ptr;
}
public int capacity() {
return max;
}
public boolean IsEmpty() {
return ptr <= 0;
}
public boolean IsFull() {
return ptr >= max;
}
public void dump() {
if(ptr <= 0) {
System.out.println("스택이 비었음");
}else {
for(int i=0; i<ptr; i++) {
System.out.println("st["+i+"] : " + st[i]);
}
}
}
}
public class 스택2 {
public static void main(String[] args) {
IntStack is = new IntStack(5);
is.push(4);
is.push(10);
is.push(7);
is.push(2);
System.out.println(is.indexOf(7));
System.out.println(is.size());
System.out.println(is.capacity());
is.dump();
if(is.IsEmpty())
System.out.println("스택 비었음");
is.push(12);
if(is.IsFull())
System.out.println("스택 꽉참");
is.clear();
if(is.IsEmpty())
System.out.println("스택 비었음");
is.dump();
}
}
- 여기서는 클래스에 메서드를 생성해서 구현했지만, switch문을 통해 구현할 수 있다.
제네릭을 이용한 스택 구현
package 스택큐.스택;
import java.util.EmptyStackException;
class Gstack<E>{
private int max;
private int ptr;
private E[] stk;
public Gstack(int capacity) {
max = capacity;
ptr = 0;
try {
stk = (E[]) new Object[max];
}catch (OutOfMemoryError e) {
max = 0;
}
}
public static class EmptyStack extends RuntimeException{
public EmptyStack() {}
}
public static class OverflowStack extends RuntimeException{
public OverflowStack() {}
}
public void push(E data) {
if(ptr >= max) {
throw new OverflowStack();
}
stk[ptr++] = data;
}
public void pop() {
if(ptr <= 0) {
throw new EmptyStack();
}
System.out.println(stk[--ptr]);
}
}
public class 제네릭스택 {
public static void main(String[] args) {
Gstack st = new Gstack(5);
st.push(3);
st.push("하이");
st.push(3.41);
st.pop();
st.pop();
st.pop();
}
}
- 이렇게 제네릭을 이용하면 배열에 Integer, String, Double...등 여러타입의 데이터를 넣을 수 있다.
- 왠만하면 제네릭은 배열보다 컬렉션을 이용하자..
반응형
'프로그래밍 > 알고리즘' 카테고리의 다른 글
알고리즘 - 선택 정렬(JAVA) (0) | 2021.03.12 |
---|---|
JAVA 알고리즘 - 브루트포스 알고리즘을 이용한 문자열 검색 (0) | 2021.03.06 |
[ 자바 알고리즘/자료구조] - 스택 (Stack) <1> (0) | 2021.02.13 |
[ 자바 알고리즘/자료구조] - 시간복잡도 && 공간복잡도 (0) | 2021.02.13 |
[ 자바 알고리즘/자료구조] - 자바 이진탐색 (0) | 2021.02.11 |
Comments