zoukankan      html  css  js  c++  java
  • Python3单链表简单操作

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

    class Node():
        # 定义头结点
        def __init__(self, data):
            self.data = data
            # 头指针为空
            self.next = None
    
    
    # 头插法
    class SNode():
        def __init__(self):
            self.current_node = None
    
        def add_node(self, data):
            node = Node(data)
            node.next = self.current_node
            self.current_node = node
    
        def append_node(self, data):
            # 尾插法插入节点
            node = Node(data)
            cur = self.current_node
            # 遍历链表直到头节点处停止遍历
            while cur:
                if cur.next == None:
                    break
                cur = cur.next
            cur.next = node
    
        def travel(self):
            '''
            遍历链表
            :return:
            '''
            cur = self.current_node
            while cur:
                print(cur.data)
                cur = cur.next
    
        def is_empty(self):
            '''
            判断链表非空
            :return:
            '''
            return self.current_node == None
    
        def get_lenth(self):
            '''
            获取链表的长度
            :return:
            '''
            cur = self.current_node
            count = 0
            while cur:
                count += 1
                cur = cur.next
            return count
    
        def insert_node(self, index, data):
            '''
            指定位置插入节点
            :param index:
            :param data:
            :return:
            '''
            link_len = self.get_lenth()
            if index == 0:
                self.add_node(data)
            elif index >= link_len:
                self.append_node(data)
            else:
                cur = self.current_node
                for i in range(1, index):
                    cur = cur.next
                node = Node(data)
                node.next = cur.next
                cur.next = node
    
        def del_node(self, index):
            '''
            根据索引删除节点
            :param index:
            :return:
            '''
    
            # 找到前节点
            cur = self.current_node
            # 前驱节点
            pre = None
            count = 1
            len_num = self.get_lenth()
            while cur:
                if index == 1:
                    self.current_node = cur.next
                    break
                if count == index and count < len_num:
                    pre.next = cur.next
                    break
                if count >= len_num:
                    pre.next = None
                    break
                count += 1
                pre = cur
                cur = cur.next
    
    
    
    if __name__ == "__main__":
        test = SNode()
        list_data = [1, 2, 3]
        for i in list_data:
            test.add_node(i)
        test.travel()
        # print(test.is_empty())
        # print (test.get_lenth())
        # test.append_node(4)
        # test.insert_node(1, 4)
        # test.travel()
        # test.del_node(4)
        # test.travel()
    
        '''
        单链表的操作
    is_empty() 链表是否为空
    length() 链表长度
    travel() 遍历整个链表
    add(item) 链表头部添加元素
    append(item) 链表尾部添加元素
    insert(pos, item) 指定位置添加元素
    remove(item) 删除节点
    search(item) 查找节点是否存在
        '''
    

      

  • 相关阅读:
    缓存穿透与缓存雪崩
    hibernate 用hql做中文排序
    设计一个算法,求非空二叉树中指定的第k层(k&gt;1)的叶子节点的个数
    CI框架源代码阅读笔记3 全局函数Common.php
    Linux安装中文man手冊
    ios 自己定义导航栏和切割线
    算法7-7:有向图简单介绍
    [Leetcode]-Min Stack
    ios28--UIScrollView
    ios27--kvo
  • 原文地址:https://www.cnblogs.com/xiaotaiyangi/p/10574055.html
Copyright © 2011-2022 走看看