๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–‹๏ธ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[๋ฉ”์„œ๋“œ] Stack ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ

by OR15A 2023. 11. 30.

2023.11.21 - [๐Ÿ–‹๏ธ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก ] - [์Šคํƒ] ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ์Šคํƒ๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์Šคํƒ

 

  1. ์ƒ์„ฑ์ž Stack():
    • ์„ค๋ช…: ์ƒˆ๋กœ์šด ๋นˆ ์Šคํƒ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. E push(E item):
    • ์„ค๋ช…: ์ง€์ •๋œ ํ•ญ๋ชฉ์„ ์Šคํƒ์˜ ๋งจ ์œ„์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” Vector ํด๋ž˜์Šค์˜ addElement ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • ๋ฐ˜ํ™˜๊ฐ’: ์Šคํƒ์— ์ถ”๊ฐ€๋œ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.
  3. E pop():
    • ์„ค๋ช…: ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ์ด ๋น„์–ด ์žˆ์œผ๋ฉด EmptyStackException์„ ๋˜์ง‘๋‹ˆ๋‹ค.
    • ๋ฐ˜ํ™˜๊ฐ’: ์ œ๊ฑฐ๋œ ๋งจ ์œ„์˜ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.
  4. E peek():
    • ์„ค๋ช…: ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ์ด ๋น„์–ด ์žˆ์œผ๋ฉด EmptyStackException์„ ๋˜์ง‘๋‹ˆ๋‹ค.
    • ๋ฐ˜ํ™˜๊ฐ’: ๋งจ ์œ„์˜ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.
  5. boolean empty():
    • ์„ค๋ช…: ์Šคํƒ์ด ๋น„์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ˜ํ™˜๊ฐ’: ์Šคํƒ์ด ๋น„์–ด ์žˆ์œผ๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false์ž…๋‹ˆ๋‹ค.
  6. int search(Object o):
    • ์„ค๋ช…: ์ง€์ •๋œ ๊ฐ์ฒด๊ฐ€ ์Šคํƒ์— ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์žˆ์œผ๋ฉด ์Šคํƒ์˜ ๋งจ ์œ„๋ถ€ํ„ฐ ํ•ด๋‹น ๊ฐ์ฒด๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ(1-based index)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ์Šคํƒ์— ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ˜ํ™˜๊ฐ’: ์Šคํƒ์˜ ๋งจ ์œ„๋ถ€ํ„ฐ ๊ฐ์ฒด๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ์ด๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ -1์ž…๋‹ˆ๋‹ค.

 

public
class Stack<E> extends Vector<E> {

    public Stack() {
    }

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

        return item;
    }

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

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

        return obj;
    }

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

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

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

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

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

}