单向链表:

class error(Exception):
def __init__(self,msg):
super(error,self).__init__()
self.msg=msg
def __str__(self):
return self.msg
class Node:
def __init__(self,ele):
self.ele=ele
self.next=None
class mylist:
def __init__(self,ele=None):
self.index=0
self.pos=0
if ele:
self._head=Node(ele)
else:
self._head = None
def __iter__(self):
return self
def __next__(self):
if self.pos < self.length():
self.pos += 1
cursor = self._head
current=cursor
num = 0
while cursor != None:
current = cursor
cursor = cursor.next
num += 1
if num == self.pos:
return current.ele
else:
raise StopIteration
def empty(self):
return self._head==None
def add(self,item):
node=Node(item)
node.next=self._head
self._head=node
def length(self):
cur=self._head
num=0
if cur:
num+=1
while cur.next:
cur=cur.next
num+=1
return num
else:
return num
def append(self,item):
node=Node(item)
cursor=self._head
if self.empty():
self._head = node
else:
while cursor.next!= None:
cursor = cursor.next
cursor.next=node
def pop(self):
if self.empty():
return None
else:
if self.length()==1:
ele=self._head.ele
self._head.ele=None
return ele
else:
cur=self._head
current=cur
while cur.next!=None:
current=cur
cur=cur.next
ele=cur.ele
current.next=None
return ele
def insert(self,index,item):
if index<0 or index>self.length():
raise error("out of range")
else:
if index==0:
self.add(item)
elif index==self.length():
self.append(item)
else:
node = Node(item)
cur=self._head
pre=0
while pre<index-1:
cur=cur.next
pre+=1
node.next=cur.next
cur.next=node
def get(self,index):
if index<0 or index>self.length()-1:
raise error("out of range")
else:
num=0
cur=self._head
while num<index:
cur=cur.next
num+=1
return cur.ele
def remove(self,item):
cur=self._head
pre=None
while cur!=None:
if cur.ele==item:
if pre==None:
self._head=cur.next
else:
pre.next=cur.next
break
else:
pre=cur
cur=cur.next
def delete(self,index):
if index<0 or index>self.length()-1:
raise error("out of range")
else:
if index==0:
self._head=self._head.next
else:
num=1
current=self._head
cur=current.next
while num!=index:
current=cur
cur=current.next
num+=1
current.next=cur.next
cur.ele=None
cur.next=None

栈:

class stack:
def __init__(self):
self._box=[]
def empty(self):
return self._box==[]
def length(self):
return len(self._box)
def push(self,item):
self._box.append(item)
def pop(self):
return self._box.pop()

树:

class Node:
def __init__(self,ele=None,left=None,right=None):
self.ele = ele
self.left = None
self.right = None
class Tree:
def __init__(self,node=None):
self.root = node
def append(self,item):
node = Node(item)
if self.root is None:
self.root = node
else:
queue = [self.root]
while queue:
current=queue.pop(0)
if current.left is None:
current.left = node
return
elif current.right is None:
current.right = node
return
else:
queue.append(current.left)
queue.append(current.right)
def loop(self):
if self.root is None:
return
queue=[self.root]#广度优先
while queue:
current=queue.pop(0)
print(current.ele)
if current.left!=None:
queue.append(current.left)
elif current.right!=None:
queue.append(current.right) def deep_loop_top(self,node):
if node==None:
return
print(node.ele)
self.deep_loop_top(node.left)
self.deep_loop_top(node.right) def deep_loop_left(self,node):
if node==None:
return
self.deep_loop_left(node.left)
print(node.ele)
self.deep_loop_left(node.right) def deep_loop_last(self,node):
if node==None:
return
self.deep_loop_last(node.left)
self.deep_loop_last(node.right)
print(node.ele)

