单向链表:

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. SVN版本服务器的搭建和远程控制

    版本服务器是用SVN server(这个东西是放到版本机服务器上的)  版本管理工具是用小乌龟(tortoiseSVN,这个是在各个机器上使用) 1,昨天下载了SVN server 按照网上教程搭建好 ...

  2. Tcp下载文件

    一.下载文件 tcp 客户端 1.创建套接字down_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)2.获取ip,portdown ...

  3. jQuery.extend 函数

    jQuery.extend 函数详解 JQuery的extend扩展方法: Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解. 一.J ...

  4. Android Ble4.0开发

    最近在做一个蓝牙的项目,是Blu4.0,Android系统支持是4.3版本以上(为此特地卖了个手机,). 当然也参考了不少大牛的的微博,说的都不错,再次特地感谢 http://blog.csdn.ne ...

  5. express+nodemon 修改后浏览器自动刷新

    添加nodemon模块 cnpm install --save nodemon 根目录添加文件 nodemon.json { "restartable": "rs&quo ...

  6. HTML编码规范 - 1

    用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法. 嵌套元素应当缩进一次(即两个空格). 对于属性的定义,确保全部使用双引号,绝不要使用单引号. 不要在自闭和(se ...

  7. Liunx安装Git

    环境:CentOS 6.5 min 安装git yum -y install gcc curl curl-devel zlib-devel openssl-devel perl cpio expat- ...

  8. Pl/SQl 安装和配置Oracle 数据库连接

    在进行企业开发时,数据库(oracle)一般在我们本地安装的:另外,oracle数据库比较大,在本地安装,会拖慢电脑的速度.我们可以通过oracle客户端,远程连接数据库.下面介绍自己的安装方式 1. ...

  9. 在Pycharm中使用AutoPEP8来检验代码的规范性

    在学习python的过程中,我们经常会遇到代码不规范而导致的程序报错,代码的规范和严谨就显得尤为重要了,所以编写代码的过程中,我们需要遵循PE8规范,在Pycharm 中我们可以安装插件 AutoPE ...

  10. idea 错误: -source 1.6 中不支持 diamond 运算符的解决办法

    在取一段github代码时,发现说是支持jdk 7 ,但是使用MAVEN编译不过去. 报错信息为错误: -source 1.6 中不支持 diamond 运算符 我使用的环境是1.7  + intel ...