python--自己实现的单链表常用功能
最近一个月,就耗在这上面吧。
很有收获的。
# 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--自己实现的单链表常用功能的更多相关文章
- python实现单链表及链表常用功能
单链表及增删实现 单链表高级功能实现:反序,找中间结点,检测环等 参考: https://github.com/wangzheng0822/algo
- Java 实现简答的单链表的功能
作者:林子木 博客网址:http://blog.csdn.net/wolinxuebin 參考网址:http://blog.csdn.net/sunsaigang/article/details/5 ...
- python算法与数据结构-单链表(38)
一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...
- c++单链表基本功能
head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...
- java单链表常用操作
总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...
- python中栈的单链表实现
参考博客:https://www.cnblogs.com/stacklike/p/8284550.html 基于列表的简单实现 # 先进后出 # 以列表实现的简单栈 class SimpleStack ...
- python实现一个无序单链表
class Node: """先定一个node的类""" def __init__(self, value=None, next=None) ...
- 数据结构(2):单链表学习使用java实现
单链表是单向链表,它指向一个位置: 单链表常用使用场景:根据序号排序,然后存储起来. 代码Demo: package com.Exercise.DataStructure_Algorithm.Sing ...
- 数据结构:单链表结构字符串(python版)添加了三个新功能
#!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...
随机推荐
- k64 datasheet学习笔记12---System Integration Module (SIM)
1.前言 Features of the SIM include: System clocking configuration(1)System clock divide values(2) Arch ...
- mlock实现原理及应用【转】
转自:https://blog.csdn.net/yiyeguzhou100/article/details/78085857 https://wenku.baidu.com/view/e25b4af ...
- CentOS(Linux)中解决MySQL乱码
环境:CentOS 6.3.mysql5.1 Centos 6.3在上安装mysql client和server之后,出现乱码,不得不修改编码. 注意: 关于utf8和gbk的区别详细见:linux中 ...
- 解决python发送multipart/form-data请求上传文件的问题
服务器接收文件时,有时会使用表单接收的方式,这意味着我们需要使用Python的requests上传表单数据和文件. 常用的方式一般如下: data = { 'name': 'nginx' } file ...
- Alpha 冲刺 (6/10)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:感恩节~ 团队部分 后敬甲(组长) 过去两天完成了哪些任务 文字描述 设计了拍照界面和图片上传界面 沟通了前端进度 接下 ...
- vue.js如何更改默认端口号8080为指定端口
执行npm run dev实际是在调用根目录下的package.json 打开package.json后可发现有这样一段代码 由此可知,我们应该查看build目录下的dev-server.js文件 在 ...
- 所有ORM操作 (第二版)
####################################################################### # PUBLIC METHODS THAT ALTER ...
- Django 自定义模型管理器类2个应用场景
class BookManager(models.Manager): # 改变查询集的结果集 def all(self): books = super().all() # QuerySet books ...
- ES5与ES6的研究
今天开始ES5与ES6的研究. 1.什么是ES5与ES6? 就是ECMAScript的第五个版本与第六个版本,那么问题来了,什么是ECMAScript?首先它是一种由Ecma国际通过ECMA-262标 ...
- Modbus库开发笔记之五:Modbus RTU Slave开发
Modbus在串行链路上分为Slave和Master,这一节我们就来开发Slave.对于Modbus RTU从站来说,需要实现的功能其实与Modbus TCP的服务器端是一样的.其操作过程也是一样的. ...