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

很有收获的。

# 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. k64 datasheet学习笔记45---10/100-Mbps Ethernet MAC(ENET)之概述

    1.前言 k64 ENET CORE 实现了10M/100Mbps的Ethernet MAC,与IEEE802.3-2002标准兼容. MAC层与全双工/半双工的10M/100Mbps以太网兼容: M ...

  2. UrlDecode

    void Decode(char *p){int i=0;while(*(p+i)){ if ((*p=*(p+i)) == '%') { *p=*(p+i+1) >= 'A' ? ((*(p+ ...

  3. 【转】drop、truncate和delete的区别

    (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删 ...

  4. sonar——Synchronized classes Vector, Hashtable, Stack and StringBuffer should not be used

    It is better to use their new unsynchronized replacements: ArrayList or LinkedList instead of Vector ...

  5. jQuery.extend()参数

    非原创,转载仅供学习 在处理插件参数的接收上,通常使用jQuery的extend方法.extend方法传递单个对象的情况下,这个对象会合并到jQuery身上,而当用extend方法传递一个以上的参数时 ...

  6. servlet生成图片验证码

    package cn.itcast.servlet.session.demo3; import java.awt.Color; import java.awt.Font; import java.aw ...

  7. 我的大学,我的SPR机器人队

    时间过的真快,我这个在协会呆了好多年的老油条今年都毕业了,在石油大学大学七年几乎三分之二的时间就是在协会度过的.实话说在北京这是我最亲切的地方,这里有我喜欢的各种设备,有亲爱的老师和一起奋斗的队友,在 ...

  8. 让NotePad++添加到右键快捷方式

    添加后的效果图: 操作方式: 第一步:在桌面上新建一个txt文本文档,然后将写入如下内容 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT ...

  9. 安娜Anna:世界最快的超级伸缩的KVS, 秒杀Redis

    伯克利 这个大学在计算机学术界.工业界的地位举足轻重,其中的AMP实验室曾开发出了一大批大获成功. 对计算机行业产生深远影响的分布式计算技术,包括 Spark.Mesos.Tachyon 等.作为AM ...

  10. C# Winform控件对透明图片重叠时导致图片不透明的解决方法(转)

    在Winform中如果将一个透明图片放在窗体上能正常显示透明,但是如果将该图片放在另一个控件上会导致不能显示透明效果. 解决这种情况,可以采取在控件上使用GDI+绘画出透明图片. 这里我们就以一个pi ...