zoukankan      html  css  js  c++  java
  • 单链表复习

      1 # 实现单链表
      2 class Node(object):
      3     '''定义一个节点'''
      4     def __init__(self,data):
      5         # 因为每次都需要生成一个节点,写到类里面便于保存
      6         self.data = data 
      7         # 保存节点的值
      8         self.next = None
      9         # 默认将节点的指向为空
     10     # 二元组也可以实现节点 (data,next指针域) ,为了通用性不使用二元组
     11 
     12 class DanLianBiao(object):
     13     # 定义一个单链表 将节点连接起来
     14     def __init__(self,node = None):
     15         # 指向节点 如果没传递则使用 None
     16         self._head = node
     17         # 定义头节点,指向实例化类对象时传递的节点指向
     18 
     19     def is_empty(self):
     20         '''链表是否为空'''
     21         return self._head == None
     22 
     23     def length(self):
     24         '''查询链表长度'''    
     25         cur = self._head
     26         # cur 为当前指向的指针
     27         count = 0 
     28         # 记录长度
     29         while cur != None:
     30             # 当前指向不为 None
     31             count += 1 
     32             # 数量加 1
     33             cur = cur.next
     34             # 将指针对节点进行移动
     35         # 如果第一个节点为 None ,依旧是返回 0
     36         return count
     37         # 返回节点数量
     38 
     39 
     40     def travel(self):
     41         '''遍历整个链表'''
     42         cur = self._head
     43         while cur != None:
     44             # 如果不为空 则打印数据
     45             print(cur.data)
     46             # 打印数据
     47             cur = cur.next
     48             # 向下遍历
     49 
     50     def add(self,data):
     51         '''链表头部添加元素'''
     52         node = Node(data)
     53         self._head = node
     54         # 将节点指向头部
     55         node.next = self._head
     56         # 将头部作为节点的下一个元素
     57 
     58 
     59     def append(self,data):
     60            '''链表尾部添加元素'''
     61            node = Node(data)
     62            # 创建一个节点
     63 
     64            # 特殊情况 第一个节点为空
     65            if self.is_empty():
     66                self._head = node
     67                # 头节点为 node 
     68            else:
     69                cur = self._head
     70                while cur.next != None:
     71                    cur = cur.next
     72                # cur.next.data = node.data 
     73                # 不需要添加数据
     74                cur.next = node
     75                # 添加节点
     76 
     77     def insert(self,pos,data):
     78            '''指定位置添加元素'''
     79            # 如果为零位置 
     80            if pos <= 0:
     81                self.add(data)
     82                # 添加节点
     83            elif pos > (self.length()-1):
     84                # 到最后一个元素
     85                self.append(data)
     86                # 添加节点
     87            else:
     88                node = Node(data)
     89                index = 0
     90                cur = self._head
     91                while index < pos :
     92                    # 遍历到 pos 前一个位置
     93                    index += 1
     94                    cur = cur.next 
     95                    # 不断向下移动
     96                node.next = cur.next 
     97                # 先和右面元素建立联系 防止与左面元素失联
     98                cur.next = node 
     99             
    100     def remove(self,data):
    101            '''删除节点'''
    102            cur = self._head
    103            pre = None 
    104            # 设置游标表示前一个游标
    105            while cur != None:
    106                if cur.data == data:
    107                    # 如果 cur 指向的节点为要删除的节点
    108                    if cur == self._head:
    109                        # 如果数据为头节点的数据
    110                        self._head = cur.next 
    111                        # 跳过 cur 
    112                    else:
    113                        # 如果不是头节点
    114                        pre.next = cur.next
    115                        # 跳过 cur 指向的节点
    116                    break
    117                    # 找到数据跳出循环
    118                else:
    119                    # 如果还没有找到数据
    120                    pre = cur
    121                    cur = cur.next
    122                    # 向下移动
    123 
    124     def search(self,data):
    125         '''查找节点是否存在'''
    126         cur = self._head
    127         # 指向头节点
    128         while cur.next != None:
    129             # 如果下一个节点不为空
    130             if cur.data == data:
    131                 # 如果找到了数据
    132                 return True
    133             else:
    134                 cur = cur.next
    135                 # 继续向下寻找
    136         return False
    137         # 没有找到该数据
    138 
    139 
    140         

    2020-04-14

  • 相关阅读:
    Cycle Sort
    使用finalize/dispose 模式提高GC性能(翻译)
    支持在控件标签间包含子控件 WebControl
    MongoDB 使用GridFS保存文件
    MongoDB学习笔记
    跨域名单点登录 part 1 设计蓝图(翻译)
    UserControl 用户自定义控件
    为什么90%的IT人员都不适合做老大?
    什么情况下你会毫不犹豫地辞职?
    Supervisor安装、配置、开启启动
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12695182.html
Copyright © 2011-2022 走看看