자료구조의 구현
List 형 자료구조
- 배열: 크기가 변하지 않음, 중간 값이 지워져도 크기가 일정
- 리스트: 크기가 변함, 중간 값이 지워지면 뒤에 값이 앞으로 이동
Python example
# Python List
sales_results = [12, 45, 67, 43, 56, 98]
for s in sales_results:
print ( "The sales result = %d" % ( s ) )
print ( " delete:", sales_results[3])
del sales_results[3]
for s in sales_results:
print ( "The sales result = %d" % ( s ) )
The sales result = 12
The sales result = 45
The sales result = 67
The sales result = 43
The sales result = 56
The sales result = 98
delete: 43
The sales result = 12
The sales result = 45
The sales result = 67
The sales result = 56
The sales result = 98
코드 설명: List 를 생성하고 삭제, 출력 예시
연결 리스트 자료구조
- 연결 리스트
- 더블 연결 리스트
- 환형 연결 리스트
연결리스트는 데이터 사이의 관계를 이용하기 때문에
- 데이터의 중간 삽입과 삭제가 용이
- 데이터를 서치하기는 불편
Python example
# Python Linked List
class Node:
def __init__(self, data, next=None):
self.data = data
self.next = None # 다음 data
# 1. 연결리스트 생성
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
node1.next = node2
node2.next = node3
node3.next = node4
# 2. 구성된 리스트에서 데이터 2 를 지우고 나머지를 연결
del_data = 2
pre_node = node1
next_node = pre_node.next
if pre_node.data == del_data:
node1 = next_node
del pre_node
while next_node:
if next_node.data == del_data:
pre_node.next = next_node.next
del next_node
break
pre_node = next_node
next_node = next_node.next
# 3. 구성된 리스트에서 데이터 9 를 삽입
new_node = Node(9)
new_node.next = node1
node1 = new_node
# 4. 결과 출력
node = node1
while node:
print( node.data )
node = node.next
9
1
3
4
코드 설명: Node class 를 선언하고 이를 이용해
- 연결 리스트를 생성하고,
- 데이터를 삭제,
- 데이터를 삽입,
- 최종 결과를 출력 한다.
연결리스트를 이용한 스택 구현
Python example
# Link class
class Link:
def __init__(self, d1=None, d2=None):
self.data1 = d1
self.data2 = d2
self.next_link = None
def printLink(self):
print ( "{", self.data1, ", ", self.data2, "}")
# LinkList class
class LinkList:
def __init__(self):
self.first_link = None
def isEmpty(self):
return self.first_link == None
def insert(self, d1, d2):
if self.first_link == None :
self.first_link = Link( d1, d2 )
else:
tmp_next_link = self.first_link
self.first_link = Link( d1, d2 )
# first_link 의 next_link 초기화됨
self.first_link.next_link = tmp_next_link
def delete(self):
rlink = self.first_link
self.first_link = self.first_link.next_link
return rlink
def printList(self):
curLink = self.first_link
print ( "Link list" )
while(curLink != None):
curLink.printLink()
curLink = curLink.next_link
def test():
link_list = LinkList()
link_list.insert( 1, 100 )
link_list.insert( 2, 200 )
link_list.insert( 3, 300 )
link_list.insert( 4, 400 )
link_list.insert( 5, 500 )
link_list.printList()
while( not link_list.isEmpty() ):
deletedLink = link_list.delete()
print ( "delete" )
deletedLink.printLink()
link_list.printList()
test()
Link list
{ 5 , 500 }
{ 4 , 400 }
{ 3 , 300 }
{ 2 , 200 }
{ 1 , 100 }
delete
{ 5 , 500 }
delete
{ 4 , 400 }
delete
{ 3 , 300 }
delete
{ 2 , 200 }
delete
{ 1 , 100 }
Link list
코드 설명: Link class 를 선언하고 이를 이용해 스택을 구현
!TODO https://opentutorials.org/module/1335/8821 여기 자료 참고하여 내용 보강하기