最近一个月,就耗在这上面吧。

很有收获的。

# coding = utf-8

# 单向链表
class Node:

    def __init__(self, new_data):
        self.data = new_data
        self.next = None

    def get_data(self):
        return self.data

    def set_data(self, new_data):
        self.data = new_data

    def get_next(self):
        return self.next

    def set_next(self, new_next):
        self.next = new_next

class SingleList:

    def __init__(self):
        self.head = None

    # 作头插入时,需要要注意插入顺序,
    # 先将节点的netxt设为head,然后,再将节点设为Head。
    # 总之。要注意不要丢失next。
    def add(self, item):
        temp = Node(item)
        temp.set_next(self.head)
        self.head = temp

    # 作尾插入时,需要先判断是否为空列表。因为空列表时,没有next。
    # 为空列表时,尾插入和头插入代码相同。
    # 当不为空时,需要循环到底,再作插入处理
    def append(self, item):
        temp = Node(item)
        if self.is_empty():
            temp.set_next(self.head)
            self.head = temp
        else:
            current = self.head
            while current.get_next() is not None:
                current = current.get_next()
            current.set_next(temp)

    # 指定位置插入节点
    def insert(self, pos, item):
        # 相当于头插入
        if pos <= 0:
            self.add(item)
        # 相当于尾插入
        elif pos >= self.size():
            self.append(item)
        else:
            temp = Node(item)
            count = 0
            current = self.head
            # 先将游标指到要插入位置
            while count < pos - 1:
                count += 1
                current = current.get_next()
            # 先将节点插入游标下一节点,再将当前游标指向节点
            temp.set_next(current.get_next())
            current.set_next(temp)

    # 删除指定节点数据
    def remove(self, item):
        previous = None
        current = self.head
        while current is not None:
            if current.get_data() == item:
                # 在找到节点之后,需要判断是否为首节点
                # 因为首节点时,还没有Previous这个变量
                if current == self.head:
                    self.head = current.get_next()
                else:
                    previous.set_next(current.get_next())
                break
            else:
                previous = current
                current = current.get_next()

    # 查找指定数据是否存在
    def search(self, item):
        current = self.head
        found = False
        while current is not None:
            if current.get_data() == item:
                found = True
            current = current.get_next()
        return found

    def is_empty(self):
        return self.head is None

    def __len__(self):
        return self.size()

    def size(self):
        count = 0
        current = self.head
        while current is not None:
            count += 1
            current = current.get_next()
        return count

    def show(self):
        current = self.head
        while current is not None:
            print(current.get_data(), end=' ')
            current = current.get_next()
        print('\n')

if __name__ == '__main__':
    s_list = SingleList()
    print(s_list.is_empty())
    s_list.add(5)
    s_list.add(4)
    s_list.add(76)
    s_list.add(23)
    s_list.show()
    s_list.append(47)
    s_list.show()
    s_list.insert(0, 100)
    s_list.show()
    s_list.insert(99, 345)
    s_list.show()
    s_list.insert(3, 222)
    s_list.show()
    s_list.remove(47)
    s_list.show()
    print(s_list.search(76))
    s_list.show()
    print(s_list.is_empty())
    print(s_list.size())
    print(len(s_list))
C:\Users\Sahara\.virtualenvs\test\Scripts\python.exe C:/Users/Sahara/PycharmProjects/test/python_search.py
True

True

False

Process finished with exit code 

python--自己实现的单链表常用功能的更多相关文章

  1. python实现单链表及链表常用功能

    单链表及增删实现 单链表高级功能实现:反序,找中间结点,检测环等 参考: https://github.com/wangzheng0822/algo

  2. Java 实现简答的单链表的功能

    作者:林子木  博客网址:http://blog.csdn.net/wolinxuebin 參考网址:http://blog.csdn.net/sunsaigang/article/details/5 ...

  3. python算法与数据结构-单链表(38)

    一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...

  4. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  5. java单链表常用操作

    总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...

  6. python中栈的单链表实现

    参考博客:https://www.cnblogs.com/stacklike/p/8284550.html 基于列表的简单实现 # 先进后出 # 以列表实现的简单栈 class SimpleStack ...

  7. python实现一个无序单链表

    class Node: """先定一个node的类""" def __init__(self, value=None, next=None) ...

  8. 数据结构(2):单链表学习使用java实现

    单链表是单向链表,它指向一个位置: 单链表常用使用场景:根据序号排序,然后存储起来. 代码Demo: package com.Exercise.DataStructure_Algorithm.Sing ...

  9. 数据结构:单链表结构字符串(python版)添加了三个新功能

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

随机推荐

  1. 最简单的HashMap底层原理介绍

    HashMap 底层原理  1.HashMap底层概述 2.JDK1.7实现方式 3.JDK1.8实现方式 4.关键名词 5.相关问题 1.HashMap底层概述 在JDK1.7中HashMap采用的 ...

  2. Samples topic

    Rendering: http://www.cnblogs.com/miloyip/archive/2010/03/29/1698953.html http://www.scratchapixel.c ...

  3. python中的正则表达式--re模块

    参考博客:https://www.cnblogs.com/tina-python/p/5508402.html 这里说一下python的re模块即正则表达式模块,先列出其中涉及到的各种字符和模式等: ...

  4. mysql配置修改项

    [mysqld] innodb_locks_unsafe_for_binlog = 1 transaction-isolation = READ-COMMITTED 作用:防死锁 ,提高并发入库速度

  5. vim块编辑删除、插入、替换【转】

    删除列 1.光标定位到要操作的地方. 2.CTRL+v 进入“可视 块”模式,选取这一列操作多少行. 3.d 删除.   插入列 插入操作的话知识稍有区别.例如我们在每一行前都插入"() & ...

  6. 一个漂亮的php验证码类

    一个漂亮的php验证码类(分享)   作者: 字体:[增加 减小] 类型:转载 下面小编就为大家分享一个漂亮的php验证码类.需要的朋友可以过来参考下   直接上代码: 复制代码 代码如下: //验证 ...

  7. 【转】thread.sleep(0)与thread.sleep(1)的区别

    Thread.Sleep(0) Sleep的意思是告诉操作系统自己要休息n毫秒,这段时间就让给一个就绪的线程吧.当n=0时,意思是要放弃自己剩下的时间片,但是仍然是就绪状态.Sleep(0)只允许那些 ...

  8. python 基础 three day

    本节主要内容: 一. python基本数据类型有哪些? 1. int  ==>  整数.主要用来进行数学计算. 2. str ==> 字符串,可以保存少量数据并进行相应的操作 3. boo ...

  9. es2015箭头函数的this

    摘自https://www.cnblogs.com/chenxygx/p/6509564.html,谢谢博主的分享!

  10. java结合testng,利用yaml做数据源的数据驱动实例

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以yaml为例: 备注:@DataProvider的返回 ...