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
  • ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ ์Šคํƒ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ํ›„์œ„ ํ‘œ๊ธฐ ๊ณ„์‚ฐ์‹์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