스택을 구현하기 위해서는 이전 포스팅에서 다루었던, 배열을 이용하는 방법과 연결리스트를 이용하는 방법이 있다.
연결리스트는 단순 연결 리스트를 이용하여 진행한다.
단순 연결리스트에서 변수의 top은 가장 최근에 삽입된 요소를 가리키는 변수가 된다. (head와 유사) 초기화시에는 top= NULL로 설정하는데, 이는 공백 스택을 의미한다.
스택에서 가장 먼저 삽입된 요소는 마지막 노드가 되므로(스택의 특징) link field를 NULL로 설정하여야 한다. 그리고 가장 최근에 삽입된 요소는 첫번째 노드가 된다. 이는 단순 연결리스트에서 첫 번째 노드로 삽입하는 연산과 동일하다.
[스택 구현: 연결리스트 이용 방법 by 재민]
#스택 구현: 연결 리스트 이용 by 재민
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Stack:
def __init__(self):
self.top = None
def is_empty(self):
return self.top is None
def push(self, data):
new_node = Node(data)
new_node.next = self.top
self.top = new_node
def pop(self):
if self.is_empty():
return None
popped_data = self.top.data
self.top = self.top.next
return popped_data
def peek(self):
if self.is_empty():
return None
return self.top.data
def display(self):
current = self.top
while current:
print(current.data, end=" ")
current = current.next
print()
# 스택 테스트
stack = Stack()
print("Is the stack empty?", stack.is_empty())
stack.push(1)
stack.push(2)
stack.push(3)
print("Top of the stack:", stack.peek())
print("Is the stack empty?", stack.is_empty())
print("Stack elements:")
stack.display()
print("Popped element:", stack.pop())
print("Stack elements after pop:")
stack.display()
반응형
'Computer Science' 카테고리의 다른 글
[자료구조] 큐 구현: 연결리스트 이용 방법 (0) | 2024.02.06 |
---|---|
[자료구조] 큐 구현: 배열 이용방법(feat. enqueue, dequeue, peek 알고리즘), queue가 가지는 한계점 (0) | 2024.02.05 |
[자료구조] 스택 구현 : 배열 이용 방법 (1) | 2024.02.03 |
[자료구조] Doubly Linked List의 삭제 (0) | 2024.02.02 |
[데이터베이스] Natural Join의 위험성에 관하여(Natural Join은 왜 위험할까?) (0) | 2024.02.02 |