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 size(self):
return self.size
def is_empty(self):
return self.size == 0
def insert_front(self, item):
if self.is_empty():
self.head = self.Node(item, None)
else:
self.head = self.Node(item, self.head)
self.size += 1
def insert_after(self, item, p):
p.next = SList.Node(item, p.next)
self.size += 1
def delete_front(self):
if self.is_empty():
raise EmptyError('Underflow')
else:
self.head = self.head.next
self.size -= 1
def delete_after(self, p):
if self.is_empty():
raise EmptyError('Underflow')
t = p.next
p.next = t.next
self.size -= 1
def search(self, 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:
if p.next != None:
print(p.item, ' -> ', end='')
else:
print(p.item)
p = p.next
class EmptyError(Exception):
pass
#from slist import SList
#slist.py 파일에서 Slist를 import -> iPython에서는 위쪽에 선언되어 있어 사용안함
#if __name__ == '__main__': # iPython에서는 위쪽에 선언되어 있어 사용안 함
s = SList()
s.insert_front('orange'), s.print_list()
s.insert_front('apple'), s.print_list()
s.insert_after('cherry', s.head.next), s.print_list()
s.insert_front('pear'), s.print_list()
s.delete_front(), s.print_list()
s.delete_front(), s.print_list()
s.delete_front(), s.print_list()
s.delete_front(), s.print_list()
s.delete_front(), s.print_list()
class DList:
class Node:
def __init__(self, item, prev, link):
self.item = item
self.prev = prev
self.next = link
def __init__(self):
self.head = self.Node(None, None, None)
self.tail = self.Node(None, self.head, None)
self.head.next = self.tail
self.size = 0
def size(self):
return self.size
def is_empty(self):
return self.size == 0
def insert_before(self, p, item):
t = p.prev
n = self.Node(item, t, p)
p.prev = n
t.next = n
self.size += 1
def insert_after(self, p, item):
t = p.next
n = self.Node(item, p, t)
t.prev = n
p.next = n
self.size += 1
def delete(self, x):
if self.is_empty():
raise EmptyError('Underflow')
f = x.prev
r = x.next
f.next = r
r.prev = f
self.size -= 1
return x.item
def print_list(self):
if self.is_empty():
print('리스트 비어있음')
else:
p = self.head.next
while p != self.tail:
if p.next != self.tail:
print(p.item, ' <=> ', end='')
else:
print(p.item)
p = p.next
class EmptyError(Exception):
pass
#from dlist import DList
#dlist.py 파일에서 Dlist를 import -> iPython에서는 위쪽에 선언되어 있어 사용안함
#if __name__ == '__main__': # iPython에서는 위쪽에 선언되어 있어 사용안 함
s = DList()
s.insert_after(s.head, 'apple'), s.print_list()
s.insert_before(s.tail, 'orange'), s.print_list()
s.insert_before(s.tail, 'cherry'), s.print_list()
s.insert_after(s.head.next, 'pear'), s.print_list()
s.delete(s.tail.prev), s.print_list()
s.delete(s.tail.prev), s.print_list()
s.delete(s.tail.prev), s.print_list()
s.delete(s.tail.prev), s.print_list()
#s.delete(s.tail.prev), s.print_list()
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 size(self):
return self.size
def is_empty(self):
return self.size == 0
def insert(self, item):
n = self.Node(item, None)
if self.is_empty():
n.next = n
self.last = n
else:
n.next = self.last.next
self.last.next = n
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:
self.last = None
else:
self.last.next = x.next
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):
pass
#from clist import CList
#clist.py 파일에서 Clist를 import -> iPython에서는 위쪽에 선언되어 있어 사용안함
#if __name__ == '__main__': # iPython에서는 위쪽에 선언되어 있어 사용안 함
s = CList()
s.insert('pear'), s.print_list()
s.insert('cherry'), s.print_list()
s.insert('orange'), s.print_list()
s.insert('apple'), s.print_list()
s.delete(), s.print_list()
s.delete(), s.print_list()
s.delete(), s.print_list()
s.delete(), s.print_list()
s.delete(), s.print_list()