λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🏦 Data Structure

[자료ꡬ쑰] μŠ€νƒ(Stack) (Java)

by hyeon-z 2023. 3. 8.

 

μŠ€νƒμ΄λž€? μ‰½κ²Œ 보면 λ°•μŠ€ μŒ“κΈ°μ΄λ‹€.

ν”νžˆ λ°•μŠ€λŠ” μ•„λž˜μ—μ„œλΆ€ν„° μœ„λ‘œ 차곑차곑 μŒ“λŠ”λ‹€.

μ•„λž˜μ— μžˆλŠ” λ°•μŠ€λ₯Ό 치우기 μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ μœ„μ— μžˆλŠ” λ°•μŠ€λ₯Ό λ‚΄λ €μ•Ό ν•œλ‹€.

λ¨Όμ € μŒ“μ€ 것이 λ‚˜μ€‘μ— λ‚˜μ˜¨λ‹€. λ‚˜μ€‘μ— μŒ“μ€ 것이 λ¨Όμ € λ‚˜μ˜¨λ‹€.

=> μ„ μž…ν›„μΆœ(FILO), ν›„μž…μ„ μΆœ(LIFO)

 

μ°¨κ·Όμ°¨κ·Ό μŠ€νƒμ—  μŒ“μ•„λ³΄κΈ°

μ‚½μž…(5) - μ‚½μž…(2) - μ‚½μž…(3) - μ‚½μž…(7) - μ‚­μ œ() - μ‚½μž…(1) - μ‚½μž…(4) - μ‚­μ œ()의 과정을 μˆ˜ν–‰ν•΄ 보자.

 

 

μ‚½μž…(5)

5

 

μ‚½μž…(2)

5 2

 

μ‚½μž…(3)

5 2 3

 

μ‚½μž…(7) 

5 2 3 7

 

μ‚­μ œ() 

5 2 3

 

μ‚½μž…(1)

5 2 3 1

 

μ‚½μž…(4)

5 2 3 1 4

 

μ‚­μ œ() 

5 2 3 1

=> μ‚½μž…μ„ 톡해 데이터λ₯Ό μ°¨λ‘€λŒ€λ‘œ μŒ“κ³  μ‚­μ œλ₯Ό 톡해 κ°€μž₯ λ§ˆμ§€λ§‰μ— 넣은 데이터λ₯Ό 내보낸닀.

 

μ½”λ“œλ‘œ κ΅¬ν˜„

 

Stack<Integer> s = new Stack<>();

// μ‚½μž…(5) - μ‚½μž…(2) - μ‚½μž…(3) - μ‚½μž…(7) - μ‚­μ œ() - μ‚½μž…(1) - μ‚½μž…(4) - μ‚­μ œ()
s.push(5);
s.push(2);
s.push(3);
s.push(7);
s.pop();
s.push(1);
s.push(4);
s.pop();

while (!s.empty()) {
    System.out.print(s.peek() + " ");
    s.pop();
}

 

μŠ€νƒκ³Ό ν•¨κ»˜ μ“°μ΄λŠ” ν•¨μˆ˜λ“€

 

μ›μ†Œ μΆ”κ°€

- push()

public E push(E item) {
    addElement(item);

    return item;
}

λ§€κ°œλ³€μˆ˜ 값이 μŠ€νƒμ— μ‚½μž…λ˜κ³  ν•΄λ‹Ή μ›μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

 

μ›μ†Œ μ‚­μ œ

- pop()

public synchronized E pop() {
    E obj;
    int len = size();

    obj = peek();
    removeElementAt(len - 1);

    return obj;
}

μŠ€νƒ μ΅œμƒλ‹¨ 값이 μ‚­μ œλ˜κ³  ν•΄λ‹Ή μ›μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

 

μœ„μ˜ μ½”λ“œμ˜ whileλ¬Έ 뢀뢄을 popλ§Œμ„ μ‚¬μš©ν•΄μ„œ 더 κ°„λ‹¨νžˆ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.

while (!s.empty()) {
    System.out.print(s.pop() + " ");
}

 

μ΅œμƒλ‹¨ κ°’ 확인

- peek()

public synchronized E peek() {
    int len = size();

    if (len == 0)
        throw new EmptyStackException();
    return elementAt(len - 1);
}

μŠ€νƒ μ΅œμƒλ‹¨ 값을 λ°˜ν™˜ν•œλ‹€.

μŠ€νƒμ΄ λΉ„μ–΄μžˆλŠ” 경우 ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ EmptyStackException을 λ°œμƒμ‹œν‚¨λ‹€.

 

μŠ€νƒμ΄ λΉ„μ–΄μžˆλŠ”μ§€ 확인

- empty()

public boolean empty() {
    return size() == 0;
}

μŠ€νƒμ΄ λΉ„μ–΄μžˆλŠ” κ²½μš°λŠ” trueλ₯Ό, λΉ„μ–΄μžˆμ§€ μ•Šμ€ κ²½μš°λŠ” falseλ₯Ό λ°˜ν™˜ν•œλ‹€.

 

νŠΉμ • μ›μ†Œ μ°ΎκΈ°

- search()

public synchronized int search(Object o) {
    int i = lastIndexOf(o);

    if (i >= 0) {
        return size() - i;
    }
    return -1;
}

μ΅œμƒλ‹¨μœΌλ‘œλΆ€ν„° ν•΄λ‹Ή μ›μ†Œκ°€ λͺ‡ λ²ˆμ§Έμ— μœ„μΉ˜ν•˜λŠ”μ§€λ₯Ό λ°˜ν™˜ν•œλ‹€. (μ΅œμƒλ‹¨μ˜ 경우 1)

 

- 같은 κ°’μ˜ μ›μ†Œκ°€ μ—¬λŸ¬ 개 μ‘΄μž¬ν•˜λŠ” 경우: μ΅œμƒλ‹¨κ³Ό κ°€κΉŒμš΄ κ°’μ˜ 순번

- ν•΄λ‹Ή μ›μ†Œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우: -1

 

μ˜ˆμ‹œλ₯Ό λ“€μ–΄ μ‚΄νŽ΄λ³΄μž.

3 1 3 7
System.out.println(s.search(7));  // 1
System.out.println(s.search(3));  // 2

7이 μ΅œμƒλ‹¨μ— μ‘΄μž¬ν•˜λ―€λ‘œ 1

3은 μ—¬λŸ¬ 개 μ‘΄μž¬ν•˜λ―€λ‘œ μ΅œμƒλ‹¨κ³Ό κ°€κΉŒμš΄ κ°’μ˜ 순번인 2κ°€ 좜λ ₯λœλ‹€.

   

 

Reference

이것이 μ½”λ”©ν…ŒμŠ€νŠΈλ‹€ - λ‚˜λ™λΉˆ

'🏦 Data Structure' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[자료ꡬ쑰] 큐(Queue) (Java)  (0) 2023.03.09

λŒ“κΈ€