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

很有收获的。

# 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. MySQL DROP TABLE操作以及 DROP 大表时的注意事项【转】

    删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCAD ...

  2. RabbitMQ 选型和对比

    背景 这个纯粹是记下知识点,知道自己在这个时候了解过这个技术.技术点网上很多,就不多说了.只是想起多年前做过的一次项目,是多个项目整合,各种数据库,java和c#项目,互相调来调去,甚至直接链接对方数 ...

  3. Ubuntu18系统qt生成程序无法双击运行问题

    1.Ubuntu18 安装qt编译生成的程序文件类型为application/x-sharedlib,无法双击直接运行.文件类型应该为x-executable. 2.解决方法 在.pro文件中添加下面 ...

  4. tcp和udp协议的聊天 和udp协议的时间同步机制-----编码

    tcp协议聊天 服务端:: 客户端 udp协议的聊天 ############ udp协议 ########### 服务器 import socket sk = socket.socket(type ...

  5. 【原创】大叔经验分享(32)docker挂载文件修改生效

    docker经常需要挂载文件到容器中,比如启动nginx # docker run -d --name test_nginx -v /tmp/nginx.conf:/etc/nginx/nginx.c ...

  6. Java数据结构与算法解析(十二)——散列表

    散列表概述 散列表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 散列表的思路很简单,如果所有的键都是整数,那么就可以使用一个简单 ...

  7. MySQL分组查询,前3条数据

    SELECT tpn.news_id, tpn.title, tpn.news_group_id, tpn.send_date FROM t_pm_news tpn WHERE 3 > ( SE ...

  8. hive学习03-求一年中的最大温度

    知识点: substr.concat函数的使用: row_number() over(distribute by year sort by temp desc)  #按照年分组,按照tmp去排序  需 ...

  9. js---数组排序法(冒泡排序;快速排序)

    1.冒泡排序 原理:将数组的相邻两个元素进行比较,大的就往后移,小的往前,依次比较并且进行递减迭代. var arr =[54,36,89,1,3,5,2]; function sortArr(arr ...

  10. 神经网络之 Batch Normalization

    知乎 csdn Batch Normalization 学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce ...