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]:就是一条链. 例题: 你有一个破损的键盘 ...
随机推荐
- jvm高级特性(5)(1)(原子性,可见性,有序性,volatile,概述)
JVM高级特性与实践(十二):高效并发时的内外存交互.三大特征(原子.可见.有序性) 与 volatile型变量特殊规则 简介: 阿姆达尔定律(Amdahl):该定律通过系统中并行化与串行化的比重来描 ...
- 《JAVA与模式》之代理模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述代理(Proxy)模式的: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 代理模式的结 ...
- Swift 里字符串(七)stringIndex
在 String 里,用来索引 Character 的,不是整数,而是StringIndex 内部结构 extension String { /// A position of a character ...
- P1631 序列合并
P1631 序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个. 对于100%的数据中,满足1<=N<=100000. ...
- 【xsy1214】 异或路径(xorpath) 点分治+可持久化trie
题目大意:给你一棵$n$个点的树,每个点有一个点权$x$,问你所有路径中点权异或和最大的路径的异或和 数据范围:$n≤30000$,$x≤2^{31}-1$. 如果是边上有点权的话非常简单,直接一个$ ...
- POJ 1051
#include <iostream> #include <algorithm> #include <string> #define MAXN 27 using n ...
- Vim实用技巧系列 - 代码注释
在写代码时候,有时候需要临时注释掉一部分代码,之后还要取消这些注释.真麻烦.那么,用Vim怎么做这件事呢? 第一种方法,块模式. 再次声明,本系列全部以windows下 ...
- 解决input和button错位(不齐)问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 编译vs下可调试的ffmpeg和x264
以前随手记的笔记,翻出来,整理下哈 ffmpeg 在windows上的编译还是比较麻烦的,而且如果mingw-gcc编译的话,是无法在vs下调试的 所以以前刚开始玩ffmpeg的时候,费了一些功夫,用 ...
- 关于注解Annotation第一篇
注解的定义格式如下: public @interface 注解名 {定义体} 定义体就是方法的集合,每个方法实则是声明了一个配置参数.方法的名称作为配置参数的名称,方法的返回值类型就是配置参数的类型. ...