单向链表:

  1. class error(Exception):
  2. def __init__(self,msg):
  3. super(error,self).__init__()
  4. self.msg=msg
  5. def __str__(self):
  6. return self.msg
  7. class Node:
  8. def __init__(self,ele):
  9. self.ele=ele
  10. self.next=None
  11. class mylist:
  12. def __init__(self,ele=None):
  13. self.index=0
  14. self.pos=0
  15. if ele:
  16. self._head=Node(ele)
  17. else:
  18. self._head = None
  19. def __iter__(self):
  20. return self
  21. def __next__(self):
  22. if self.pos < self.length():
  23. self.pos += 1
  24. cursor = self._head
  25. current=cursor
  26. num = 0
  27. while cursor != None:
  28. current = cursor
  29. cursor = cursor.next
  30. num += 1
  31. if num == self.pos:
  32. return current.ele
  33. else:
  34. raise StopIteration
  35. def empty(self):
  36. return self._head==None
  37. def add(self,item):
  38. node=Node(item)
  39. node.next=self._head
  40. self._head=node
  41. def length(self):
  42. cur=self._head
  43. num=0
  44. if cur:
  45. num+=1
  46. while cur.next:
  47. cur=cur.next
  48. num+=1
  49. return num
  50. else:
  51. return num
  52. def append(self,item):
  53. node=Node(item)
  54. cursor=self._head
  55. if self.empty():
  56. self._head = node
  57. else:
  58. while cursor.next!= None:
  59. cursor = cursor.next
  60. cursor.next=node
  61. def pop(self):
  62. if self.empty():
  63. return None
  64. else:
  65. if self.length()==1:
  66. ele=self._head.ele
  67. self._head.ele=None
  68. return ele
  69. else:
  70. cur=self._head
  71. current=cur
  72. while cur.next!=None:
  73. current=cur
  74. cur=cur.next
  75. ele=cur.ele
  76. current.next=None
  77. return ele
  78. def insert(self,index,item):
  79. if index<0 or index>self.length():
  80. raise error("out of range")
  81. else:
  82. if index==0:
  83. self.add(item)
  84. elif index==self.length():
  85. self.append(item)
  86. else:
  87. node = Node(item)
  88. cur=self._head
  89. pre=0
  90. while pre<index-1:
  91. cur=cur.next
  92. pre+=1
  93. node.next=cur.next
  94. cur.next=node
  95. def get(self,index):
  96. if index<0 or index>self.length()-1:
  97. raise error("out of range")
  98. else:
  99. num=0
  100. cur=self._head
  101. while num<index:
  102. cur=cur.next
  103. num+=1
  104. return cur.ele
  105. def remove(self,item):
  106. cur=self._head
  107. pre=None
  108. while cur!=None:
  109. if cur.ele==item:
  110. if pre==None:
  111. self._head=cur.next
  112. else:
  113. pre.next=cur.next
  114. break
  115. else:
  116. pre=cur
  117. cur=cur.next
  118. def delete(self,index):
  119. if index<0 or index>self.length()-1:
  120. raise error("out of range")
  121. else:
  122. if index==0:
  123. self._head=self._head.next
  124. else:
  125. num=1
  126. current=self._head
  127. cur=current.next
  128. while num!=index:
  129. current=cur
  130. cur=current.next
  131. num+=1
  132. current.next=cur.next
  133. cur.ele=None
  134. cur.next=None

栈:

  1. class stack:
  2. def __init__(self):
  3. self._box=[]
  4. def empty(self):
  5. return self._box==[]
  6. def length(self):
  7. return len(self._box)
  8. def push(self,item):
  9. self._box.append(item)
  10. def pop(self):
  11. return self._box.pop()

树:

  1. class Node:
  2. def __init__(self,ele=None,left=None,right=None):
  3. self.ele = ele
  4. self.left = None
  5. self.right = None
  6. class Tree:
  7. def __init__(self,node=None):
  8. self.root = node
  9. def append(self,item):
  10. node = Node(item)
  11. if self.root is None:
  12. self.root = node
  13. else:
  14. queue = [self.root]
  15. while queue:
  16. current=queue.pop(0)
  17. if current.left is None:
  18. current.left = node
  19. return
  20. elif current.right is None:
  21. current.right = node
  22. return
  23. else:
  24. queue.append(current.left)
  25. queue.append(current.right)
  26. def loop(self):
  27. if self.root is None:
  28. return
  29. queue=[self.root]#广度优先
  30. while queue:
  31. current=queue.pop(0)
  32. print(current.ele)
  33. if current.left!=None:
  34. queue.append(current.left)
  35. elif current.right!=None:
  36. queue.append(current.right)
  37.  
  38. def deep_loop_top(self,node):
  39. if node==None:
  40. return
  41. print(node.ele)
  42. self.deep_loop_top(node.left)
  43. self.deep_loop_top(node.right)
  44.  
  45. def deep_loop_left(self,node):
  46. if node==None:
  47. return
  48. self.deep_loop_left(node.left)
  49. print(node.ele)
  50. self.deep_loop_left(node.right)
  51.  
  52. def deep_loop_last(self,node):
  53. if node==None:
  54. return
  55. self.deep_loop_last(node.left)
  56. self.deep_loop_last(node.right)
  57. 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. Cookie、Session和Cache

    一.Cookie Cookie是保存客户端的一组数据,主要用来保存用户的个人信息,主要存放浏览器请求服务器时的请求信息,这些信息是非敏感信息.主要用于当用户访问您的系统时,应用程序可以检索以前存储的信 ...

  2. WebDriverAPI(8)

    判断页面元素是否存在 测试网址 http://www.baidu.com Java语言版本API实例 @Test public void testIsElementPresent(){ driver. ...

  3. POJ 1129

    #include<iostream> #include<stdio.h> #include<string> #define MAXN 60 using namesp ...

  4. webstorm 添加css前缀(兼容)自动添加

    Webstorm自动添加css前缀( 兼容) 百度了很多在webstorm中添加css前缀(兼容)自动添加,autoprefixer插件是首选,对于基本的css,还有less都支持,所以就选择了aut ...

  5. 2d旋转(css3实现过度效果和动画效果)

    效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  6. IO概述、异常、File文件类_DAY19

    IO概述: 操作数据的工具 IO流,即数据流,数据像水流一样通过IO工具进行传输. 程序  <IO>   硬盘 绝对路径与相对路径 1:异常(理解) (1)就是程序的非正常情况. 异常相关 ...

  7. Office Visio 201*安装详细步骤并激活

    不多说直接上干货! 初步了解:  Visio的百度百科:http://baike.baidu.com/link?url=tNv_gqhhVKcurpP8kvh4ylkknc5JQLIm6bGmQVxi ...

  8. SearchView去掉下划线

    SearchView calSearchView = (SearchView) findViewById(R.id.sv_search_text); if (calSearchView != null ...

  9. UTF8最好不要带BOM

    摘自:http://www.cnblogs.com/findumars/p/3620078.html   几周前还在为BOM的问题苦恼着...正如@梁海所说,“不含 BOM 的 UTF-8 才是标准形 ...

  10. sass中@的作用

    总结一下sass中用到@的地方. 1.继承@extend SASS允许一个选择器,继承另一个选择器.比如,现有class1: .class1 { border: 1px solid #ddd; } c ...