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]:就是一条链. 例题: 你有一个破损的键盘 ...
随机推荐
- Cookie、Session和Cache
一.Cookie Cookie是保存客户端的一组数据,主要用来保存用户的个人信息,主要存放浏览器请求服务器时的请求信息,这些信息是非敏感信息.主要用于当用户访问您的系统时,应用程序可以检索以前存储的信 ...
- WebDriverAPI(8)
判断页面元素是否存在 测试网址 http://www.baidu.com Java语言版本API实例 @Test public void testIsElementPresent(){ driver. ...
- POJ 1129
#include<iostream> #include<stdio.h> #include<string> #define MAXN 60 using namesp ...
- webstorm 添加css前缀(兼容)自动添加
Webstorm自动添加css前缀( 兼容) 百度了很多在webstorm中添加css前缀(兼容)自动添加,autoprefixer插件是首选,对于基本的css,还有less都支持,所以就选择了aut ...
- 2d旋转(css3实现过度效果和动画效果)
效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- IO概述、异常、File文件类_DAY19
IO概述: 操作数据的工具 IO流,即数据流,数据像水流一样通过IO工具进行传输. 程序 <IO> 硬盘 绝对路径与相对路径 1:异常(理解) (1)就是程序的非正常情况. 异常相关 ...
- Office Visio 201*安装详细步骤并激活
不多说直接上干货! 初步了解: Visio的百度百科:http://baike.baidu.com/link?url=tNv_gqhhVKcurpP8kvh4ylkknc5JQLIm6bGmQVxi ...
- SearchView去掉下划线
SearchView calSearchView = (SearchView) findViewById(R.id.sv_search_text); if (calSearchView != null ...
- UTF8最好不要带BOM
摘自:http://www.cnblogs.com/findumars/p/3620078.html 几周前还在为BOM的问题苦恼着...正如@梁海所说,“不含 BOM 的 UTF-8 才是标准形 ...
- sass中@的作用
总结一下sass中用到@的地方. 1.继承@extend SASS允许一个选择器,继承另一个选择器.比如,现有class1: .class1 { border: 1px solid #ddd; } c ...