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 ...
随机推荐
- iris数据集(鸢尾花)
包含三个花的品种(Iris setosa(山鸢尾),Iris virginica(北美鸢尾),Iris versicolor(变色鸢尾)) 每个品种各50个样 每个样本四个特征参数(萼片长度和宽度.花 ...
- Nand flash 三种类型SLC,MLC,TLC【转】
转自:https://blog.csdn.net/fc34235/article/details/79584758 转载自:http://diy.pconline.com.cn/750/7501340 ...
- JSLint报错翻译
“Missing semicolon.” : “缺少分号.”,“Use the function form of \”use strict\”.” : “使用标准化定义function.”,“Unex ...
- 【转】gcc命令中参数c和o混合使用的详解
gcc -c a.c 编译成目标文件a.o gcc a.c 生成执行文件a.exe gcc -o a -c a.c 编译成目标文件a gcc -o a a.c 生成执行文件a. ...
- Linux内核之内存管理
Linux内核之内存管理 Linux利用的是分段+分页单元把逻辑地址转换为物理地址; RAM的某些部分永久地分配给内核, 并用来存放内核代码以及静态内核数据结构; RAM的其余部分称动态内存(dyna ...
- windows下揪出java程序占用cpu很高的线程
背景 天天搞java,这些监控也都知道,用过,但也没往细里追究.因为也没碰见这种问题,这次还是静下来走一遍流程吧.与网上基本一致,不过我区分了下linux和windows的不一样.我感觉基本是程序写成 ...
- Spring initializr使用
Spring initializr 是Spring 官方提供的一个很好的工具,用来初始化一个Spring boot 的项目. 有两种方式可以使用Spring initializr来创建一个项目: ht ...
- Python Redis pipeline操作
Redis是建立在TCP协议基础上的CS架构,客户端client对redis server采取请求响应的方式交互. 一般来说客户端从提交请求到得到服务器相应,需要传送两个tcp报文. 设想这样的一个场 ...
- JS ----实现复制粘贴功能 (剪切板应用clipboardData)
注意:ie7,与ie8 对网页有个复制的权限,需在“安全”中的“自定义级别”的脚本中设置 clipboardData 对象 提供了对剪贴板的访问. 三个方法 :1.clearData(sDataFor ...
- Python-WEB -VUE初识
走进Vue_渐进式 JavaScript 框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 what -- 什么是Vue 可以独立完成前后 ...