当前位置:   article > 正文

线性表的链式存储(python实现)_假定线性表为(1,2,3,4,5,6),设计该线性表的双向链存储结构(给出设计的数据结构),

假定线性表为(1,2,3,4,5,6),设计该线性表的双向链存储结构(给出设计的数据结构),

1.定义

线性表L=(a0,a1,……,an-1)中各元素分布在存储器的不同存储块,称为结点,每个结点(尾节点除外)中都持有一个指向下一个节点的引用,这样所得到的存储结构为链表结构。

2.特点

 >逻辑上相邻的元素 ai, ai+1,其存储位置也不一定相邻;
 >存储稀疏,不必开辟整块存储空间。
>对表的插入和删除等运算的效率较高。
>逻辑结构复杂,不利于遍历。

3.代码实现

 (链表的增删改查)

  1. """
  2. 功能∶实现单链表的构建和功能操作重点代码
  3. """
  4. #创建节点类
  5. class Node:
  6. """
  7. 思路∶将自定义的类视为节点的生成类,实例对象中
  8. 包含数据部分和指向下一个节点的n e x t
  9. """
  10. def __init__ (self,val, next=None):
  11. self.val = val #有用数据
  12. self.next = next #循环下一个节点关系
  13. class LinkListManager:
  14. def __init__(self):
  15. """
  16. 初始化链表﹐标记一个链表的开端﹐以便于获取后续的节点
  17. """
  18. self.head = Node(None)
  19. def init_list(self,list_):
  20. pointer = self.head #相当于指针,初始指向头部
  21. for item in list_:
  22. pointer.next =Node(item) #将头部的next指向node
  23. pointer = pointer.next #指针移动到下一个值
  24. def show_list(self):
  25. """
  26. 遍历链表
  27. :return:
  28. """
  29. pointer_value = self.head.next #将指针从头部移动到第一个值
  30. while pointer_value is not None:
  31. print(pointer_value.val)
  32. pointer_value = pointer_value.next #将指针向下移动
  33. def is_empty(self):
  34. """
  35. 判断链表是否为空
  36. :return: bool
  37. """
  38. if self.head.next is None:
  39. return True
  40. return False
  41. def clear(self):
  42. """
  43. 清空链表
  44. :return:
  45. """
  46. self.head.next = None
  47. def append_end_value(self,value):
  48. """
  49. 尾部插入
  50. :return:
  51. """
  52. pointer = self.head
  53. while pointer.next is not None: #将指针移动到最后的节点上
  54. pointer= pointer.next
  55. pointer.next = Node(value) #在最后的节点上插值
  56. def append_start_value(self,value):
  57. """
  58. 头部插入
  59. :return:
  60. """
  61. node = Node(value) #定义一个节点
  62. node.next = self.head.next #将新节点next链接到第一个节点(不算头部)
  63. self.head.next = node #将头部节点的next的链接到node
  64. def count_index(self):
  65. """
  66. 查看节点数
  67. :return: 节点数
  68. """
  69. count = 0
  70. pointer = self.head
  71. while pointer.next is not None:
  72. count +=1
  73. pointer = pointer.next
  74. return count
  75. def insert_value(self,index,value):
  76. """
  77. 某个位置插入(按照索引规则从0开始)
  78. :return:
  79. """
  80. if self.count_index() < index:
  81. self.append_end_value(value)
  82. elif index < 0:
  83. self.append_start_value(value)
  84. else:
  85. pointer = self.head
  86. for i in range(index) :
  87. pointer = pointer.next #将指针移动到index的前一个节点
  88. node = Node(value) # 定义一个节点
  89. node.next = pointer.next #
  90. pointer.next = node #
  91. def remove_value(self,value):
  92. """
  93. 按照值删除节点
  94. :param value:
  95. :return:
  96. """
  97. pointer = self.head
  98. while pointer.next and pointer.next.val != value: #将指针移动到value的前一个节点,若到末尾则停止
  99. pointer = pointer.next
  100. if pointer.next is None: #若到链表末尾,则value不在表中
  101. raise ValueError("value not in linklist ")
  102. else:
  103. pointer.next = pointer.next.next
  104. def get_index(self,index):
  105. """
  106. 根据索引获取值
  107. :param index: 索引
  108. :return: 索引对应值
  109. """
  110. return self.__get_element(index).val
  111. def __get_element(self,index):
  112. """
  113. 根据索引获取对应的节点
  114. :param index: 索引
  115. :return: 该节点
  116. """
  117. pointer = self.head.next
  118. if index < 0:
  119. raise ValueError("index out of range")
  120. for i in range(index):
  121. if pointer.next is None:
  122. raise ValueError("index out of range")
  123. pointer = pointer.next
  124. return pointer
  125. def update(self,index,new_value):
  126. """
  127. 根据索引修改值
  128. :param index: 索引
  129. :param new_value:新值
  130. :return:
  131. """
  132. self.__get_element(index).val = new_value
  133. if __name__ == '__main__': #测试代码
  134. manager = LinkListManager()
  135. manager.init_list([1,2,3,4,5])
  136. manager.append_end_value(6)
  137. manager.append_start_value(0)
  138. print(manager.count_index())
  139. manager.insert_value(5,88)
  140. manager.remove_value(88)
  141. print(manager.get_index(4))
  142. manager.update(4,8)
  143. manager.show_list()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/549711
推荐阅读
相关标签
  

闽ICP备14008679号