def __init__(self): self.prev = self self.next = self

我们知道数据结构下面有很多的算法需要用指针来实现,这其中就包括链表、二叉树、图、最小生成树等等。今天,为了给大家说明如何利用python来编写这一类的应用,我们来实现一个最简单的链表函数。这算是抛砖引玉吧,欢迎大家多提宝贵意见,

#!/usr/bin/python
import os
import sys
import re
class link(object):
	def __init__(self):
		self.prev = self
		self.next = self
	def add_node(self, node):
		node.next = self
		node.prev = self.prev
		self.prev.next = node
		self.prev = node
	def del_node(self, node):
		node.prev.next = node.next
		node.next.prev = node.prev
	def is_node_empty(self):
		if self == self.next:
			return 1
		else:
			return 0
	def get_node_number(self):
		node = self.next
		cnt = 0
		while node != self:
			cnt += 1
			node = node.next
		return cnt
def main():
	head = link()
	node = link()
	print head.get_node_number()
	print head.is_node_empty()
	head.add_node(node)
	print head.get_node_number()
	print head.is_node_empty()
	head.del_node(node)
	print head.get_node_number()
	print head.is_node_empty()
if __name__ == '__main__':
	main()

事实上,算法和编程语言没有必然的联系。我建议大家在实际项目中,如果不是嵌入式开发或者是开发性能有关的业务代码,可以尽量用python来进行软件开发。不管是写算法(排序、查找等),还是做gui客户端(基于wx)、web开发(flask等),或者是一般的工具(输入命令、输出结果这种),建议大家多用python语言。开发环境安装简单,效果也快,不像windows平台动不动就要安装几个G的visual stdio软件,真是太麻烦了。


文章目录🌟前言🌟初始问题及解答✨问题✨列表删除操作🌟解题✨遍历删除操作✨快慢 指针 操作 我们之前总结了双 指针 解决问题的相关内容,今天我们继续做一下回顾 指针 问题,同时也带大家回顾一下 python 中相关与列表删除的基本内容。闲话少叙,我们直接进入正题。 我们还是通过题目来引出具体知识。 🌟初始问. 在 python 中定义一个列表时,我们一定要注意其中的可变对象的原理。虽然 python 的语法中没有 指针 ,但是实际上定义一个列表变量时,是把变量名指到了一个可变对象上。如果此时我们定义另外一个变量也指到同一个可变对象的话,就会造成一个“联动”的现象。也就是改变其中的一个值时,另一个值也会随之而改变。本文使用的 Python 版本为 Python 3.7.13 这里我们先定义一个列表a,...
Python 中,虽然没有显式的 指针 概念(如 C/C++ 中的 ),但所有变量本质上都是对对象的引用(类似于 指针 的抽象)。理解这一点对掌握 Python 的内存管理、参数传递和可变/不可变对象的行为至关重要。当你在 Python 中赋值一个变量时,变量名实际上是一个指向对象的引用(内存地址的抽象)。例如: 和 都指向同一个整数对象 的内存地址。使用 和 可以验证它们指向同一地址。 2. 可变对象与不可变对象 不可变对象(如 )无法在原地修改。重新赋值会创建新对象: 不可变对象 - 常