• 数据结构与算法(9)——无序表List


    • 列表基本定义

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

    无序表:数据的排列不具有顺序性,只按照存放位置来索引。

    • 无序表的操作

    这部分比较熟悉,在python里面有list类型。

    append(item) 在数据末尾添加一个数据项
    index(item) 返回数据项在表中的索引
    insert(pos,item) 将数据项插入到位置pos
    pop() 从列表末尾移除数据项
    pop(pos) 移除位置为pos的数据项

    由于无序表并不要求数据项依次存放在连续的存储空间,因此可采用链表实现无序表。

    • 链表

    链表:数据项存放位置并没有规则,但如果在数据项之间建立链接指向,则可以保持其前后相对位置。

    链表内包含很多结点。其中每个结点的数据空间一般会包含一个数据结构(用于存放各种类型的数据)以及一个指针,该指针一般称为next,用来指向下一个结点的位置。每个节点至少要包含2个信息:数据项本身,以及指向下一个节点的引用信息。当next为None则表示没有下一个节点了。

     用python对链表的实现:

     1 class Node:
     2     def __init__(self,initdata):
     3         self.data = initdata
     4         self.next = None
     5     def getData(self): #返回数据项
     6         return self.data
     7     def getNext(self): #返回下一个节点
     8         return self.next
     9     def setData(self,newdata): #修改数据项
    10         self.data = newdata
    11     def setNext(self,newnext): #修改指向引用
    12         self.next = newnext

    用链表Node实现一个无序表:

     1 class UnorderedList():
     2     def __init__(self):
     3         self.head = None #这里首先需要定义无须表的表头head属性,保存对第一个节点对的引用空表head为None.
     4     def isEmpty(self):
     5         return self.head == None
     6     def add(self, item):
     7         temp = Node(item)
     8         temp.setNext(self.head)
     9         self.head = temp
    10     def size(self):
    11         current = self.head
    12         count = 0
    13         while current != None:
    14             count += 1
    15             current = current.getNext()
    16         return count
    17 
    18     def search(self,item):
    19         current = self.head
    20         found = False
    21         while current != None and not found:
    22             if current.getData() == item:
    23                 found = True
    24             else:
    25                 current = current.getNext()
    26         return found
    27     def remove(self,item):
    28         '''
    29         1.将当前节点的前一个节点与当前节点的后一个节点连接,则执行删除了
    30         2.如何第一个就是要删除的,就把第一个节点的表头指向下一个就可以了
    31         '''
    32         current = self.head
    33         previous = None
    34         found = False
    35         while not found:
    36             if current.getData() == item:
    37                 found = True
    38             else: #往后遍历查找
    39                 previous = current
    40                 current = current.getNext()
    41         if previous == None:
    42             self.head = current.getxNet
    43         else:
    44             previous.setNext(current.getNext()) #把previous的下一个指向current下一个即可
    45 s = UnorderedList()
    46 s.add(5)
    47 s.add(6)
    48 s.add(7)
    49 print(s.head.getData())
    50 print(s.search(6))
    51 print(s.size())
    52 s.remove(5)
    53 print(s.head.getData())
    [OUT]
    7
    True
    3
    7
    
    Process finished with exit code 0

    参考:https://www.bilibili.com/video/BV1QJ411w7bB?p=28

  • 相关阅读:
    Js--Array类型1
    利用js生成一个在线考试系统
    在Asp.net core 项目中操作Mysql数据库
    Unity游戏接入TypeSDK集成笔记
    第一篇博客
    两次面试
    [OC笔记] static 关键字
    cellForRowAtIndexPath方法不执行的那些坑
    一行代码设置UITableView分割线的长度
    [转载]iOS开发:获取设备信息
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/12602660.html
Copyright © 2020-2023  润新知