# -*- coding:utf-8 -*-
"""
Created on 2010-5-21
单链表的实现 1
@author: Administrator
"""
class LinkedList(object):
class Element(object):
'''
定义元素,包含了数据内容_datum和指向下一元素的链接_next
'''
def __init__(self,list,datum,next): #用参数初始化新的节点.
self._list = list #标识自己属于哪一个list
self._datum = datum #元素value
self._next = next #下一节点的位置
def getDatum(self):
return self._datum
datum = property(
fget = lambda self: self.getDatum())
def getNext(self):
return self._next
next = property(
fget = lambda self: self.getNext())
def __init__(self): #LinkedList 初始化
self._head = None #头
self._tail = None #尾
def purge(self): #链表清空,初始化为空链表
self._head = None
self._tail = None
def gethead(self):
return self._head
head = property(
fget = lambda self: self.getHead())
def getTail(self):
return self._tail
tail = property(
fget = lambda self: self.getTail())
def IsEmpty(self):
return self._head == None
isEmpty = property(
fget = lambda self: self.IsEmpty())
def getFirst(self):
if self._head is None:
raise ContainerEmpty
return self._head._datum
first = property(
fget = lambda self: self.getFirst())
def getLast(self):
if self._tail is None:
raise ContainerEmpty
return self._tail._datum
last = property(
fget = lambda self: self.getLast ())
def prepend(self,item): #用于将元素插入链表头,这样,插入后的元素变成新的链表头:
tmp = self.Element (self,item,self._head)
if self._head is None:
self._tail = tmp
self._head = tmp
def append(self,item):
tmp = Element(self,item,None)
if self._head is None:
self._head = tmp
else:
self._tail._next = tmp
self._tail = tmp
def __copy__(self):
lst = LinkedList()
ptr = self._head
while ptr is not None:
lst.append(ptr._datum)
ptr = ptr._next
return lst
def extract(self,item):
prePtr = ptr = self._head
while ptr is not None and ptr._datum is not item:
prePtr = ptr
ptr = ptr._next
if ptr is None:
raise KeyError
if ptr == self._head:
self._head = ptr._next
else:
prePtr._next = ptr._next
if ptr == self._tail:
self._tail = prePtr
def find(self,item):
ptr = self._head
while ptr is not None and ptr._datum is not item:
ptr = ptr._next
return ptr
def findBySeq(self, seq):
ptr = self._head
_count = 0
while ptr is not None and _count != seq:
ptr = ptr._next
_count += 1
return ptr
def getlenth(self):
current = self.head
len = 0
_lastptr = tail
while current is not _lastptr:
len +=1
current = current._next
return len
lenth = property(
fget = lambda self: self.getlenth())
def insert(self, seq, item):
if seq == 0:
tmp = Element(self, item, None)
self._head = tmp
elif seq > self.lenth:
raise OutOfRange
elif seq == self.lenth:
tmp = self.append(item)
else:
_preptr = findBySeq(seq)
_nextptr = _preptr._next
tmp = Element(self,item,_nextptr)
_forward._next = tmp
return tmp
"""
Created on 2010-5-21
单链表的实现 1
@author: Administrator
"""
class LinkedList(object):
class Element(object):
'''
定义元素,包含了数据内容_datum和指向下一元素的链接_next
'''
def __init__(self,list,datum,next): #用参数初始化新的节点.
self._list = list #标识自己属于哪一个list
self._datum = datum #元素value
self._next = next #下一节点的位置
def getDatum(self):
return self._datum
datum = property(
fget = lambda self: self.getDatum())
def getNext(self):
return self._next
next = property(
fget = lambda self: self.getNext())
def __init__(self): #LinkedList 初始化
self._head = None #头
self._tail = None #尾
def purge(self): #链表清空,初始化为空链表
self._head = None
self._tail = None
def gethead(self):
return self._head
head = property(
fget = lambda self: self.getHead())
def getTail(self):
return self._tail
tail = property(
fget = lambda self: self.getTail())
def IsEmpty(self):
return self._head == None
isEmpty = property(
fget = lambda self: self.IsEmpty())
def getFirst(self):
if self._head is None:
raise ContainerEmpty
return self._head._datum
first = property(
fget = lambda self: self.getFirst())
def getLast(self):
if self._tail is None:
raise ContainerEmpty
return self._tail._datum
last = property(
fget = lambda self: self.getLast ())
def prepend(self,item): #用于将元素插入链表头,这样,插入后的元素变成新的链表头:
tmp = self.Element (self,item,self._head)
if self._head is None:
self._tail = tmp
self._head = tmp
def append(self,item):
tmp = Element(self,item,None)
if self._head is None:
self._head = tmp
else:
self._tail._next = tmp
self._tail = tmp
def __copy__(self):
lst = LinkedList()
ptr = self._head
while ptr is not None:
lst.append(ptr._datum)
ptr = ptr._next
return lst
def extract(self,item):
prePtr = ptr = self._head
while ptr is not None and ptr._datum is not item:
prePtr = ptr
ptr = ptr._next
if ptr is None:
raise KeyError
if ptr == self._head:
self._head = ptr._next
else:
prePtr._next = ptr._next
if ptr == self._tail:
self._tail = prePtr
def find(self,item):
ptr = self._head
while ptr is not None and ptr._datum is not item:
ptr = ptr._next
return ptr
def findBySeq(self, seq):
ptr = self._head
_count = 0
while ptr is not None and _count != seq:
ptr = ptr._next
_count += 1
return ptr
def getlenth(self):
current = self.head
len = 0
_lastptr = tail
while current is not _lastptr:
len +=1
current = current._next
return len
lenth = property(
fget = lambda self: self.getlenth())
def insert(self, seq, item):
if seq == 0:
tmp = Element(self, item, None)
self._head = tmp
elif seq > self.lenth:
raise OutOfRange
elif seq == self.lenth:
tmp = self.append(item)
else:
_preptr = findBySeq(seq)
_nextptr = _preptr._next
tmp = Element(self,item,_nextptr)
_forward._next = tmp
return tmp

浙公网安备 33010602011771号