[GeneralAlgorithm] Double-linked List Algorithm 双链表算法 (in Python)

Double-linked List Algorithm (in Python)

简易双链表算法,部分功能待补充。

class DLinkedListNode:
    def __init__(self, initData=None, initNext=None, initPrevious=None):
        self.data = initData
        self.next = initNext
        self.previous = initPrevious

        if initNext is not None:
            self.next.previous = self
        if initPrevious is not None:
            self.previous.next = self

    def getData(self):
        return self.data

    def setData(self, newData):
        self.data = newData

    def getNext(self):
        return self.next

    def getPrevious(self):
        return self.previous

    def setNext(self, newNext):
        self.next = newNext

    def setPrevious(self, newPrevious):
        self.previous = newPrevious


class DLinkedList:
    def __init__(self):
        self.__head = None
        self.__tail = None
        self.__size = 0

    def search(self, item):
        current = self.__head
        found = False
        while current is not None and not found:
            if current.getData() == item:
                found = True
            else:
                current = current.getNext()
        return found

    def index(self, item):
        current = self.__head
        found = False
        index = 0
        while current is not None and not found:
            if current.getData() == item:
                found = True
            else:
                current = current.getNext()
                index = index + 1
        if not found:
            index = -1
        return index

    def insert(self, pos, item):
        assert 0 <= pos
        if pos == 0:  
            self.add(item)
        elif pos > self.__size - 1:  
            self.append(item)
        else:
            index = 0
            current = self.__head
            newNode = DLinkedListNode(item)

            while index < pos - 1:
                index += 1
                current = current.getNext()
            newNode.setNext(current.getNext())
            newNode.setPrevious(current)
            current.getNext().setPrevious(newNode)
            current.setNext(newNode)
            self.__size += 1

    def searchLarger(self, item):
        index = 0
        current = self.__head
        if current.getData() > item:
            return index
        while index < self.__size:
            current = current.getNext()
            index += 1
            if int(current.getData()) > item:
                return index

    def getSize(self):
        return self.__size

    def getItem(self, pos):
        assert isinstance(pos, int)
        if self.__size < pos:
            raise Exception
        if pos > 0:
            current = self.__head
            index = 0
            while index != pos:
                current = current.getNext()
                index += 1
            return current.getData()
        elif pos == 0:
            current = self.__head
            return current.getData()
        else:
            pos_opp = abs(pos)
            current = self.__tail
            index = 1
            while index != pos_opp:
                current = current.getPrevious()
                index += 1
            return current.getData()

    def __str__(self):
        expression_list = []
        index = 0
        current = self.__head
        expression_list.append(str(self.__head.getData()))
        while index != (self.__size - 1):
            current = current.getNext()
            expression_list.append(str(current.getData()))
            index += 1
        string = ' '
        expression_str = string.join(expression_list)
        return expression_str

    def add(self, item):
        temp = DLinkedListNode(item, self.__head)
        if self.__head is None:
            self.__tail = temp
        else:
            self.__head.setPrevious(temp)
        self.__head = temp
        self.__size += 1

    def append(self, item):
        temp = DLinkedListNode(item)
        if self.__head is None:
            self.__head = temp
        else:
            self.__tail.setNext(temp)
            temp.setPrevious(self.__tail)
        self.__tail = temp
        self.__size += 1

    def remove(self, item):
        pass

    def pop(self):
        pass

    def pop_pos(self, pos=None):
        pass
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值