Tiny Bunny
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/JAVA

[JAVA] ์Šคํƒ (Stack) ยท ๋ฉ”์„œ๋“œ ์ •๋ฆฌ

by soonybutter 2024. 10. 14.
728x90

๋ชฉ์ฐจ

1. Stack

2. Stack ์‚ฌ์šฉํ•˜๊ธฐ

  • push()
  • pop()
  • remove()
  • peek()
  • isEmpty()
  • empty()
  • search()
  • size()
  • set()
  • elementAt
  • clear()

 

 

 

 

 

 

 

 

1. Stack (์Šคํƒ)

 

stack

 

- ์Šคํƒ์€ ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋‚ธ๋‹ค. (ํ›„์ž…์„ ์ถœ. LIFO)

* ์ฐธ๊ณ ๋กœ Queue(ํ)๋Š” ์„ ์ž…์„ ์ถœ(FIFO)

 

- ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)์€ ์Šค์Šค๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋Š”๋ฐ, 

์ด๋•Œ Stack์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉ์ด ๋๋‚œ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๋กœ ์ณ๋‚ด๋ฒ„๋ฆฌ๋ฏ€๋กœ, ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋˜, ์ž๋ฐ”์˜ Stack ํด๋ž˜์Šค๋Š” Vector ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค! ๋”ฐ๋ผ์„œ Thread-safe ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

 

 


 

 

 

2. Stack ์‚ฌ์šฉํ•˜๊ธฐ 

๋จผ์ € ์ž๋ฐ”์—์„œ Stack์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„ ,

import.java.util.Stack ์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

์„ ์–ธ 

Stack<์ž๋ฃŒํ˜•> ๋ณ€์ˆ˜๋ช… = new Stack();

ใ„ด ํ•ด๋‹น ์ž๋ฃŒํ˜•๋งŒ ์‚ฝ์ž…, ์‚ญ์ œ ๊ฐ€๋Šฅํ•˜๋‹ค.

Stack ๋ณ€์ˆ˜๋ช… = new Stack();

ใ„ด์–ด๋–ค ์ž๋ฃŒํ˜•์ด๋“  ์‚ฝ์ž…, ์‚ญ์ œ ๊ฐ€๋Šฅ(int ํ˜•๊ณผ Stringํ˜• ํ˜ผํ•ฉ ์‚ฝ์ž…๊ฐ€๋Šฅ)

 

 

2-1. ๋ฉ”์„œ๋“œ ์ •๋ฆฌ


push() - ์‚ฝ์ž…

import java.util.Stack;

public class StackPractice1 {

	public static void main(String[] args) {
		
		Stack<Number> stack = new Stack<>();
		stack.push(1);
		stack.push(2);
		stack.push(3);
		
		System.out.println(stack);  //[1, 2, 3]
		

	}

}

ํ˜„์žฌ stack ์ƒํ™ฉ

 

 


pop( ) - ์‚ญ์ œ

System.out.println(stack);       //[1, 2, 3]
		
System.out.println(stack.pop()); //3
System.out.println(stack);       //[1, 2]
System.out.println(stack.pop()); //2

pop()์„ ํ•˜๋ฉด ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ—๋ถ€๋ถ„, ์ฆ‰ ๋งˆ์ง€๋ง‰์— push()ํ•ด์ค€ ๊ฐ’๋ถ€ํ„ฐ ๊บผ๋‚ด์ง„๋‹ค.

์œ„ stack์˜ ๊ฒฝ์šฐ, 3->2->1 ์ˆœ.

 


remove( index ) - ์‚ญ์ œ

ํŠน์ • ์ธ๋ฑ์Šค๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ์‚ญ์ œํ• ๋•Œ

Stack<String> stack = new Stack();
		
stack.push("Hello");
stack.push("goodbye");
stack.push("zoo");
stack.push("banana");
stack.push("monkey");
		
stack.remove(3);
		
System.out.println(stack); //[Hello, goodbye, zoo, monkey]

 

ใ„ด ์ธ๋ฑ์Šค 3์ด ๊ฐ€๋ฆฌํ‚ค๋Š” banana๊ฐ€ ์‚ญ์ œ๋จ.


peek( ) - ๊ฐ€์žฅ ์ƒ์œ„ ์š”์†Œ๊ฐ’

import java.util.Stack;

public class StackPractice1 {

	public static void main(String[] args) {
		
		Stack<Number> stack = new Stack<>();
		stack.push(1);
		stack.push(2);
		stack.push(3);
		
		System.out.println(stack.peek());  //3 
	
	}

}

 

 

 


 

 

 isEmpty( ) - ์Šคํƒ์ด ๋น„์–ด์žˆ๋‚˜? 

empty( ) - ์Šคํƒ์ด ๋น„์–ด์žˆ๋‚˜? 

 

์Šคํƒ์„ pop ํ•˜๊ฑฐ๋‚˜ peek ํ• ๋•Œ,

