단순 연결 리스트

Ryu_jin·2022년 9월 29일
0

Python Algorithm

목록 보기
2/5

단순 연결 리스트

  • 동적 메모리 할당을 이용해 노드들을 한 방향으로 연결하여 구현
  • 삽입이나 삭제 시 항목들의 이동이 필요 없음
  • 항목을 탐색하려면 순차 탐색을 해야함

단순 연결 리스트 삽입

단순 연결 리스트 삭제

class SList:                        # 연결리스트 클래스
  class Node:                       # 노드 클래스
    def __init__(self, item, link):  # 노드 생성자 
        self.item = item
        self.next = link

  def __init__(self):  # 단순 연결 리스트 생성자   
    self.head = None
    self.size = 0

def insert_front(self, item):  # 연결 리스트의 맨 앞에 새 노드 삽입
  if self.size == 0:
    self.head = self.Node(item, None)       # 기존에 노드 존재 X  # 연결리스트 빈 상태 
  else:     
    self.head = self.Node(item, self.head)  # 기존에 노드가 존재 할경우 # 연결리시트 비어있지 X
    self.size += 1

    def delete_front(self):  # 연결 리스트의 맨 앞 노드 삭제
        if self.size == 0:      # 연결리스트 빈 상태 
            print('리스트 empty')
        else:                   # 연결리시트 비어있지 X
            self.head = self.head.next
            self.size -= 1

    def search(self, target):  # item 이 target 인 노드 탐색
        p = self.head
        for k in range(self.size):
            if target == p.item:
                return k
            p = p.next
        return None

    def print_list(self):  # 연결 리스트 출력
        p = self.head
        while p:
            print(p.item, ' -> ', end=' ')
            p = p.next
        print()

스택 자료구조

  • 한쪽 끝에서 항목을 삭제(pop)하거나 새로운 항목을 저장(push)
  • 한쪽 끝을 나타내는 top 변수
  • 후입선출 (Last-In First-Out,LIFO)
  • 선형 자료구조 : 리스트나 단순연결 리스트로 구현

1. 리스트로 구현한 스택

def push(item):  		# 삽입 연산
    stack.append(item)


def pop():  			# 삭제 연산
    if len(stack) != 0:   
        item = stack.pop(-1)
        return item

top = len(stack) 		# top 크기

2. 사용자 정의 stack class

# 리스트로 stack 구현
class MyStack:
  # 스택 생성자 정의
  def __init__(self):
    self.stack_list = [] # list stack
  # 스택 클래스 메소드
    # 스택 상태 확인
  def is_empty(self):
    if len(self.stack_list) == 0:
      return True
    return False
  # 스택 삽입 메서드
  def push(self, value):
    self.stack_list.append(value)
  # 스택 삭제 메서드
  def pop(self):
    if len(self.stack_list) != 0:
      return self.stack_list.pop()

큐 자료구조

  • 삽입과 삭제가 양 끝에서 각각 수행되는 자료구조이다
  • 뒤(rear)에서 새 항목 삽입 연산: rear 변수
    - rear 큐의 가장 오른쪽(뒤)에 있는 항목을 참조하는 레퍼런스
  • 앞(front)에서 삭제 연산: front 변수
    - front 큐의 가장 왼쪽(앞)에 있는 항목을 참조하는 레퍼런스
  • 선입 선출(First-In Last-Out,FIFO)
  • 선형 자료구조: 리스트나 단순 연결 리스트로 구현

1. 리스트로 구현한 큐

def add(item):  # 삽입 연산
    q.append(item) # 뒤 (rear) 추가 


def remove():   # 삭제 연산
    if len(q) != 0:  # pop(0) 을 통해 맨 앞(front) 제거
        item = q.pop(0)
        return item

2. 사용자 정의 queue 클래스 : 리스트로 구현

# 리스트로 queue 구현
class Queue:
  def __init__(self):
    self.data = []

  def is_empty(self):
    if len(self.data) == 0:
      return True
    return False

  def enqueue(self, value):
    self.data.append(value)

  def dequeue(self):
    self.data.pop(0)

  def peek(self):          # 맨 앞(front) 데이터 확인  
    if not self.is_empty():
      return self.data[0]
    return
profile
Empire

0개의 댓글