python实现抽象序列

from abc import ABC, abstractmethod

class Sequence(ABC):
    @abstractmethod
    def append(self, item):
        pass

    @abstractmethod
    def get(self, index):
        pass

    @abstractmethod
    def length(self):
        pass

    @abstractmethod
    def __iter__(self):
        pass

    def is_empty(self):
        return self.length() == 0
class ListSequence(Sequence):
    def __init__(self):
        self._data = []

    def append(self, item):
        self._data.append(item)

    def get(self, index):
        return self._data[index]

    def length(self):
        return len(self._data)

    def __iter__(self):
        return iter(self._data)


class Node:
    def __init__(self, value):
        self.value = value
        self.next = None


class LinkedListSequence(Sequence):
    def __init__(self):
        self._head = None
        self._size = 0

    def append(self, item):
        new_node = Node(item)
        if self._head is None:
            self._head = new_node
        else:
            current = self._head
            while current.next:
                current = current.next
            current.next = new_node
        self._size += 1

    def get(self, index):
        if index < 0 or index >= self._size:
            raise IndexError("index out of range")
        current = self._head
        for _ in range(index):
            current = current.next
        return current.value

    def length(self):
        return self._size

    def __iter__(self):
        current = self._head
        while current:
            yield current.value
            current = current.next

Previous Post

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor