자료구조

Stack (based LinkedList) 실습

FDEE 2020. 10. 26. 17:28

1. top = tail 노드

 

2. Class Node

- int data : 노드의 값

- Node* next : 다음노드 포인터

 

 

 

3. Class LinkedList

- Node* head

- Node* tail

 

4. LinkedList() : 리스트 생성자

- this->head = NULL

- this->tail = NULL

 

5. empty()

- 만약 head, teil 둘다 NULL 인 경우 1 반환

- 그외의 경우 0 반환

 

6. peek()

- tail->data 반환

7. append(data)

- 새로운 노드를 생성하여 data를 저장한다

- 만약 empty() 상태라면 head, tail을 새로운 노드로 저장한다

- 그외의 경우 tail->next에 새로운 노드를 저장한다

- tail을 새로운 노드로 저장한다

 

8. delete()

- 이전노드, 현재노드를 각각 head 값으로 설정한다

- 현재노드의 next 가 NULL이 아닐동안 이전노드, 현재노드를 옮긴다

- tail에 도달하면 현재노드의 값을 임시로 저장한다

- 이전노드의 next를 NULL로 설정한다

- tail을 이전노드로 저장한다

- 임시저장된 값을 반환한다

 

 

 

9. class Stack (based LinkedList)

- int n : 스택의 개수

- LinkedList* Stack : 스택에 쓰이는 LinkedList의 포인터

 

10. Stack() : 스택 생성자

- this->Stack = new LinkedList()

- this->n = 0

 

11. size()

- 스택의 개수인 n을 반환한다

 

12. empty()

- 스택이 비었는지 여부를 반환한다 (n == 0)

 

13. top()

- 스택의 상단값인 list의 peek()을 반환한다

 

14. push(val)

- 스택크기인 n을 증가시킨다

- 스택에 추가하기위해 list의 append(val) 해준다

 

15. pop()

- 스택이 비어있는 경우 -1을 반환한다

- 그외의 경우 크기 n을 감소시킨다

- list의 delete()를 반환한다

 

16. 스택의 응용 - 후위표기식 (연산자 우선순위 없음)

- 연산자를 피연산자(숫자) 뒤에 표기하는 방법 : (A*B) - (C/D) → AB*CD/-

- 1. 피연산자(숫자) -> 스택에 push 한다 

- 2. 연산자 -> 피연산자를 스택에서 pop하여 연산 후 스택에 push 한다

- 3. 수식이 끝나면 pop하여 출력한다

'자료구조' 카테고리의 다른 글

Stack (based LinkedList) 실습문제  (0) 2020.10.27
Stack (based Array) 실습문제  (0) 2020.10.27
Stack (based Array) 실습  (0) 2020.10.26
Singly Linked List 실습문제  (0) 2020.10.26
Array 실습문제  (0) 2020.10.26