python写的2个小程序
今天早上来公司比较早,就用python写了写数据结构的代码,工作之后虽然参与了一部分开发的工作,但都是在写业务逻辑,时间长了,发现自己成了if-else选手了,索性后面每天都写写,保持保持手感,最近在<极客时间>买了一个<Python核心技术与实战>,感觉也讲得不错,推荐大家看看。
分享一段单链表翻转的python代码和冒泡排序的python代码,大家随意看看。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 单链表的翻转功能。
# Node是一个类
class Node:
def __init__(self,data=None,next=None):
self.data = data
self.next = next
# 翻转链表函数,传入头节点
def reverse(serf, head):
if head is None or head.next is None: # 防止链表为空或只有1个节点
return head
pre_node = None #一个虚节点
current_node = head
while current_node is not None:
next_node = current_node.next
current_node.next = pre_node
pre_node = current_node
current_node = next_node
return pre_node
if __name__ == '__main__':
link = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7, Node(8, Node(9))))))))) # 定义的时候,采用这递归的方法.
root = reverse(link)
while root:
print(root.data)
root =root.next
冒泡排序的python代码:
#!/usr/bin/env python
# -*- coding:utf8 -*-
arr = [1, 34, 3, 48, 27, 46, 79, 35]
'''
实现思路:
冒泡排序的思想就是一次循环将两两数之间相互比较,将较大的数放到后面,一次比较完之后
程序比较的次数就减少一次,依次比较 每比较一次 比较的次数就减少一次。
因此 用两个for循环 外层用来判断循环的次数,内层for循环用来比较程序的比较的次数
'''
def bubble_sort(arr):
length = len(arr)
for i in range(length): # 这个循环负责设置冒泡排序进行的次数(比如说n个数,则只要进行n-1次冒泡,就可以把这n个数排序好)
for j in range(0, length-1-i): #这里这个j就是控制每一次具体的冒泡过程,假如有三个数,那只需要两次就可以了,当下一次时,最后一个数字已经是有序的了,所以说少冒泡一次,所以这里j每次都会减去i的值
if arr[j] > arr[j+1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j] # 这里是python特有的写法,如果在C++等语言中,需要借助中间变量将两个值进行交换
# 函数调用
bubble_sort(arr)
print('{}'.format(arr))