python实现单单链表
# -*- coding: utf-8 -*-
# @Time : 2018/9/28 22:09
# @Author : cxa
# @File : node.py
# @Software: PyCharm
# 单向列表
# 数据元素区,下一个结点的链接区
# 尾节点指向的结点为空。
"""
表元素域 下一结点链接域
"""
class Node:
# 结点类
def __init__(self, elem):
self.elem = elem
self.next = None
class SingLinkList(object):
# 链表类
def __init__(self, node=None):
self.__head = node
def is_empty(self):
"""列表是否为空"""
return self.__head == None
def length(self):
"""结点的数目,到尾节点截止。需要一个游标、来记录当前的位置"""
cur = self.__head
"""count记录数量,如果空链表也可以正确处理"""
count = 0
"""开始游标移动"""
while cur:
count += 1
cur = cur.next
return count
def travel(self):
"""遍历列表"""
cur = self.__head
while cur:
print("当前的结点", cur.elem, end='')
cur = cur.next
def add(self, item):
"""从头部添加,头插法"""
node = Node(item)
node.next = self.__head
self.__head = node
def append(self, item):
"""从尾部添加,尾插法"""
node = Node(item)
if self.is_empty():
self.__head = node
else:
cur = self.__head
while cur.next:
cur = cur.next
cur.next = node
def insert(self, pos, item):
node = Node(item)
'''
从指定位置添加
:param pos: 从0开始
:param item:
:return:
'''
if pos <= 0:
self.add(item)
elif pos > self.length(item) - 1:
self.append(item)
else:
pre = self.__head # pre指前一个对象
count = 0
while count < pos - 1:
count += 1
pre = pre.next
# pre指向poss-1
node.next = pre.next
pre.next = node
def remove(self, item):
"""删除结点"""
# pre.next=pre.next.next
cur = self.__head
pre = None
while cur:
if cur.elem == item:
# 判断此节点是否是头节点
# 头节点
if cur == self.__head:
self.__head = cur.next
else:
pre.next = cur.next
break
else:
pre = cur
cur = cur.next
def search(self, item):
"""查找结点是否存在"""
cur = self.__head
while cur:
if cur.elem == item:
return True
else:
cur = cur.next
return False
if __name__ == '__main__':
# 测试下正确性
ll = SingLinkList()
print(ll.is_empty())
print(ll.length())
ll.append(1)
print(ll.is_empty())
print(ll.length())
ll.append(2)
ll.append(3)
ll.add(8)
ll.append(4)
ll.travel()
python实现单单链表的更多相关文章
- Python实现单链表数据的添加、删除、插入操作
Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...
- 用python实现单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
- python实现单链表反转(经典笔试题)
https://blog.csdn.net/su_bao/article/details/81072849 0.说在前面的话 链表结构,说难不难,说易不易,一定要亲自编程实现一下.其次就是一定要耐心, ...
- python实现单链表的翻转
#!/usr/bin/env python #coding = utf-8 class Node: def __init__(self,data=None,next = None): ...
- python数据结构之链表(一)
数据结构是计算机科学必须掌握的一门学问,之前很多的教材都是用C语言实现链表,因为c有指针,可以很方便的控制内存,很方便就实现链表,其他的语言,则没那么方便,有很多都是用模拟链表,不过这次,我不是用模拟 ...
- 用Python写单向链表和双向链表
链表是一种数据结构,链表在循环遍历的时候效率不高,但是在插入和删除时优势比较大. 链表由一个个节点组成. 单向链表的节点分为两个部分:存储的对象和对下一个节点的引用.注意是指向下一个节点. 而双向链表 ...
- python实现单链表的反转
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/env python #coding = utf-8 ...
- python描述:链表
单链表结构: 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点 ...
- python数据结构——单向链表
链表 ( Linked List ) 定义:由许多相同数据类型的数据项按照特定顺序排列而成的线性表. 特点:各个数据在计算机中是随机存放且不连续. 优点:数据的增删改查都很方便,当有新的数据加入的时候 ...
随机推荐
- c++11 类默认函数的控制:"=default" 和 "=delete"函数
c++11 类默认函数的控制:"=default" 和 "=delete"函数 #define _CRT_SECURE_NO_WARNINGS #include ...
- c# 方法参数 params 的试用
//添加方法 public void test(params string[] messages) { } //调用方法 test("aaa","bbb",&q ...
- CF739E Gosha is hunting 【WQS二分 + 期望】
题目链接 CF739E 题解 抓住个数的期望即为概率之和 使用\(A\)的期望为\(p[i]\) 使用\(B\)的期望为\(u[i]\) 都使用的期望为\(p[i] + u[i] - u[i]p[i] ...
- 【bzoj2876】 Noi2012—骑行川藏
http://www.lydsy.com/JudgeOnline/problem.php?id=2876 (题目链接) 题意 在满足约束条件$${\sum_{i=1}^ns_ik_i(v_i-v_i' ...
- java的序列化流和打印流
对象操作流(序列化流) 每次读取和写出的都是JavaBean对象. 序列化:将对象写入到文件中的过程 反序列化:从文件中读取对象到程序的过程 transient: 标识瞬态,序列化的时候,该修饰符修饰 ...
- jquery的serializeArray、param 与serializeArray 的区别与源码解析
jQuery.param( obj, traditional ) 为url查询或者ajax 将对象或者数组转为url参数或ajax参数,是挂在jQuery对象上的静态方法,有码有真相: var myI ...
- BRIEF特征点描述子
简介 BRIEF是2010年的一篇名为<BRIEF:Binary Robust Independent Elementary Features>的文章中提出,BRIEF是对已检测到的特征点 ...
- Java入门:基础算法之检查奇偶性
本程序检查一个数是奇数还是偶数. import java.util.Scanner; class CheckEvenOdd { public static void main(String args[ ...
- 浅谈 vue实例 和 vue组件
vue实例: import Vue from 'vue'; import app from './app'; import myRouter from './routers'; new Vue({ e ...
- P4889 kls与flag
P4889 kls与flag 一堆杆子, 每个有特定高度 \(a_{i}\) , 现想把杆子弄倒, 可以在一维内往左弄倒和往右弄倒, 求最大优秀对数, 定义优秀对数为两杆倒后顶点重合 Solution ...