Pythonデータ構造の単一チェーンテーブル


Pythonデータ構造の単一チェーンテーブル
単一チェーンテーブルには後継ノードがあり、前継ノードはありません.以下のインプリメンテーション:-単一チェーンテーブルの作成-単一チェーンテーブルの印刷-単一チェーンテーブルの長さの取得-単一チェーンテーブルが空かどうかを判断-単一チェーンテーブルの後にデータを挿入-単一チェーンテーブルの指定位置のデータを取得-単一チェーンテーブルの指定要素のインデックスを取得-単一チェーンテーブルの指定位置の要素を削除-単一チェーンテーブルの指定位置の要素を更新-単一チェーンテーブルのクリア
class Node(object):
    """        """
    def __init__(self, data, p=None):
        self.data = data
        self.next = p


class LinkList(object):
    """   """

    def __init__(self):
        self.head = None

    #       
    def create(self, data):
        self.head = Node(data[0])
        p = self.head
        for i in data[1:]:
            p.next = Node(i)
            p = p.next

    #      
    def print(self):
        p = self.head
        while p != None:
            print(p.data)
            p = p.next

    #         
    def len(self):
        p = self.head
        length = 0
        while p != None:
            length += 1
            p = p.next
        return length

    #          
    def is_empty(self):
        return self.len() == 0

    #          
    def append(self, item):
        if self.is_empty():
            self.head = Node(item)
        else:
            p = self.head
            while p.next != None:
                p = p.next
            p.next = Node(item)

    #             
    def getItem(self, index):
        if self.is_empty():
            print("     ")
            return
        if index >= self.len() or index < 0:
            print("         ")
            return
        p = self.head
        count = 0
        while count != index:
            p = p.next
            count += 1
        return p.data

    #             
    def find(self, item):
        p = self.head
        index = 0
        while p != None:
            if p.data == item:
                return index
            p = p.next
            index += 1

        print("       " + repr(item))

    #             
    def insert(self, index, item):
        if self.is_empty():
            print("     ")
            return
        if index >= self.len() or index < 0:
            print("         ")
            return
        if index == 0:
            self.head = Node(item, self.head)
        else:
            p = self.head
            count = 0
            while count < index-1:
                p = p.next
                count += 1
            p.next = Node(item, p.next)

    #             
    def remove(self, index):
        if self.is_empty():
            print("     ")
            return
        if index >= self.len() or index < 0:
            print("         ")
            return
        if index == 0:
            self.head = self.head.next
        else:
            p = self.head
            count = 0
            while count < index-1:
                p = p.next
                count += 1
            p.next = p.next.next

    #             
    def update(self, index, data):
        if self.is_empty():
            print("     ")
            return
        if index > self.len() or index < 0:
            print("         ")
            return
        p = self.head
        count = -1
        while count < index-1:
            p = p.next
            count += 1
        p.data = data


    #      
    def clear(self):
        self.head = None



L = LinkList()
L.create([1, 2, 3])
print("     :")
L.print()
print("        :")
print(L.len())
print("       ")
print(L.is_empty())
print("         ")
L.append(4)
L.print()
index = 1
print("   " + repr(index) + "      ")
print(L.getItem(index))
item = 3
print("        " + repr(item) + "   ")
print(L.find(item))

index = 2
item = 10
print("     " + repr(index) + "      " + repr(item))
L.insert(index, item)
L.print()
index = 2
print("     "+repr(index)+"     ")
L.remove(index)
L.print()
index = 2
item = 100
print("     "+repr(index)+"      "+repr(item))
L.update(index, item)
L.print()
print("     ")
L.clear()
L.print()

プログラム出力結果:
1
2
33
       
False
         
1
2
3
4
   1      
2
        3   
2
     2      10
1
2
10
3
4
     2     
1
2
3
4
     2      100
1
2
100
4