Python手写模拟单向链表对象,栈对象和树
单向链表:
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手写模拟单向链表对象,栈对象和树的更多相关文章
- 【Spring系列】- 手写模拟Spring框架
简单模拟Spring 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 前言 上次已经学习了 ...
- python手写bp神经网络实现人脸性别识别1.0
写在前面:本实验用到的图片均来自google图片,侵删! 实验介绍 用python手写一个简单bp神经网络,实现人脸的性别识别.由于本人的机器配置比较差,所以无法使用网上很红的人脸大数据数据集(如lf ...
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
- PHP算法学习(6) 单向链表 实现栈
svn地址:svn://gitee.com/zxadmin/live_z 这个是模拟栈的先进后出的一个链表操作,自动维护链表,当然你也使用SPL的栈 测试版本php 5.4 ,5.6,7.0,7.2 ...
- Python 手写数字识别-knn算法应用
在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点 ...
- python手写神经网络实现识别手写数字
写在开头:这个实验和matlab手写神经网络实现识别手写数字一样. 实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手 ...
- 由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 ...
- 用C、python手写redis客户端,兼容redis集群 (-MOVED和-ASK),快速搭建redis集群
想没想过,自己写一个redis客户端,是不是很难呢? 其实,并不是特别难. 首先,要知道redis服务端用的通信协议,建议直接去官网看,博客啥的其实也是从官网摘抄的,或者从其他博客抄的(忽略). 协议 ...
- 数组模拟单向链表例题(UVa11988)
指针的链表实现方式是,当前节点的next指向下一个节点,用数组模拟就是 for(int i=next[0];i!=0;i=next[i]) i=next[i]:就是一条链. 例题: 你有一个破损的键盘 ...
随机推荐
- Java程序员的日常—— Spring Boot单元测试
关于Spring boot 之前没有用Spring的时候是用的MockMvc,做接口层的测试,原理上就是加载applicationContext.xml文件,然后模拟启动各种mybatis\连接池等等 ...
- 《Algorithms算法》笔记:优先队列(1)——API和初等实现
1.优先队列的API和初等实现 做一个总结: 栈 :先进后出 队列 :先进先出 随机队列 : 随机出 优先队列:每次出来的是最大值或最小值 1.1优先队列的API 优先队列在很多场合都有用, 比如:在 ...
- Android_Universal-Image-Load使用
一,快速使用(确保ImageLoader只初始化一次,这样图片缓存会更加优秀.) 场景:为ImageView设置一张指定Uri的图片. 1,导包,配置联网,读写SD卡权限. 2,初始化: ImageL ...
- http编程(一)使用javaAPI实现
Java Http编程中常见的实现方式是使用Java 提供的API,另外就是使用Apache提供的 API 1.通过Java提供的API实现Http编程 类:URL:类 URL 代表一个统一资源定位符 ...
- Mysql 断电数据损毁恢复
error log: Database page corruption on disk or a failed 处理: /etc/my.cnf 设置 innodb_force_recovery = 6 ...
- 代码查看php是否已开启rewrite功能模块
通过php代码来查询,是否把rewrite模块打开了 <?php $result = apache_get_modules(); if(in_array('mod_rewrite', $resu ...
- Nodejs学习笔记(一)—简介及安装Node.js开发环境
一.简介 Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的Javascript引擎是来自Google Chrome的V8:运行在浏览器外不用考虑 ...
- php里的二进制安全
二进制安全功能(binary-safe function)是指在一个二进制文件上所执行的不更改文件内容的功能或者操作.这能够保证文件不会因为某些操作而遭到损坏.二进制数据是按照一串0和 1的形式编码的 ...
- PTA (Advanced Level) 1024 Palindromic Number
Palindromic Number A number that will be the same when it is written forwards or backwards is known ...
- 使用vue2+Axios+Router 之后的总结以及遇到的一些坑
构建 vue有自己的脚手架构建工具vue-cli,使用起来非常方便,使用webpack来集成各种开发便捷工具,比如: 代码热更新,修改代码之后网页无刷新改变,对前端开发来说非常的方便 PostCss, ...