이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

7. 스택 ADT

  • 2020.05.14 16:49
  • 학부 수업/자료구조
반응형

스택Stack

내용물을 쌓고 꺼내는 것처럼, Last In First Out(후입선출)인 자료구조.
삽입과 삭제가 스택의 top이라는 부분에서 수행된다.

스택의 주요 함수는 아래와 같다.

void push(e); //원소를 삽입
element pop(); // 가장 최근에 삽입된 원소를 삭제하여 반환

element top(); // 가장 최근에 삽인된 원소를 반환
int size(); // 저장된 원소의 수를 반환
boolean isEmpty();
iterator elements(); // 스택 전체 원소 반환

스택에서 발생 가능한 예외는 아래와 같다.

emptyStackException();
fullStackException();

스택의 활용

  • 직접 응용
    • 웹브라우저의 방문 기록
    • 문서편집기에서 되돌리기 기록
    • 윈도 운영체제에서 겹쳐진 윈도우들
    • C++ 혹은 자바에서 함수의 연쇄적인 호출
    • 재귀의 구현
  • 간접 응용
    • 알고리즘 수행을 위한 보조 데이터구조
    • 다른 데이터구조를 구성하는 요소

스택의 구현

  • 배열을 이용
    • 변수 t를 이용하여 top원소의 첨자를 관리
    • 크기 제한이 있으니 fullStackException()을 고려하자!
    • 기억장소를 O(n)만큼 사용하고, 각 작업의 실행시간은 O(1)임.
    • 스택의 최대 크기가 예측 가능해야 하고, 동적이지 못함.
  • 연결리스트를 이용
    • 단일연결리스트를 사용하여 구현 가능
      • 삽입/삭제가 top에서만 수행되므로, 헤더노드는 불필요함
    • top 원소를 연결리스트의 첫 노드에 저장하고 이곳을 t로 가리킴
    • 기억장소 사용 O(n)
    • 각 작업 시간 O(1)

스택의 응용 문제

심볼 균형

괄호나 주석 등의 심볼((, {, ", /* 등..)의 균형을 체크하는데 스택을 활용할 수 있다.

역순 출력

문자열의 역순 출력에 스택을 활용할 수 있다.

후위수식

우리가 일반적으로 사용하는 중위수식infix expression과 달리, 컴퓨터는 후위수식postfix expression을 사용한다.

아래 두 식은 같은 식을 각각 중위수식과 후위수식으로 나타낸 것이다.

5 x 3 + 2 (6 + 3) x 2
5 3 x 2 + 6 3 + 2 x + 

중위수식은 피연산자 연산자 피연산자의 순서로 나타내어지고, 우선순위는 괄호에 의해 무시될 수 있다.
반면, 후위수식에서는 피연산자.. 연산자 순서로 나타내어진다.

중위수식을 후위수식으로 바꾸어 평가하는데 스택을 응용할 수 있다.

def evaluate(): # 후위수식의 평가(연산)
    # input: stream of legal postfix exp
    # output number

    S = stack()
    while !endOfFile():
        s = getSymbol()
        if isOperand(s): # 피연산자인지
            S.push(s)
        else: # 연산자임
            a = S.pop()
            b = S.pop()
            S.push(doOperator(s,b,a))
    return S.pop()
def convert(): # 중위수식을 후위수식으로 변환
    #input stream of legal infix expression
    #output stream of legal postfix expression

    S = stack()
    while !endOfFile():
        s = getSymbol()
        if isOperand(s):
            write(s)
        elif s=='(':
            S.push(s)
        elif s==')':
            while S.top() != '(':
                write(S.pop())
            S.pop()
        else # s가 연산자
            while !S.isEmpty() and P[s] <= P[S.top()]:
                write(S.pop())
            S.push(s)
    while !S.isEmpty():
        write(S.pop())
    return
반응형

'학부 수업 > 자료구조' 카테고리의 다른 글

9. 트리 ADT (Tree)  (0) 2020.06.05
8. 큐, 디큐 ADT (Queue, Dequeue)  (0) 2020.05.29
6. 집합 ADT  (0) 2020.05.09
5. 리스트의 그룹과 공유  (0) 2020.04.23
4. 리스트와 추상자료형 (Abstract Data Type)  (0) 2020.04.17

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 9. 트리 ADT (Tree)

    9. 트리 ADT (Tree)

    2020.06.05
  • 8. 큐, 디큐 ADT (Queue, Dequeue)

    8. 큐, 디큐 ADT (Queue, Dequeue)

    2020.05.29
  • 6. 집합 ADT

    6. 집합 ADT

    2020.05.09
  • 5. 리스트의 그룹과 공유

    5. 리스트의 그룹과 공유

    2020.04.23
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바