7JeY world

[자료구조 / Python] 원형리스트 | Circular Linked List using Python 본문

Programming/Data Structure

[자료구조 / Python] 원형리스트 | Circular Linked List using Python

7JeY 2021. 4. 11. 15:50
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
class CList:
    class Node:
        def __init__(self, item, link): # 노드 생성자
            self.item = item  # 항목
            self.next = link  # 다음 노드 레퍼런스
 
    def __init__(self):  # 원형 연결 리스트 생성자
        self.last = None  # 마지막 노드를 가리킴
        self.size = 0
 
    def no_items(self):
        return self.size
 
    def is_empty(self):
        return self.size == 0
 
    def insert(self, item):  # 새 항목을 리스트의 첫 노드로 삽입
        n = self.Node(item, None)  # 새 노드를 생성하여 n이 참조
        if self.is_empty():  # 연결 리스트가 empty인 경우
            n.next = n  # 새 노드는 자신을 참조
            self.last = n  # last는 새 노드 참조
        else:
            n.next = self.last.next  # 새 노드는 첫 노드 참조
            self.last.next = n  # last가 참조하는 노드와 새 노드 연결
        self.size += 1
 
    def first(self):  # 원형 연결 리스트의 첫 항목
        if self.is_empty():
            raise EmptyError('Underflow')
        f = self.last.next
        return f.item
 
    def delete(self):  # 연결 리스트의 첫 노드를 삭제
        if self.is_empty():
            raise EmptyError('Underflow')
        x = self.last.next
        if self.size == 1:  # 연결 리스트에 노드가 1개인 경우
            self.last = None  # empty 리스트 됨
        else:  # 연결 리스트에 노드가 2개 이상인 경우
            self.last.next = x.next  # last가 참조하는 노드가 두번째 노드를 연결
        self.size -= 1
        return x.item
 
    def print_list(self):
        if self.is_empty():
            print('리스트 비어있음')
        else:
            f = self.last.next
            p = f
            while p.next != f:  # 첫 노드가 다시 방문되면 루프 중단
                print(p.item, ' -> ', end='')
                p = p.next  # 노드들을 차례로 방문
            print(p.item)
 
class EmptyError(Exception):  # Underflow시 에러 처리
    pass
 
 
= CList()  # 원형 연결 리스트 객체 생성
s.insert('pear')
s.insert('cherry')
s.insert('orange')
s.insert('apple')
s.print_list()
 
print('s의 길이 =', s.no_items())
 
print('s의 첫 항목 :', s.first())
 
s.delete()
print('첫 노드 삭제 후: ', end='')
s.print_list()
 
print('s의 첫 길이 =', s.no_items())
 
print('s의 첫 항목 :', s.first())
 
s.delete()
print('첫 노드 삭제 후: ', end='')
s.print_list()
 
s.delete()
print('첫 노드 삭제 후: ', end='')
s.print_list()
 
s.delete()
print('첫 노드 삭제 후: ', end='')
s.print_list()
cs
반응형
Comments