zoukankan      html  css  js  c++  java
  • Python 单链表实现

    概念: 什么是单链表

    链表是一种动态数据结构,他的特点是用一组任意的存储单元存放数据元素。链表中每一个元素成为“结点”,

    每一个结点都是由数据域和指针域组成的。跟数组不同链表不用预先定义大小,而且硬件支持的话可以无限扩展。

     代码: 

    """
    author: zhao xian xin
    
    不积跬步无以至千里
    
    """
    
    
    # 设置 每一个链表的结点
    class Node(object):
        """
        链表节点类
        """
    
        def __init__(self, item):
            self.element = item
            self.next = None
    
    
    # 设置  链表得 方法
    class SingleLinkList(object):
        """
        链表 公用 函数方法
        """
        """ 初始化链表 """
        def __init__(self):
            self.header = None
            self.length = 0
    
    
        """ 链表头部添加元素 """
        def firstAdd(self, node):
            if self.header == None:
                self.header = node
            else:
                node.next = self.header
                self.header = node
            self.length += 1
    
    
        """ 链表尾部添加元素 """
        def tailAdd(self, node):
            if self.header == None:
                self.header = node
            else:
                currentNode = self.header
                while currentNode.next != None:
                    currentNode = currentNode.next
                currentNode.next = node
            self.length += 1
    
    
        """ 遍历链表 """
        def rangeList(self):
            try:
                assert self.length != 0, "链表为空"
            except:
                print("ok")
            currentNode = self.header
            for i in range(0, self.length):
                eleNum = currentNode.element
                currentNode = currentNode.next
                print(eleNum, end=" ")
    
    
        """ 插入节点到对应得位置 """
        def insertNode(self, index, node):
            if self.length <= index <= 0:
                raise ValueError()
            else:
                """ 需要考虑 for 循环 得 range """
                if index == 1:
                    self.firstAdd(node)
    
                elif index == 2:
                    node.next = self.header.next
                    self.header.next = node
                    self.length += 1
    
                else:
                    currentNode = self.header
                    for i in range(1, index - 1):
                        currentNode = currentNode.next
                    node.next = currentNode.next
                    currentNode.next = node
                    self.length += 1
    
    
        """ 结点之间排序 排序的方式 不需要交换节点之间的位置 
            只需要 交换节点之间值就可以了 用到了快速排序
        """
        def sortList(self):
            if self.header == None:
                raise ValueError()
            else:
                """ 快速排序 方式 实现 """
                for i in range(0, self.length):
                    currentNode = self.header
                    for j in range(0, self.length - i -1):
                        if currentNode.element > currentNode.next.element:
                            mid = currentNode.element
                            currentNode.element = currentNode.next.element
                            currentNode.next.element = mid
                        currentNode = currentNode.next
    
    
        """ 通过索引得 位置 删除 """
        def deleteNode(self, index):
            if self.header == None:
                raise ValueError()
            else:
                if index == 1:
                    self.header = self.header.next
                elif index == 2:
                    self.header.next = self.header.next.next
                else:
                    currentNode = self.header
                    for i in range(1, index - 1):
                        currentNode = currentNode.next
                    currentNode.next = currentNode.next.next
            self.length -= 1
    
    
    
    
    
    if __name__ == "__main__":
       # 声明结点, 头部添加元素 node1
    = Node(1) single_link_list = SingleLinkList() # 实例化 single_link_list.firstAdd(node1) print(single_link_list.rangeList())   # 生命节点, 尾部添加元素 single_link_list.tailAdd(Node(2)) print(single_link_list.rangeList())   # 声明结点, 在指定位置插入元素 single_link_list.insertNode(2, Node(3)) print(single_link_list.rangeList())   #声明结点, 结点排序 single_link_list.tailAdd(Node(1)) single_link_list.sortList() print(single_link_list.rangeList())

    额外小知识: assert 断言 当条件为假时会触发

     

    邮箱: 1090055252@qq.com
  • 相关阅读:
    数组中的逆序对
    第一个只出现一次的字符
    丑数
    把数组排成最小的数
    整数中出现1的个数
    连续子数组最大和
    JS之window对象
    JS之递归(例题:猴子吃桃)
    JS中函数的基础知识
    JS数组2(冒泡排列、数组里面查找数据)
  • 原文地址:https://www.cnblogs.com/zhaoxianxin/p/13606747.html
Copyright © 2011-2022 走看看