pythonバージョンのシングルチェーン表はコードを実現します。
今日はデータ構造の本を見ましたが、実はデータ構造には何種類もありません。線形表、配列、文字列、行列とスタックなどがあります。データ構造の理論は難しくないです。主に自分でこれらのデータ構造と対応する基本的な操作方法を書いてください。
このブログに線形表を書いてください。
線形表:順序表とチェーン表に分けられます。
一、順番表
順序表は表のデータに対して、住所も順番ですので、ランダムにアクセスできます。ただし、要素を挿入したり削除したりするときは、アドレスの連続性を満たすために、多くの要素位置を移動します。したがって、順序表の要素を挿入または削除する時間の複雑さはo(n)です。多くの場合、順序表を統合する際には、表の要素を先に並べ替えてから処理する必要があります。毎回最初から検索することは避けられます。
二、チェーン
チェーンは順序表のランダムアクセスの特徴を失ってしまいました。つまり毎回中から一つの要素を取って、初めから探し始めます。そうすると、時間がかかります。時間の複雑さはo(n)です。しかし、挿入と削除、二つのチェーンを連結する時に便利になりました。針を少しだけ修正すればいいです。
チェーンテーブルの各要素ノードは、データ部分と次のノードのポインタを含んでいます。一般的にチェーンの頭に先頭の結点が付いています。そして、頭の結点は普通はデータを保存しないで、長さなどの付加情報を保管しています。あるいは保存していません。
多くの言語にはポインタという概念がなく、行列の概念があります。例えば、javaとpython、javaの配列は定義配列のタイプを求めます。つまり、同じタイプのデータでなければなりません。pythonは要求されていません。だから、pythonのlistはチェーンの真正の意味にもっと近いです。この配列で記述された鎖は静的連鎖表と呼ばれている。静的チェーンを使って、このような言語に対してチェーンを記述するのはとても便利です。これらの言語はすべて内蔵類を提供してチェーンを処理しています。
このほかに、循環リンク表、双方向リンク表もあります。(前に検索できない問題を解決しましたが、針を修正する時はもっと多くの操作が必要です。)
このブログに線形表を書いてください。
線形表:順序表とチェーン表に分けられます。
一、順番表
順序表は表のデータに対して、住所も順番ですので、ランダムにアクセスできます。ただし、要素を挿入したり削除したりするときは、アドレスの連続性を満たすために、多くの要素位置を移動します。したがって、順序表の要素を挿入または削除する時間の複雑さはo(n)です。多くの場合、順序表を統合する際には、表の要素を先に並べ替えてから処理する必要があります。毎回最初から検索することは避けられます。
二、チェーン
チェーンは順序表のランダムアクセスの特徴を失ってしまいました。つまり毎回中から一つの要素を取って、初めから探し始めます。そうすると、時間がかかります。時間の複雑さはo(n)です。しかし、挿入と削除、二つのチェーンを連結する時に便利になりました。針を少しだけ修正すればいいです。
チェーンテーブルの各要素ノードは、データ部分と次のノードのポインタを含んでいます。一般的にチェーンの頭に先頭の結点が付いています。そして、頭の結点は普通はデータを保存しないで、長さなどの付加情報を保管しています。あるいは保存していません。
多くの言語にはポインタという概念がなく、行列の概念があります。例えば、javaとpython、javaの配列は定義配列のタイプを求めます。つまり、同じタイプのデータでなければなりません。pythonは要求されていません。だから、pythonのlistはチェーンの真正の意味にもっと近いです。この配列で記述された鎖は静的連鎖表と呼ばれている。静的チェーンを使って、このような言語に対してチェーンを記述するのはとても便利です。これらの言語はすべて内蔵類を提供してチェーンを処理しています。
このほかに、循環リンク表、双方向リンク表もあります。(前に検索できない問題を解決しましたが、針を修正する時はもっと多くの操作が必要です。)
# -*- coding=utf-8 -*-
# Python
class Node(object):
def __init__(self, value, next=0):
self.value = value
self.next = next #
class LinkedList(object):
#
def __init__(self):
self.head = 0 #
def __getitem__(self, key):
if self.is_empty():
print 'Linked list is empty.'
return
elif key < 0 or key > self.get_length():
print 'The given key is wrong.'
return
else:
return self.get_elem(key)
def __setitem__(self, key, value):
if self.is_empty():
print 'Linked list is empty.'
return
elif key < 0 or key > self.get_length():
print 'The given key is wrong.'
return
else:
return self.set_elem(key, value)
def init_list(self, data): # data
self.head = Node(data[0])
p = self.head #
print p, self.head
for i in data[1:]:
p.next = Node(i) #
p = p.next #
print self.head.next.next
def get_length(self):
length = 0
p = self.head
while p != 0: # 0 Node 0 , ,
length += 1
p = p.next
return length
def is_empty(self):
if self.head == 0:
return True
else:
return False
def insert_node(self, index, value):
if index < 0 or index > self.get_length():
print 'Can not insert node into the linked list.'
elif index == 0:
temp = self.head
self.head = Node(value, temp)
else:
p, post = self.head, self.head
for i in xrange(index):
post = p
p = p.next
temp = p
post.next = Node(value, temp)
def delete_node(self, index):
if index < 0 or index > self.get_length()-1:
print "Wrong index number to delete any node."
elif self.is_empty():
print "No node can be deleted."
elif index == 0:
temp = self.head
self.head = temp.next
elif index == self.get_length():
p = self.head
for i in xrange(self.get_length()-2):
p = p.next
p.next = 0
else:
p = self.head
for i in xrange(index-1):
p = p.next
p.next = p.next.next
def show_linked_list(self): #
if self.is_empty():
print 'This is an empty linked list.'
else:
p, container = self.head, []
for _ in xrange(self.get_length()-1):
container.append(p.value)
p = p.next
container.append(p.value)
print container
def clear_linked_list(self): #
self.head = 0
def get_elem(self, index):
if self.is_empty():
print "The linked list is empty. Can not get element."
elif index < 0 or index > self.get_length()-1:
print "Wrong index number to get any element."
else:
p = self.head
for _ in xrange(index):
p = p.next
return p.value
def set_elem(self, index, value):
if self.is_empty():
print "The linked list is empty. Can not set element."
elif index < 0 or index > self.get_length()-1:
print "Wrong index number to set element."
else:
p = self.head
for _ in xrange(index):
p = p.next
p.value = value
def get_index(self, value):
p = self.head
for i in xrange(self.get_length()):
if p.value == value:
return i
else:
p = p.next
return -1
l = LinkedList()
print "The length of linked list now is: ", l.get_length()
print l.is_empty()
l.init_list([1, 5, 12, "fjd", 45, 999])
print "The length of linked list now is: ", l.get_length()
print l.is_empty()
l.insert_node(4, 100)
l.insert_node(6, "cecil")
l.show_linked_list()
print "The value of index 0 is: ", l.get_elem(0)
l.set_elem(0,1000)
l.show_linked_list()
print "the index of *** is: ", l.get_index(1009)
print "The length of linked list now is: ", l.get_length()
l.delete_node(3)
#l.clear_linked_list()
l.show_linked_list()
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。