์Šคํƒ ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด, EmptyStackException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด isEmpty() ๋ฉ”์„œ๋“œ๋กœ ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค. 

-> boolean ๊ฐ’์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

-> if๋ฌธ์˜ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์™ธ๋ฐœ์ƒ ๋ฐฉ์ง€

Stack<Number> stack = new Stack<>();
		stack.push(1);
		stack.push(2);
		stack.push(3);
		
		System.out.println(stack.peek());  //3 

		System.out.println(stack.isEmpty()); //false
        
        if(!stack.isEmpty()) {
			stack.pop();
			System.out.println(stack);  //[1, 2]
		}

 

 

 

 


 

 

search( ์ฐพ์„ value๊ฐ’ ) - ํ•ด๋‹น ์›์†Œ๊ฐ€ ์žˆ๋Š”๊ฐ€?

์Šคํƒ ๋‚ด๋ถ€์— ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์ƒ‰, ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ.

*๋ฆฌ์ŠคํŠธ์˜ indexOf() ๋ฉ”์„œ๋“œ์™€ ๋น„์Šทํ•˜๋‹ค.

 

๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉด ->  ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•จ.

์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด -> -1 ๋ฐ˜ํ™˜ํ•จ.

ใ„ด๊ตณ์ด

Stack<String> stack = new Stack();
		
stack.push("Hello");
stack.push("goodbye");
stack.push("zoo");
stack.push("banana");
stack.push("monkey");

System.out.println(stack.search("zoo")); //3
System.out.println(stack.search("rabbit")); //-1

 

 


 

size( ) - ์Šคํƒ์˜ ํฌ๊ธฐ

์ž๋ฐ”์˜ Stackํด๋ž˜์Šค๋Š” Vectorํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ–ˆ๊ณ ,

Vector ํด๋ž˜์Šค๋Š” List  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

Stack ํด๋ž˜์Šค์—์„œ ์Šคํƒ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ผ๋•Œ size() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Stack<String> stack = new Stack();
		
stack.push("Hello");
stack.push("goodbye");
stack.push("zoo");
stack.push("banana");
stack.push("monkey");
		
System.out.println(stack.size());  //5

 

 


set( index, ๋ณ€๊ฒฝํ•  value ) - ์Šคํƒ ๊ฐ’ ๋ณ€๊ฒฝ

 

Stack<String> stack = new Stack();
		
stack.push("Hello");
stack.push("goodbye");
stack.push("zoo");
stack.push("banana");
stack.push("monkey");
		
stack.set(3, "apple");
		
System.out.println(stack); //[Hello, goodbye, zoo, apple, monkey]

 

 


 

clear ( ) - ์Šคํƒ ์ดˆ๊ธฐํ™” / ์Šคํƒ์„ ๊ณต๋ฐฑ์œผ๋กœ ๋งŒ๋“ฆ.

 

: ๋น„์›Œ์ค„ ๋•Œ ์‚ฌ์šฉํ•จ.

 

 

 

 


 

 

 

 

 

*Stack ํด๋ž˜์Šค๋Š” Vector ํด๋ž˜์Šค์˜ ์ปฌ๋ ‰์…˜์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„๋˜๋Š”๋ฐ,

vector ํด๋ž˜์Šค๋Š” '์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ'์˜ ๊ฐœ๋…์ด ๋‚˜์˜ค๊ธฐ๋„ ์ „์— ์ž๋ฐ” 1 ๋ฒ„์ „๋ถ€ํ„ฐ ์žˆ๋˜ ์˜ค๋ž˜๋œ ์ปฌ๋ ‰์…˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ์•ˆ์ •ํ•˜๋‹ค.

์ด๋Ÿฐ vector ํด๋ž˜์Šค(์ฆ‰, ๋ถ€์ ํ•ฉํ•œ ๋ถ€๋ชจ ํด๋ž˜์Šค)๋ฅผ ์ƒ์†๋ฐ›๋Š” Stack ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒํƒœ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

โžก๏ธ vector ํด๋ž˜์Šค : add() 

โžก๏ธ stack ํด๋ž˜์Šค : push()

 

์ด๋Ÿฐ ๋ถˆ์•ˆ์ •ํ•จ ๋•Œ๋ฌธ์— ์ž๋ฐ”๋Š” ์šฐ๋ฆฌ์—๊ฒŒ stack ๋Œ€์‹  Deque ํด๋ž˜์Šค ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค.

Deque(๋ฑ) : ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋„ฃ๊ณ  ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ํ(Queue)์ด๋‹ค. -> ํ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ๋„ ์žˆ๊ณ , stack์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*๋‚ด์šฉ ์ฐธ๊ณ  : Dev inpa TISTORY BLOG

 

728x90

TOP

Designed by ํ‹ฐ์Šคํ† ๋ฆฌ