Computer Science/Data Structure

[Data Structure/자료ꡬ쑰][CS] 2. Stack

devYeON_ 2021. 12. 27. 19:29

2. Stack


πŸ“Œ μ •μ˜ : ν•œμͺ½ λμ—μ„œλ§Œ 데이터λ₯Ό λ„£κ³  λΊ„ 수 μžˆλŠ” LIFO ν˜•νƒœμ˜ 자료ꡬ쑰

 

1. μ—°μ‚°

  • push : μŠ€νƒμ˜ 맨 상단에 데이터λ₯Ό μ‚½μž…
  • pop : μŠ€νƒμ˜ 맨 상단 데이터λ₯Ό μ‚­μ œ
  • top : μŠ€νƒμ˜ 맨 상단 데이터
  • isEmpty : μŠ€νƒμ΄ λΉ„μ–΄ μžˆλŠ” μ§€λ₯Ό 확인 return boolean
  • isFull : μŠ€νƒμ΄ 가득 μ°¨ μžˆλŠ” μ§€λ₯Ό 확인 return boolean

2. κ΅¬ν˜„ 방식

β‘  Array

  • μž₯점 : κ΅¬ν˜„μ΄ 쉽고, μ›ν•˜λŠ” λ°μ΄ν„°μ˜ μ ‘κ·Ό 속도가 λΉ λ₯΄λ‹€
Public class Stack{
	int top;
	int maxSize;
	Object[] stackArr;

	public Stack(int size){
			this.top = -1;
			this.maxSize = size;
			this.stackArr = new Object[maxSize];
	}
	public boolean isEmpty(){
		return (top == -1);
	}
	public void push(Object item){
		if(top >= maxSize - 1){
				System.out.pritnln("Exception");
				// μŠ€νƒμ΄ 가득 찼을 λ•Œμ˜ μ˜ˆμ™Έμ²˜λ¦¬
		}
		stackArr[++top] = item;
	}
	public Object peek(){
		if(isEmpty()) throw new ArrayIndexOutOfBoundsException(e);
		return stackArr[top];
	}
	public Object pop(){
		Object item = peek();
		top--;
		return item;
	}
}

β‘‘ Linked List

  • μž₯점 : λ°μ΄ν„°μ˜ μ΅œλŒ€ κ°œμˆ˜κ°€ ν•œμ •λ˜μ–΄ μžˆμ§€ μ•Šκ³ , λ°μ΄ν„°μ˜ μ‚½μž… μ‚­μ œκ°€ μš©μ΄ν•˜λ‹€
public class Node{
	Object data;
	Node nextNode;
	public Node(Object data){
		this.data = data;
		this.nextNode = null;
	}
	public void linkNode(Node top){
		this.nextNode = top;
	}
	public Object getData(){
		return this.data;
	}
	public Node getNextNode(){
		return this.nextNode;
	}	
}

public class LinkedList{

	Node top;
	public LinkedList(){
		top = null;
	}
	public boolean isEmpty(){
		return (top == null);
	}
	public void push(Object item){
		Node newNode = new Node(item);
		newNode.linkNode(top);
		top = newNode;
	}
	public Object peek(){
		return top.getData();
	}
	public Object pop(){
		if(isEmpty()) throw new ArrayIndexOutOfBoundsException();
		else{
			Object item = peek();
			top = top.getNextNode();
			retun item;
		}
	}
}

 

3. μŠ€νƒμ˜ μž₯단점

  μž₯점 단점
Array - 랜덀 μ—‘μ„ΈμŠ€κ°€ 빠름
- λΉ λ₯΄κ²Œ μ ‘κ·Ό κ°€λŠ₯
- λ©”λͺ¨λ¦¬ μ‚¬μš© λΉ„νš¨μœ¨μ 
- λ°°μ—΄ λ‚΄ 데이터 이동 μž¬κ΅¬μ„± 어렀움
Linked List - λ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬ μ‚¬μš©
- 데이터 μž¬κ΅¬μ„±μ΄ 용이
- λŒ€μš©λŸ‰ 데이터 처리 κ°€λŠ₯
- νŠΉμ • index의 데이터λ₯Ό κ²€μƒ‰ν•˜κΈ° 어렀움
- λ©”λͺ¨λ¦¬λ₯Ό μΆ”κ°€μ μœΌλ‘œ μ‚¬μš©ν•΄μ•Ό 함

4. μ‹œκ°„ λ³΅μž‘λ„

μ—°μ‚° Big-O
insert O(1)
delete O(1)
search O(n)

5. μ‚¬μš© 예제

  • κ°€μž₯ 이전에 μΌμ–΄λ‚œ 이벀트 관리에 유용 ex) undo, redo
  • μž¬κ·€ ν•¨μˆ˜λ₯Ό ν•„μš”λ‘œ ν•˜λŠ” 경우 μŠ€νƒμœΌλ‘œ κ΅¬ν˜„ κ°€λŠ₯
  • ν›„μœ„ ν‘œκΈ° κ³„μ‚°μ‹μ—μ„œ ν™œμš© κ°€λŠ₯