이중연결리스트로 구현한 덱

박진은·2022년 5월 5일
0

자료구조

목록 보기
16/37
class Dnode:
    def __init__(self, data, prev=None, next=None):
        self.data = data
        self.prev = prev
        self.next = next

이중연결리스트로 구현한 댁의 노드는 전단과 후단의 연결이 필요하기 때문에 링크 필드가 두개의 변수로 이루어져
있다 self.prev는 자기 자신의 후단의 노드와 연결하는 링크고
self.next 는 자기 자신의 전단의 노드와 연결하는 링크이다.
from Dnode import Dnode

class doublelinkedDec:
    def __init__(self):
        self.rear = None
        self.front = None

    def isEmpty(self):
        return self.front == None

    def clear(self):
        self.front = self.front = None

    def size(self):
        if self.isEmpty():
            return 0
        else:
            count = 1
            dnode = self.front
            while dnode == self.rear:
                count += 1
                denode = denode.next
            return count

    def display(self):
        if self.isEmpty():
            print("None")
        else:
            denode = self.front
            while denode != self.rear:
                print(denode.data, end="->")
                denode = denode.next
            print(self.rear.data)

    def addFront(self, data):
        node = Dnode(data, None, self.Front)  # link prev to front of instance
        if self.isEmpty():
            self.front = self.rear = node
        else:
            self.front.prev = node
            self.front = node

    def addRear(self, data):
        node = Dnode(data, self.rear, None)
        if self.isEmpty():
            self.rear = self.front = node
        else:
            self.rear.next = node
            self.rear = node

    def deleteFront(self):
        redata = self.front.data
        self.front = self.front.next

        if self.front == None:  # node가 하나밖에 없는거야
            self.front = self.rear = None
        else:
            self.front.prev = None
        return redata

    def deleteRear(self):
        if not self.isEmpty():
            data = self.rear.data
            self.rear = self.rear.prev
            if self.rear == None:
                self.rear = self.front = None
            else:
                self.rear.next = None
            return data

doublelinkdec = doublelinkedDec()
for i in range(10):
    doublelinkdec.addRear(i)
doublelinkdec.display()
for i in range(3):
    doublelinkdec.deleteRear()
doublelinkdec.display()

삽입

def addFront(self, data):
        node = Dnode(data, None, self.front)  #새로은 노드를 생성하는데 node.next에 
# 프런트가 가리키는 객체와 연결해서 생성한다.
        if self.isEmpty():
            self.front = self.rear = node
#연결 리스트가 비어있다면 모두 node 같은 노드와 연결한다.
        else:
            self.front.prev = node
            self.front = node
#비어있지 않으면 프론트의 노드의 prev링크에 새로 만들어진 노드를 연결한다.
#프론트가 가르키는 노드를 새로 생성된 노드로 바꿔준다.
def addRear(self, data):
        node = Dnode(data, self.rear, None)
#새로 노드 객체를 생성하는데 self,perv에 self.rear가 가르키는 객체와 연결한다.
        if self.isEmpty():
            self.rear = self.front = node
#링크드 리스트가 비어있다면 self.front and self.front를 같은 객체에 연결한다.
        else:
            self.rear.next = node
            self.rear = node
#원래 self.rear가 가르키고 있는 객체의 next링크에 새로만든 노드를 연결한다,
#self,rear가 가르키고 있는 객체를 새로만든 객체로 연결한다.

삭제

profile
코딩

0개의 댓글