- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python实现的单向循环链表功能示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了Python实现的单向循环链表功能。分享给大家供大家参考,具体如下:
概述:
单向循环链表是指在单链表的基础上,表的最后一个元素指向链表头结点,不再是为空.
由图可知,单向循环链表的判断条件不再是表为空了,而变成了是否到表头.
操作 。
is_empty() 判断链表是否为空 length() 返回链表的长度 travel() 遍历 add(item) 在头部添加一个节点 append(item) 在尾部添加一个节点 insert(pos, item) 在指定位置pos添加节点 remove(item) 删除一个节点 search(item) 查找节点是否存在 。
具体代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
class
Node(
object
):
"""节点"""
def
__init__(
self
, item):
self
.item
=
item
self
.
next
=
None
class
SinCycLinkedlist(
object
):
"""单向循环链表"""
def
__init__(
self
):
self
._head
=
None
def
is_empty(
self
):
"""判断链表是否为空"""
return
self
._head
=
=
None
def
length(
self
):
"""返回链表的长度"""
# 如果链表为空,返回长度0
if
self
.is_empty():
return
0
count
=
1
cur
=
self
._head
while
cur.
next
!
=
self
._head:
count
+
=
1
cur
=
cur.
next
return
count
def
travel(
self
):
"""遍历链表"""
if
self
.is_empty():
return
cur
=
self
._head
print
cur.item,
while
cur.
next
!
=
self
._head:
cur
=
cur.
next
print
cur.item,
print
""
def
add(
self
, item):
"""头部添加节点"""
node
=
Node(item)
if
self
.is_empty():
self
._head
=
node
node.
next
=
self
._head
else
:
#添加的节点指向_head
node.
next
=
self
._head
# 移到链表尾部,将尾部节点的next指向node
cur
=
self
._head
while
cur.
next
!
=
self
._head:
cur
=
cur.
next
cur.
next
=
node
#_head指向添加node的
self
._head
=
node
def
append(
self
, item):
"""尾部添加节点"""
node
=
Node(item)
if
self
.is_empty():
self
._head
=
node
node.
next
=
self
._head
else
:
# 移到链表尾部
cur
=
self
._head
while
cur.
next
!
=
self
._head:
cur
=
cur.
next
# 将尾节点指向node
cur.
next
=
node
# 将node指向头节点_head
node.
next
=
self
._head
def
insert(
self
, pos, item):
"""在指定位置添加节点"""
if
pos <
=
0
:
self
.add(item)
elif
pos > (
self
.length()
-
1
):
self
.append(item)
else
:
node
=
Node(item)
cur
=
self
._head
count
=
0
# 移动到指定位置的前一个位置
while
count < (pos
-
1
):
count
+
=
1
cur
=
cur.
next
node.
next
=
cur.
next
cur.
next
=
node
def
remove(
self
, item):
"""删除一个节点"""
# 若链表为空,则直接返回
if
self
.is_empty():
return
# 将cur指向头节点
cur
=
self
._head
pre
=
None
# 若头节点的元素就是要查找的元素item
if
cur.item
=
=
item:
# 如果链表不止一个节点
if
cur.
next
!
=
self
._head:
# 先找到尾节点,将尾节点的next指向第二个节点
while
cur.
next
!
=
self
._head:
cur
=
cur.
next
# cur指向了尾节点
cur.
next
=
self
._head.
next
self
._head
=
self
._head.
next
else
:
# 链表只有一个节点
self
._head
=
None
else
:
pre
=
self
._head
# 第一个节点不是要删除的
while
cur.
next
!
=
self
._head:
# 找到了要删除的元素
if
cur.item
=
=
item:
# 删除
pre.
next
=
cur.
next
return
else
:
pre
=
cur
cur
=
cur.
next
# cur 指向尾节点
if
cur.item
=
=
item:
# 尾部删除
pre.
next
=
cur.
next
def
search(
self
, item):
"""查找节点是否存在"""
if
self
.is_empty():
return
False
cur
=
self
._head
if
cur.item
=
=
item:
return
True
while
cur.
next
!
=
self
._head:
cur
=
cur.
next
if
cur.item
=
=
item:
return
True
return
False
if
__name__
=
=
"__main__"
:
ll
=
SinCycLinkedlist()
ll.add(
1
)
ll.add(
2
)
ll.append(
3
)
ll.insert(
2
,
4
)
ll.insert(
4
,
5
)
ll.insert(
0
,
6
)
print
"length:"
,ll.length()
ll.travel()
print
ll.search(
3
)
print
ll.search(
7
)
ll.remove(
1
)
print
"length:"
,ll.length()
ll.travel()
|
运行结果:
希望本文所述对大家Python程序设计有所帮助.
原文链接:https://www.cnblogs.com/Erick-L/p/7209208.html 。
最后此篇关于Python实现的单向循环链表功能示例的文章就讲到这里了,如果你想了解更多关于Python实现的单向循环链表功能示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
一个雇主有几个雇员,因此雇员与他们的雇主有(多对一)关系。假设我们忽略了从雇主到雇员的反向关系(一对多),那么从雇员的角度来看,这可以表示为一对一的关系!? 最佳答案 乍一看,它可能看起来如此 - 使
因此,我研究了neo4j,由于它的数据模型可能非常适合我的项目,因此我可能会在下一个项目中使用它。我浏览了文档,但仍然需要这个问题的答案: 我可以将关系设置为单向吗? 看来neo4j人们喜欢看电影,所
我在用: Spring Boot Spring Data JPA Spring Data Rest hibernate 嵌入式H2数据库 我正在尝试定义 2 个类,First和 Second ,这样就
给定以下代码 public class Course { @Id @GeneratedValue private Long id; private String nam
我的帐户和组之间存在多对多关系。组表的数据已预先填充,无需添加其他组。 使用 Hibernate,我的愿望是: 将帐户添加到帐户表, 向 account_group 表添加一条记录,并且 不向组表中添
我有一个 SKSpriteNode 作为球,它的所有 SKPhysicsBody 属性都可以向各个方向移动。我现在想要的是使其单向(仅朝它之前未移动到的方向移动,并且不返回到它已移动的路径)。目前我对
我已经看到多个关于此功能可用于蓝牙 4.0/LE 的引用资料,但我不确定从哪里开始或如何实现它。 明确地说,我指的是真正的无连接,只有一台设备上有一个接收器,另一台设备上有一个发射器。 (或者,更具体
给定以下代码 public class Course { @Id @GeneratedValue private Long id; private String nam
我在删除单向 OneToMany 关系中的所有者对象时遇到问题。 相关的部分是我有三个对象:Acronym、Expansion 和 Tag。 Acronym 与 Expansion 具有单向 OneT
我已经基于 this 在 JavaScript 中实现了一个 ElGamal 方案(代码很糟糕,只是想快速测试一下)解释。 var forge = require('node-forge'); var
我在我的模型中应用领域驱动设计聚合模式。我遵循常见的 DDD 聚合模式示例:Order 是管理一个或多个 LineItem 的根聚合。在我在网络上找到的许多聚合模式示例中,LineItem 应该不知道
这是我的场景, 我有 SubForum 类,它包含一组主持人,该集的每个实体 int 都是 User 类。 这是子论坛的映射
我想保存/保留一个实体(父实体),该实体(父实体)具有仅由父对象包含的唯一子对象。一切正常,直到出现重复的 child ,在这里我得到以下异常: Caused by: com.mysql.jdbc.e
这是我为汉诺塔问题编写的 Python 代码,其中塔必须从左桩转移到中间桩,使用右桩作为备用: def hanoi(n, origin = "1", destination = "2", spare
我有几个单向 JPA2 @OnetoMany 关系的失败案例下面是代码片段 @Entity @Table(name="CUSTOMER") @Access(AccessType.FIELD) publ
我想构建 Hibernate OneToMany 关系,其中父级有一个复合主键,子级有一个主键(hibernate 自动生成)。以下是我的工作示例代码: class Parent{ @Embe
我的项目中有以下实体: AccountGroup AccountItem AccountSegment 具有以下关系: AccountGroup有List AccountItem 有 List 一切正
是否可以使用自动布局和界面生成器进行单向尺寸匹配? 例如,我可能有两个标签。我不希望标签 A 大于标签 B,我希望 B 具有其固有大小。但使用“匹配高度/宽度”可能会导致大量文本增加 A 的大小,从而
尝试使用 Weblogic 11g 设置单向 SSL 并遇到问题。我有一个自定义身份(我自己的证书),但我只想执行单向 SSL,那么为什么我需要指定信任 keystore ? (我没有使用信任,因为我
注意:这不是 this 的副本问题,因为我了解您何时会使用单向 channel 。我一直这样做。我的问题是为什么这个程序是有效的: func main() { ch := make(chan<
我是一名优秀的程序员,十分优秀!