• 数据结构与算法-(10)---列表(List)


     

     🌈write in front🌈
    🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
    🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
    📝个人主页:Aileen_0v0🧸—CSDN博客
    🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
    📣系列专栏:Aileen_0v0🧸的PYTHON学习系列专栏——CSDN博客
    🗼我的格言:"没有罗马,那就自己创造罗马~" 

    目录

    列表(List) 

    采用链表实现无序表

    无序表(元素之间没有顺序,但是有位置顺序)

    列表 

    链表  

    链表的实现 

     Unordered List - 无序表

    Add方法

    size方法 

     remove(item)方法


     

    列表(List) 

    列表是Python中的一种数据类型,用于存储一组有序的数据。列表中可以存储任意类型的数据,包括数字、字符串、布尔值等。列表以中括号 [ ] 表示,其中的每个元素之间用逗号分隔,例如:

    my_list = [1, 2, 3, 4, 5]
    

    上述代码创建了一个名为 my_list 的列表,其中包含了整数 1、2、3、4 和 5。可以使用索引访问列表中的元素,例如 my_list[0] 访问列表中的第一个元素。列表支持许多常用的操作,如添加元素、删除元素、排序等。

    但并不是所有的编程语言都提供了List数据类型有时候需要程序员自己实现。

    列表:是一种数据项按照相对位置存放的数据集

    特别的,被称为“无序表unordered list”其中数据项只按照存放位置来索引,如第1个、第2个....."、最后一个等。(为了简单起见,假设表中不存在重复数据项)

    如一个考试分数的集合“54,26,93,1777和31”

    如果用无序表来表示,就是[54,26,9317, 77, 31]

    采用链表实现无序表

    采用链表实现无序表的主要原因是,链表有动态性和灵活性。当我们需求插入或删除元素时,链表可以快速地进行操作,而不需要进行大量的数据移动。此外,链表还可以通过动态分配内存空间来适应数据的变化,这使得无序表可以处理不同大小的数据集

    另外,链表实现无序表还有以下优点:

    1. 内存使用效率高:链表只需要分配和使用存储空间,而不需要事先设置固定的存储大小,这可以节省内存空间。

    2. 适用于大型数据集:链表可以处理大量的数据,因为它们不需要在内存中保持连续的存储空间,而是可以分散在内存中的不同区域。

    3. 可以有效地处理插入和删除操作:链表的插入和删除操作很快,因为它们只需要修改指针,而不需要移动元素。

    链表是一种非常适合实现无序表的数据结构,因为它具有动态性,灵活性,高效性和内存使用效率高等优点。

    无序表(元素之间没有顺序,但是有位置顺序)

    列表 

    Python 中往列表添加数据,不能灵活添加,因为列表不具有连续的空间

    所以元素4不能添加到列表里.


    链表  

    由于链表( Linked List )含 pointer(指针) 所以链表可以利用碎片化空间将数据传入到空格处,

    即使被其它元素占领了内存空间 

    1. # 通过链表实现 无序表-列表
    2. #列表 和 链表 都是无序表 unordered list
    3. #实现链表
    4. class Node:
    5. def __init__(self,init_data):
    6. self.data = init_data
    7. self.next = None
    8. #获得数据项
    9. def get_data(self):
    10. return self.data
    11. #获得节点
    12. def get_next(self):
    13. return self.next
    14. #设置数据项
    15. def set_data(self,new_data):
    16. self.data = new_data
    17. #设置节点
    18. def set_next(self,new_next):
    19. self.next = new_next
    20. #结点示例
    21. temp = Node(93)
    22. print(temp.get_data())

    链表的实现 

    可以采用 链接结点 的方式来构建数据集 实现无序表

    链表的第一个最后一个 节点最重要 

    如果想访问到链表中的所有节点,就必须从第一个节点沿链接遍历下去.

     

     Unordered List - 无序表

    箭头所指为表头

    最快捷的就是从表头开始(相当于insert[0]),

    但是之前列表实现inser[0]的时间复杂度是O(n),

    链表是O(1)

    结点(node): 为了组织链表引入的一个结构,除了保存我们的元素之外,还会保存指向下一个结点的引用 

    当前结点(current / cur): 表示链表中某个结点
    前驱结点(previous / prev): 表示链表中某个结点的前一个结点头结点没有前驱结点
    后继结点(next): 表示链表某个结点的后一个结点尾结点没有后继结点

    链表的头结点, 链表最开始的节点~
    尤其是对单链表来说, 只要知道了链表的头结点可以获取到链表的所有的元素
    通常情况下,特别喜欢用头结点来代指整个链表~

    Add方法

    思路步骤如下:

    1. #为item数据项生成一个结点-Node 叫做item
    2. def add(self,item):
    3. #然后将这个结点命名为临时变量
    4. temp = Node(item)
    5. #将下一个临时结点设置为表头
    6. temp.set_next(self.head)
    7. #表头指向新增加的临时结点
    8. self.head = temp

    注意:第三第四行代码顺序不能调换,否则会发生链表丢失

    size方法 

    1. def size(self):
    2. #当前节点设为表头第一个节点
    3. current = self.head
    4. count = 0
    5. while current != None:
    6. count += 1
    7. #将当前节点设为下一个结点的结点,循环往复
    8. current = current.get_next()
    9. #返回结点的个数
    10. return count

     

    1. def search(self,item):
    2. current = self.head
    3. found = False
    4. while current != None and not found:
    5. #判断当前节点数据项是否等于我想要找的数据
    6. if current.getData() == item:
    7. found = True
    8. else:
    9. current = current.get_next()
    10. return found

     remove(item)方法

     

    1. def remove(self,item):
    2. current = self.head
    3. previous = None
    4. found = False
    5. while not found:
    6. if current.get_data == item:
    7. found = True
    8. else:
    9. previous = current
    10. current = current.get_next
    11. if previous == None:
    12. self.head = current.get_next()
    13. else:
    14. previous.set_next(current.get_next())

     

  • 相关阅读:
    Kafka详解
    分类算法-下
    传输层协议——TCP、UDP
    UE4 Physics Constraint Actor 实现钟摆效果
    Bean实例化的基本流程
    设计模式----单例模式(创建型)
    NSSCTF web刷题记录6
    JavaScript 基础知识|基础运算符
    strings.xml补充知识
    Oracle中已定义者身份执行函数AUTHID DEFINER与Postgresql行为的异同
  • 原文地址:https://blog.csdn.net/Aileenvov/article/details/133922165