Python手写模拟单向链表对象,栈对象和树的更多相关文章

  1. 【Spring系列】- 手写模拟Spring框架

    简单模拟Spring 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 前言 上次已经学习了 ...

  2. python手写bp神经网络实现人脸性别识别1.0

    写在前面:本实验用到的图片均来自google图片,侵删! 实验介绍 用python手写一个简单bp神经网络,实现人脸的性别识别.由于本人的机器配置比较差,所以无法使用网上很红的人脸大数据数据集(如lf ...

  3. 教你如何使用Java手写一个基于链表的队列

    在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...

  4. PHP算法学习(6) 单向链表 实现栈

    svn地址:svn://gitee.com/zxadmin/live_z 这个是模拟栈的先进后出的一个链表操作,自动维护链表,当然你也使用SPL的栈 测试版本php 5.4 ,5.6,7.0,7.2 ...

  5. Python 手写数字识别-knn算法应用

    在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点 ...

  6. python手写神经网络实现识别手写数字

    写在开头:这个实验和matlab手写神经网络实现识别手写数字一样. 实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手 ...

  7. 由PHP实现单向链表引发的对象赋值,对象传参,链表操作引发的一系列问题

    2019年2月25日14:21:13 测试版本php 5.4 ,5.6,7.0,7.2 代码请看: https://www.cnblogs.com/zx-admin/p/10373866.html 1 ...

  8. 用C、python手写redis客户端,兼容redis集群 (-MOVED和-ASK),快速搭建redis集群

    想没想过,自己写一个redis客户端,是不是很难呢? 其实,并不是特别难. 首先,要知道redis服务端用的通信协议,建议直接去官网看,博客啥的其实也是从官网摘抄的,或者从其他博客抄的(忽略). 协议 ...

  9. 数组模拟单向链表例题(UVa11988)

    指针的链表实现方式是,当前节点的next指向下一个节点,用数组模拟就是 for(int i=next[0];i!=0;i=next[i]) i=next[i]:就是一条链. 例题: 你有一个破损的键盘 ...

随机推荐

  1. easyui 中iframe嵌套页面,提示弹窗遮罩的解决方法,parent.$.messager.alert和parent.$.messager.confirm

    项目中用到easyui 布局,用到north,west,center三个区域,且在center中间区域嵌入iframe标签.在主内容区做一些小提示弹窗(例如删除前的弹窗提示确认)时,会遇到遮罩问题,由 ...

  2. HashMap、HashSet、LinkedHashSet、TreeSet的关系

    类图及说明如下:

  3. 剑指offer五十二之正则表达式匹配

    一.题目 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式 ...

  4. hive与hbase的整合

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点学习成本低,可以通过类S ...

  5. 【kafka】kafka.admin.AdminOperationException: replication factor: 1 larger than available brokers: 0

    https://blog.csdn.net/bigtree_3721/article/details/78442912 I am trying to create topics in Kafka by ...

  6. Java之集合(十八)DelayQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7493735.html 1.前言 本章介绍阻塞队列DelayQueue,这是一个无界阻塞队列.其存储延时的元素,只 ...

  7. Java之集合(六)PriorityQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7299233.html 1.前言 本章介绍队列中的PriorityQueue--优先队列,顾名思义,这是一个可以指 ...

  8. 如何在Mac OS中安装 wget

    首先从Apple Store下载Xcode,然后安装Xcode,接着安装Homebrew包管理,类似于Ubuntu下的apt-get: 终端下输入ruby -e "$(curl -fsSL ...

  9. EF基础知识小记七(拆分实体到多个表以及拆分表到多个实体)

    一.拆分实体到多个表 1.在日常开发中,会经常碰到一些老系统,当客户提出一些新的需求,这些需求需要在原来的表的基础上加一些字段,大多数人会选择通过给原表添加字段的方式来完成这些需求,方法,虽然可行,但 ...

  10. ActiveRecord::Fixture::FixtureError: table "users" has no column named "activated_at".

    window 7+ruby2.33+rails5.0. 在测试的时候 rails test 报固件fixture错误: 没有某列字段存在 虽然可以直接通过开发框架去修改字段,但是开发过程中应该通过迁移 ...