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
3
:
3
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