#使用链表这个数据结构,对一组数据进行插入排序
2017-09-13 09:55
302 查看
__author__ = 'zhouhai'
#使用链表这个数据结构,对一组数据进行插入排序
class Node:
def __init__(self,number,next=None):
self.number = number
self.next = next
def __repr__(self):
return self.number
class LinkList:
def __init__(self,head):
self.head = head
def getLength(self):
if self.head == None:
return 0
count = 1
p = self.head.next
while p != None:
count += 1
p = p.next
def insert_after(self,target,number):
temp = target.next
target.next = number
number.next = temp
def printLink(self):
p = self.head
while p !=None:
print(p.number,end=' ')
p = p.next
#直接插入排序(Straight Insertion Sort)
if __name__ =='__main__':
#待排序的一组数据
numbers = [6,3,1,7,8,10,0,56,3,35,23,123,45,0,12,34,1,7]
#取第一个数,作为一个基点,此时链表只有一个数值
link = LinkList(Node(numbers[0],None))
#从第2个数字开始,依次取出每一个数字,根据数值的大小,决定插入在列表中的哪里
for i in range(1,len(numbers)):
p = link.head
pre = p
while p != None:
#找到位置,开始进行插入操作
if numbers[i] <= p.number:
temp = Node(numbers[i],None)
if p == link.head:
temp.next = p
link.head = temp
else:
pre.next = temp
temp.next = p
break
#否则,就取下个数值进行比较
else:
pre = p
p = p.next
#如果比较完成,链表里面都没有比这个数大的,说明这个数应该插在链表的最后面
if p == None:
pre.next = Node(numbers[i])
link.printLink()
总结:对于链表还用得不熟悉,需要对链表头的插入做特殊处理。否则会出现问题
if p == link.head:
temp.next = p
link.head = temp
else:
pre.next = temp
temp.next = p
#使用链表这个数据结构,对一组数据进行插入排序
class Node:
def __init__(self,number,next=None):
self.number = number
self.next = next
def __repr__(self):
return self.number
class LinkList:
def __init__(self,head):
self.head = head
def getLength(self):
if self.head == None:
return 0
count = 1
p = self.head.next
while p != None:
count += 1
p = p.next
def insert_after(self,target,number):
temp = target.next
target.next = number
number.next = temp
def printLink(self):
p = self.head
while p !=None:
print(p.number,end=' ')
p = p.next
#直接插入排序(Straight Insertion Sort)
if __name__ =='__main__':
#待排序的一组数据
numbers = [6,3,1,7,8,10,0,56,3,35,23,123,45,0,12,34,1,7]
#取第一个数,作为一个基点,此时链表只有一个数值
link = LinkList(Node(numbers[0],None))
#从第2个数字开始,依次取出每一个数字,根据数值的大小,决定插入在列表中的哪里
for i in range(1,len(numbers)):
p = link.head
pre = p
while p != None:
#找到位置,开始进行插入操作
if numbers[i] <= p.number:
temp = Node(numbers[i],None)
if p == link.head:
temp.next = p
link.head = temp
else:
pre.next = temp
temp.next = p
break
#否则,就取下个数值进行比较
else:
pre = p
p = p.next
#如果比较完成,链表里面都没有比这个数大的,说明这个数应该插在链表的最后面
if p == None:
pre.next = Node(numbers[i])
link.printLink()
总结:对于链表还用得不熟悉,需要对链表头的插入做特殊处理。否则会出现问题
if p == link.head:
temp.next = p
link.head = temp
else:
pre.next = temp
temp.next = p
相关文章推荐
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- (使用STL自带的排序功能进行排序7.3.12)UVA 11057 Exact Sum(在一组数据中找到这么两个数,使得他们的和等于指定数&&且这两个数之间的差值最小)
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
- 编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 数据结构与算法:单链表(利用万能指针实现对任意类型数据进行操作)
- 编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
- (摘)面向对象c++数据结构之基本数据结构-链表-使用链表管理器(连载中)
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 在SAP中进行黏贴时必须要把之前的数据删掉后才能黏贴,不能直接使用黏贴来覆盖之前的数据,这个怎麼解?
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的,求这个数字。(使用位运算)
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的,找出这个数字(使用位运算)
- 6.用插入排序对任意一组随机数据进行随机数组进行排序(用循环和递归两种方法)
- (使用STL自带的排序功能进行排序)UVA 10905 Children's Game(求一组数据所能拼出的最大数字串)
- 使用 ADO.NET 和 Oracle 进行高级数据访问
- 数据绑定技术—如何使用DataBinder.Eval()方法进行数据绑定