Python 단 방향 링크 와 양 방향 링크 원리 와 용법 인 스 턴 스 상세 설명
링크 는 데이터 구조 로 링크 가 순환 적 으로 옮 겨 다 닐 때 효율 이 높 지 않 지만 삽입 과 삭제 할 때 장점 이 비교적 크다.
체인 테이블 은 하나의 노드 로 구성 되 어 있다.
단 방향 링크 의 노드 는 두 부분 으로 나 뉜 다.저 장 된 대상 과 다음 노드 에 대한 참조 이다.주 의 는 다음 노드 를 가리 키 는 것 이다.
한편,양 방향 링크 는 단 방향 링크 와 구별 되 는 것 은 세 가지 부분 으로 구성 된다.저 장 된 대상,다음 노드 에 대한 인용,이전 노드 에 대한 인용 은 양 방향 으로 옮 겨 다 닐 수 있다.
단 방향 목록 의 구 조 는 다음 그림 과 같다.
head 는 머리 노드 이 고 tail 은 꼬리 노드 이 며 모든 노드 는 Data 저장 대상 과 Next 가 다음 노드 에 대한 참조 로 구성 된다.
단 방향 링크 삽입 과 삭제 과정 을 말씀 드 리 겠 습 니 다.
새 노드 삽입:
원리:앞의 노드 의 Next 는 현재 의 새로운 노드 를 가리 키 고 새로운 노드 의 Next 는 노드 위 치 를 삽입 할 뒤의 노드 를 가리킨다.
메모:실제 응용 할 때 삽입 위 치 는 두 결점 과 꼬리 노드 의 상황 을 고려 해 야 합 니 다.
노드 삭제:
원리:노드 를 삭제 할 이전 노드 를 찾 고 이전 노드 의 Next 는 삭제 위치의 다음 노드 를 가리킨다.
주의:실제 응용 에서 삭 제 된 노드 가 머리 노드 나 꼬리 노드 인지 고려 해 야 하 며 링크 의 길 이 를 고려 해 야 합 니 다.
다음은 python 으로 쓴 단일 체인 시트 의 예 를 첨부 합 니 다.
class Node:
next = None
data = None
def __init__(self,nodeData):
self.data = nodeData
class List:
head = None
size = 0
def __init__(self):
self.size = 0
self.head = None
#
def a(self):
print("avx")
def printlist(self):
p=self.head
while(p is not None):
print(p.data)
p=p.next
print("――――――――――――――――――――――――――――――――――――――")
def insertlink(self, a, newdata):
newnode = Node(newdata)
if self.size == 0:
print("The link is none")
self.head = newnode
self.size = self.size+1
else:
p = self.head
while(p is not None )and (p.data != a):
p = p.next
if p.next is None:
p.next = newnode
self.size = self.size + 1
else:
newnode.next = p.next
p.next = newnode
self.size = self.size + 1
#
def deldata(self,a):
if self.size == 0:
print("The link is none")
elif self.size ==1:
self.head = None
self.size = self.size -1
else:
p = self.head
while(p is not None )and (p.data != a):
q = p
p = p.next
if p is None:
print("Can't find a")
elif p == self.head:
self.head = p.next
elif p.data ==a and p.next is not None:
q.next = q.next.next
self.size = self.size - 1
else:
q.next = None
self.size = self.size - 1
#
def updatelink(self,a,b):
p = self.head
print(p.data)
while(p is not None ) and (p.data!=a):
p = p.next
if p is None:
print("Can't find a")
else:
p.data = b
if __name__=="__main__":
p = List()
p.insertlink(1,1)
p.insertlink(1,2)
p.insertlink(1,3)
p.insertlink(1,4)
print("_________________________---insertlink")
p.printlist()
print("_________________________--chalink")
p.updatelink(2,5)
p.printlist()
print("___________________________-----dellink")
p.deldata(5)
p.printlist()
실행 결과:The link is none
_________________________---insertlink
1
4
3
2
――――――――――――――――――――――――――――――――――――――
_________________________--chalink
1
1
4
3
5
――――――――――――――――――――――――――――――――――――――
___________________________-----dellink
1
4
3
――――――――――――――――――――――――――――――――――――――
양 방향 링크 의 구 조 는 다음 그림 과 같다.
head 는 머리 노드 이 고 tail 은 꼬리 노드 이 며 모든 노드 는 Data 저장 대상 이 고 Next 는 다음 노드 에 대한 인용 과 Pre 가 이전 노드 에 대한 인용 으로 구성 된다.양 방향 으로 옮 겨 다 닐 수 있 습 니 다.
양 방향 링크 의 삽입 과 삭 제 를 말씀 드 리 겠 습 니 다.
새 노드 삽입:
원리:
삽입 할 노드 의 위 치 를 찾 습 니 다.새 노드 의 Next 는 삽입 위치의 다음 노드 를 가리 키 고 삽입 위치의 다음 노드 의 Pre 는 새 노드 를 가리 킵 니 다.
위치 노드 를 삽입 한 왼쪽 Next 는 새로운 노드 를 가리 키 고 새로운 노드 의 Pre 는 왼쪽 노드 를 가리킨다.
노드 삭제:
설명:
삭제 할 노드 의 이전 노드 를 찾 습 니 다.
이전 노드 의 Next 를 노드 를 삭제 할 다음 노드 로 직접 가리 키 기
그리고 노드 를 삭제 할 다음 노드 의 Pre 를 노드 의 이전 노드 로 가리 키 면 됩 니 다.
양 방향 링크 의 코드:
class Node():
data = None
nextnode = None
prenode = None
def __init__(self, data):
self.data = data
class PersonChan():
size = 0
head = None
tail = None
def __init__(self):
self.head = None
self.tail = None
self.size = 0
#
def add_node(self, a):
newnode = Node(a)
if(self.head == None):
self.head = newnode
self.head.prenode = None
self.tail = newnode
self.tail.prenode = None
self.tail.nextnode = None
self.size = self.size+1
else:
temp = self.head
while temp.nextnode is not None:# tail
temp = temp.nextnode
temp.nextnode = newnode
self.tail = newnode
self.tail.prenode = temp
self.tail.nextnode = None
self.size = self.size+1
# a
def ins_node(self,a,b):
newnode = Node(b)
if self.head ==None:
self.head = newnode
self.tail = newnode
print("Insert success:",newnode.data)
self.size = self.size +1
else:
temp = self.head
while(temp is not None)&(temp.data != a):
temp = temp.nextnode
if temp.nextnode == None:
temp.nextnode = newnode
self.tail = newnode
self.tail.prenode = temp
self.tail.nextnode = None
temp = None
print("Insert success:",newnode.data)
self.size = self.size+1
else:
newnode.prenode = temp
newnode.nextnode = temp.nextnode
temp.nextnode = newnode
print("Insert success:",newnode.data)
self.size = self.size+1
#
def del_node(self,a):
if self.head == None:
pass
elif self.head.data == a:
if self.size ==1:
self.head = None
self.tail = None
self.size = self.size-1
else:
self.head = self.head.nextnode
self.size = self.size -1
else:
temp = self.head.nextnode
while (temp is not None) and (temp.data != a):
temp = temp.nextnode
p = temp.prenode
if temp != None:
if temp.nextnode == None:
self.tail = p
self.tail.nextnod = None
else:
p.nextnode = temp.nextnode
temp = None
self.size = self.size -1
print("Delete is success:",a)
def listall(self):#
if self.size == 0:
print("No data in the list")
else:
temp = self.head
while(temp is not None):
print(temp.data)
temp = temp.nextnode
def lista(self):#
if self.size == 0:
print("No data in the list")
temp = self.tail
while(temp is not None):
print(temp.data)
temp = temp.prenode
if __name__ == '__main__':
link = PersonChan()
link.add_node(1)
link.add_node(2)
link.add_node(3)
link.add_node(4)
link.listall()
print("The list's size is:",link.size)
link.lista()
실행 결과:1
2
3
4
("The list's size is:", 4)
4
3
2
1
Python 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.