1. # -*- coding:utf-8 -*-
  2. class Node:
  3. def __init__(self, initdata):
  4. self.data = initdata
  5. self.next = None
  6.  
  7. def getData(self):
  8. return self.data
  9.  
  10. def getNext(self):
  11. return self.next
  12.  
  13. def setData(self, newdata):
  14. self.data = newdata
  15.  
  16. def setNext(self, newnext):
  17. self.next = newnext
  18.  
  19. class UnorderedList:
  20. def __init__(self):
  21. self.head = None
  22.  
  23. def isEmpty(self):
  24. return self.head == None
  25.  
  26. def add(self, item):
  27. temp = Node(item)
  28. temp.setNext(self.head)
  29. self.head = temp
  30.  
  31. def size(self):
  32. current = self.head
  33. count = 0
  34. while current != None:
  35. count = count + 1
  36. current = current.getNext()
  37. return count
  38.  
  39. def travel(self):
  40. current = self.head
  41. while current != None:
  42. print current.getData()
  43. current = current.getNext()
  44.  
  45. def search(self, item):
  46. current = self.head
  47. found = False
  48. while current != None and not found:
  49. if current.getData() == item:
  50. found = True
  51. else:
  52. current = current.getNext()
  53. return found
  54.  
  55. def remove(self, item):
  56. current = self.head
  57. previous = None
  58. found = False
  59. while not found:
  60. if current.getData() == item:
  61. found = True
  62. else:
  63. previous = current
  64. current = current.getNext()
  65. if previous == None:
  66. self.head = current.getNext()
  67. else:
  68. previous.setNext(current.getNext())
  69.  
  70. def append(self, item):
  71. temp = Node(item)
  72. if self.isEmpty():
  73. self.head = temp
  74. else:
  75. current = self.head
  76. while current.getNext() != None:
  77. current = current.getNext()
  78. current.setNext(temp)
  79.  
  80. def index(self, item):
  81. current = self.head
  82. count = 0
  83. found = False
  84. while current != None and not found:
  85. count += 1
  86. if current.getData() == item:
  87. found = True
  88. else:
  89. current = current.getNext()
  90. if found:
  91. return count
  92. else:
  93. raise ValueError, '%s is not in this unorderedList' %item
  94.  
  95. def insert(self, pos, item):
  96. if pos <= 1:
  97. self.add(item)
  98. elif pos > self.size():
  99. self.append(item)
  100. else:
  101. temp = Node(item)
  102. count = 1
  103. previous = None
  104. current = self.head
  105. while count < pos:
  106. count += 1
  107. previous = current
  108. current = current.getNext()
  109. previous.setNext(temp)
  110. temp.setNext(current)
  111.  
  112. if __name__ == '__main__':
  113. t = UnorderedList()
  114. for i in range(10):
  115. t.append(i)
  116. print t.size()
  117. t.travel()
  118. print t.search(5)
  119. print t.index(3)
  120. t.remove(8)
  121. t.travel()
  122. t.insert(2, 12)
  123. t.travel()

python 实现无序列表的更多相关文章

  1. python实现无序列表:链表

    介绍链表前我们先了解下什么是列表. 在对基本数据结构的讨论中,我们使用 Python 列表来实现所呈现的抽象数据类型.列表是一个强大但简单的收集机制,为程序员提供了各种各样的操作.然而,不是所有的编程 ...

  2. Python实践练习:在 Wiki 标记中添加无序列表

    题目描述 项目:在 Wiki 标记中添加无序列表 在编辑一篇维基百科的文章时,你可以创建一个无序列表,即让每个列表项占据一行,并在前面放置一个星号.但是假设你有一个非常大的列表,希望添加前面的星号.你 ...

  3. Python中将字典转换为有序列表、无序列表的方法

    说明:列表不可以转换为字典 1.转换后的列表为无序列表 a = {'a' : 1, 'b': 2, 'c' : 3} #字典中的key转换为列表 key_value = list(a.keys()) ...

  4. [转载]Python 元组、列表、字典、文件

    python的元组.列表.字典数据类型是很python(there python is a adjective)的数据结构.这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益 ...

  5. 在 Wiki 标记中添加无序列表

    项目:在 Wiki 标记中添加无序列表在编辑一篇维基百科的文章时,你可以创建一个无序列表,即让每个列表项占据一行,并在前面放置一个星号.但是假设你有一个非常大的列表,希望添加前面的星号.你可以在每一行 ...

  6. Python基础数据类型-列表(list)和元组(tuple)和集合(set)

    Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...

  7. Python基本数据类型--列表、元组、字典、集合

    一.Python基本数据类型--列表(List) 1.定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. 2.列表的创建: # 方式一 list1 = ['name','ag ...

  8. python 迭代 及列表生成式

    什么是迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过 for ...

  9. Python 学习笔记(1)Python容器:列表、元组、字典与集合

    Python容器:列表.元组.字典与集合 列表: 1.列表 的创建 使用[ ] 或者 list()创建列表:empty_list = [ ] 或者 empty_list= list() 使用list( ...

随机推荐

  1. 设计模式——工厂方法(Factory Method)

    定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. ——DP UML类图 模式说明 抽象业务基类 实际业务类的公共基类,也是工厂要创建的所有对象的父类,这部分 ...

  2. Tkinter的l组件常用属性

    Label常用属性 序号 属性 说明 1  anchor   指示文字会被放在控件的什么位置, 可选项有 N, NE, E, SE, S, SW, W, NW, CENTER. 默认为 CENTER. ...

  3. js获取文件MD5值

    原文链接:http://www.jianshu.com/p/940a9226fbbd   要在web页面中计算文件的md5值,还好这个项目是只需兼容现代浏览器的,不然要坑死了. 其实对文件进行md5, ...

  4. strcpy、strncpy、strlen、memcpy、memset、strcat、strncat、strcmp、strncmp,strchr

    1.strcpy #include<stdio.h> #include<assert.h> char *mystrcpy(char *dest, const char *src ...

  5. win10的一些设置

    win10进入安全模式: 左下角->设置->更新和安全->恢复->立即重启  (重启后进入的界面可以进行一些设置来进入安全模式) win10切换账户: 任务管理器->账户

  6. HDU 5908 Abelian Period 可以直接用multiset

    http://acm.hdu.edu.cn/showproblem.php?pid=5908 要求把数组分成k组使得每组中的元素出现次数相同 就是分成k个集合,那么直接用multiset判定就可以 有 ...

  7. Java多线程与并发——线程生命周期和线程池

    线程生命周期:  线程池:是预先创建线程的一种技术.线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中,然后对这些资源进行复用.减少频繁的创建和销毁对象. java里面线程池的顶级接口是E ...

  8. nginx去掉url中的index.php

    使用情境:我想输入www.abc.com/a/1后,实际上是跳转到www.abc.com/index.php/a/1 配置Nginx.conf在你的虚拟主机下添加: location / {      ...

  9. CentOS7.5搭建Hadoop分布式集群

    材料:3台虚拟主机,ip分别为: 192.168.1.201 192.168.1.202 192.168.1.203 1.配置主机名称 三个ip与主机名称分别对应关系如下: 192.168.1.201 ...

  10. 一个关于laravel部署的讲座

    https://pusher.com/sessions/meetup/laravel-nigeria/deploying-your-laravel-application