3-1 리스트란?
3-2 배열 구조와 연결된 구조
3-3 배열 구조의 리스트: 파이썬 리스트
3-4 연결 리스트의 구조와 종류
3-5 단순 연결 구조로 리스트 구현하기
3-6 이중 연결 구조로 리스트 구현하기

- insert(pos, e):
pos위치에 새로운 요소e를 삽입- delete(pos):
pos위치에 있는 요소를 꺼내서 반환- getEntry(pos):
pos위치에 있는 요소를 삭제하지 않고 반환- isEmpty(): 리스트가 비어있으면 True를, 아니면 False를 반환
- isFull(): 리스트가 가득 차 있으면 True를, 아니면 False를 반환
- size(): 리스트에 들어 있는 전체 요소의 수를 반환





I 삽입, 여유 공간이 확보되었기 때문에 가능None을 가짐None이 아니라 다시 머리 노드를 가리킴이전 노드(previous node)를 다른 하나는 다음 노드(next node)를 가리킴class Node:
def __init__(self, elem, link=None):
self.data = elem
self.link = link

def append(self, node):
if node is not None:
node.link = self.link
self.link = node

def popNext(self):
next = self.link
if next is not None:
self.link = next.link
return next

class LinkedList:
def __init__(self):
self.head = None
def isEmpty(self):
return self.head == None
def isFull(self):
return False

def getNode(self, pos):
if pos < 0 : return None
ptr = self.head
for i in range(pos):
if ptr == None :
return None
ptr=ptr.link
return ptr
def getEntry(self, pos)
node = self.getNode(pos)
if node == None : return None
else: return node.data

def insert(self, pos , e):
node = Node(e , None)
before = self.getNode(pos-1)
if before == None:
node.link = self.head
self.head = node
else: before.append(node)

def delete(self, pos):
before = self.getNode(pos-1)
if before == None
before = self.head
if self.head is not None:
self.head = self.head.link
return before
else: return before.popNext()

def size(self):
ptr = self.head
count = 0;
while ptr is not None:
ptr = ptr.link
count += 1
return count
def display(self, msg='LinkedList:’):
print(msg, end=' ')
ptr = self.head
while ptr is not None:
print(ptr.data, end= ’->’)
ptr = ptr.link
print (’None’)


def replace(self, pos, e):
ptr = self.head
index = 0
# pos 번째 노드 찾기
while node:
if index == pos:
ptr.data = e # 값 변경
return True
ptr = ptr.next
index += 1
class LinkedList:
def __init__(self):
self.head = None
self.count = 0
def insert(self, pos , e):
node = Node(e , None)
before = self.getNode(pos-1)
if before == None:
node.link = self.head
self.head = node
else : before.append(node)
self.count += 1
class DNote:
def __init__(self, elem, prev=None, next=None):
self.data = elem
self.next = next
self.prev = prev

def append (self, node):
if node is not None:
node.next = self.next
node.prev = self
if node.next is not None:
node.next.prev = node
self.next = node

def popNext(self):
node = self.next
if node is not None:
self.next = node.next
if self.next is not None:
self.next.prev = self
return node
class DblLinkedList:
def __init__(self):
self.head = None
def display(self, msg=’DblLinkedList: ’):
print(msg, end=' ')
ptr = self.head
while ptr is not None:
print(ptr.data, end= ’<=>’)
ptr = ptr.next
print('None ')
def insert(self, pos, e):
node = DNode(e)
before = self.getNode(pos-1)
if before == None:
node.next = self.head
if node.next is not None:
node.next.prev = node
self.head = node
else: before.append(node)
def delete(self, pos):
before = self.getNode(pos-1)
if before == None
before = self.head
if self.head is not None:
self. head = self.head.next
if self.head is not None:
self.head.prev = None
return before
else: before.popNext()
s = DblLinkedList() 만 수정하면 동일
delete(pos) list.pop(pos)
getEntry(pos) list[pos]
isEmpty() len(lst) == 0
size() len(lst)
def find(self, e):
cur = self.head
index = 0
while cur:
if cur.data == e:
return index
cur = cur.next
index += 1
return -1 # 없을 경우
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Stack:
def __init__(self):
self.top = 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
data = self.top.data
self.top = self.top.next
return data
def peek(self):
return None if self.is_empty() else self.top.data
def is_empty(self):
return self.top is None
def display(self):
cur = self.top
while cur:
print(cur.data, end=" -> ")
cur = cur.next
print("None")
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Queue:
def __init__(self):
self.front = self.rear = None
def enqueue(self, data):
new_node = Node(data)
if self.rear is None: # 처음 추가하는 경우
self.front = self.rear = new_node
else:
self.rear.next = new_node
self.rear = new_node
def dequeue(self):
if self.is_empty():
return None
data = self.front.data
self.front = self.front.next
if self.front is None: # 마지막 노드였을 경우
self.rear = None
return data
def is_empty(self):
return self.front is None
def display(self):
cur = self.front
while cur:
print(cur.data, end=" -> ")
cur = cur.next
print("None")
class Node:
def __init__(self, data):
self.data = data
self.next = self.prev = None
class DoublyCircularLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
self.head.next = self.head
self.head.prev = self.head
else:
last = self.head.prev
last.next = new_node
new_node.prev = last
new_node.next = self.head
self.head.prev = new_node
def delete(self, data):
if not self.head:
return
cur = self.head
while True:
if cur.data == data:
if cur == self.head and cur.next == self.head: # 마지막 노드 삭제
self.head = None
return
cur.prev.next = cur.next
cur.next.prev = cur.prev
if cur == self.head: # head 삭제 시
self.head = cur.next
return
cur = cur.next
if cur == self.head:
break
def display(self):
if not self.head:
print("List is empty")
return
cur = self.head
while True:
print(cur.data, end=" <-> ")
cur = cur.next
if cur == self.head:
break
print("(Back to Head)")