자료구조 연결된 스택 구현 (Linked Stack) [파이썬]

2024. 5. 30. 16:36·Computer Science/Algorithm

안녕하세요. 오늘은 자료구조를 구현하는 가장 기본적인 방식(배열, 연결된 구조)중 하나인 연결된 구조를 파이썬으로 직접 구현해보는 시간을 갖겠습니다. 연결된 구조, 연결된 리스트가 뭔지 알고 싶으시다면 이 글 [작성 예정] 을 참고해주세요.

 

파이썬의 함수로 구현하는 것이 아니라 직접 구현해보겠습니다. 

참고 자료는 파이썬으로 쉽게 배우는 자료구조입니다.

 

class Node:
    def __init__(self, data, link = None):
        self.data = data
        self.link = link

# Node를 만들어보자 Node는 Data 필드와 Link 필드로 구성되어 있다.
# Link는 맨 처음 생성 될 때 아무것도 가르키지 않고 있어야 함으로 None을 디폴트 값으로 준다.
# 파이썬에서는 None, C언어에서는 Null이다.

# 연결된 스택 클래스를 만들어보자.

class LinkedStack:
    #연결된 구조로 만든 스택에는 top만 있으면 된다. 메모리가 꽉 차지않는 이상 계속 만들 수 있기 때문에
    # 배열로 만든 스택처럼 용량을 지정할 필요가 없다.
    def __init__(self,top = None):
        #처음에 top은 None을 가르키고 있어야한다.
        self.top = top
   
    def isFull(self):
        #연결된 구조로 만든 스택은 가득 찰 일이 거의 없다.. 항상 False을 반환해야한다.
        return False
   
    def isEmpty(self):
        #비어있는 지 확인하려면 top이 None을 가르키고 있다면 비어있는 것이다.
        return self.top == None
        #None이면 True를 그렇지 않으면 False를 리턴 해줄 것이다.

    def push(self, e):
        #isFull은 의미가 없기 때문에 검사 하지 않는다.
        #n에 노드(데이터가 e고 현재 link가 None인)를 만들어서 넣어준다.  
        n = Node(e)
        #n의 link가 현재 top을 연결해준다.    
        n.link = self.top
        #top이 다음 노드의 링크를 가르키게 해준다.
        self.top = n        
       
    def pop(self):
        #비어있을 수 있기 때문에 isEmpty는 의미가 있다.
        if not self.isEmpty():
            #먼저 현재 상단의 노드를 n에 집어 넣는다.
            n = self.top
            #top이 다음 걸 가르키게 한다.
            self.top = n.link
            #pop은 뭘 제거했는 지 알려줘야하기 때문에 데이터를 반환한다.
            return n.data
    def peek(self):
        if not self.isEmpty():
            return self.top.data

    def __str__(self):
        #str을 안해주면 스택의 내용을 출력해주는게 아니라 스택 객체의 정보를 알려준다.
        #0x00~~ 이런식으로..!
       
        #모든 노드를 순서대로 방문해야한다.
        #먼저 빈 리스트를 만들어주고
        arr = []
        node = self.top
        while not node == None :
            arr.append(node.data)
            node = node.link
        return str(arr)
   
    #자, 그럼 이제 test를 해보자. test는 

if __name__ == '__main__':

    S = LinkedStack()
    S.push('A')
    S.push('B')
    S.push('C')
    print(S)
  
    print('[%s] is deleted.' % S.pop()); 
    print(S)

코드를 실행하면 이렇게 나옵니다.

 

스택이기 때문에 A,B,C를 넣으면 

 

C

B

A 

 

이런식으로 쌓이는데. 만약 pop을 한다면 가장 위에 있던 C가 빠져나오게 된다!

 

'Computer Science > Algorithm' 카테고리의 다른 글

백준 자바 18528번 큐2 - 시간 초과 StringBuilder로 해결!  (2) 2024.10.04
백준 자바 2566번 최댓값 - 왜 97%에서 오답이?  (0) 2024.09.28
백준 자바 시간 초과 BufferedReader / StringTokenizer로 해결!  (2) 2024.09.28
백준 자바 11382번 런타임 에러 발생 이유  (1) 2024.09.22
[백준/JAVA] !error: class baekjoon_2557 is public, should be declared in a file named baekjoon_2557.java  (0) 2024.09.10
'Computer Science/Algorithm' 카테고리의 다른 글
  • 백준 자바 2566번 최댓값 - 왜 97%에서 오답이?
  • 백준 자바 시간 초과 BufferedReader / StringTokenizer로 해결!
  • 백준 자바 11382번 런타임 에러 발생 이유
  • [백준/JAVA] !error: class baekjoon_2557 is public, should be declared in a file named baekjoon_2557.java
PENGU
PENGU
  • PENGU
    펭구 랩
    PENGU
  • 전체
    오늘
    어제
    • 분류 전체보기 (31)
      • Computer Science (6)
        • OS (0)
        • Network (0)
        • Algorithm (6)
      • 코테대비 (7)
      • Java (5)
      • Python (9)
        • 파이썬 문법 (8)
      • Project (1)
      • 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • Computer Science
    • Operation System
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    싸피 코테 대비
    데이터 중심 설계
    백준 대비
    오브젝트 챕터2
    swea 자바
    조영호 오브젝트
    오브젝트
    swea1206
    백준 2460
    자바 재귀식
    백준 코테
    책임 중심 설계
    책임 ㅜㅈㅇ심 설계
    조영호 자바
    오브젝트 자바
    점프 투 파이썬
    싸피 대비
    백준 자바
    백준 코테 대비
    오브젝트 리뷰
    파이썬
    자바 피보나치의수
    점프투파이썬
    swea view
    오브젝트 스터디
    백준 replace
    코테 대비
    피보차니수
    파이썬 기초
    파이썬 자료형
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
PENGU
자료구조 연결된 스택 구현 (Linked Stack) [파이썬]
상단으로

티스토리툴바