- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python编程实现双链表,栈,队列及二叉树的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了Python编程实现双链表,栈,队列及二叉树的方法。分享给大家供大家参考,具体如下:
1.双链表 。
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
|
class
Node(
object
):
def
__init__(
self
, value
=
None
):
self
._prev
=
None
self
.data
=
value
self
._next
=
None
def
__str__(
self
):
return
"Node(%s)"
%
self
.data
class
DoubleLinkedList(
object
):
def
__init__(
self
):
self
._head
=
Node()
def
insert(
self
, value):
element
=
Node(value)
element._next
=
self
._head
self
._head._prev
=
element
self
._head
=
element
def
search(
self
, value):
if
not
self
._head._next:
raise
ValueError(
"the linked list is empty"
)
temp
=
self
._head
while
temp.data !
=
value:
temp
=
temp._next
return
temp
def
delete(
self
, value):
element
=
self
.search(value)
if
not
element:
raise
ValueError(
'delete error: the value not found'
)
element._prev._next
=
element._next
element._next._prev
=
element._prev
return
element.data
def
__str__(
self
):
values
=
[]
temp
=
self
._head
while
temp
and
temp.data:
values.append(temp.data)
temp
=
temp._next
return
"DoubleLinkedList(%s)"
%
values
|
2. 栈 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class
Stack(
object
):
def
__init__(
self
):
self
._top
=
0
self
._stack
=
[]
def
put(
self
, data):
self
._stack.insert(
self
._top, data)
self
._top
+
=
1
def
pop(
self
):
if
self
.isEmpty():
raise
ValueError(
'stack 为空'
)
self
._top
-
=
1
data
=
self
._stack[
self
._top]
return
data
def
isEmpty(
self
):
if
self
._top
=
=
0
:
return
True
else
:
return
False
def
__str__(
self
):
return
"Stack(%s)"
%
self
._stack
|
3.队列 。
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
|
class
Queue(
object
):
def
__init__(
self
, max_size
=
float
(
'inf'
)):
self
._max_size
=
max_size
self
._top
=
0
self
._tail
=
0
self
._queue
=
[]
def
put(
self
, value):
if
self
.isFull():
raise
ValueError(
"the queue is full"
)
self
._queue.insert(
self
._tail, value)
self
._tail
+
=
1
def
pop(
self
):
if
self
.isEmpty():
raise
ValueError(
"the queue is empty"
)
data
=
self
._queue.pop(
self
._top)
self
._top
+
=
1
return
data
def
isEmpty(
self
):
if
self
._top
=
=
self
._tail:
return
True
else
:
return
False
def
isFull(
self
):
if
self
._tail
=
=
self
._max_size:
return
True
else
:
return
False
def
__str__(
self
):
return
"Queue(%s)"
%
self
._queue
|
4. 二叉树(定义与遍历) 。
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
|
class
Node:
def
__init__(
self
,item):
self
.item
=
item
self
.child1
=
None
self
.child2
=
None
class
Tree:
def
__init__(
self
):
self
.root
=
None
def
add(
self
, item):
node
=
Node(item)
if
self
.root
is
None
:
self
.root
=
node
else
:
q
=
[
self
.root]
while
True
:
pop_node
=
q.pop(
0
)
if
pop_node.child1
is
None
:
pop_node.child1
=
node
return
elif
pop_node.child2
is
None
:
pop_node.child2
=
node
return
else
:
q.append(pop_node.child1)
q.append(pop_node.child2)
def
traverse(
self
):
# 层次遍历
if
self
.root
is
None
:
return
None
q
=
[
self
.root]
res
=
[
self
.root.item]
while
q !
=
[]:
pop_node
=
q.pop(
0
)
if
pop_node.child1
is
not
None
:
q.append(pop_node.child1)
res.append(pop_node.child1.item)
if
pop_node.child2
is
not
None
:
q.append(pop_node.child2)
res.append(pop_node.child2.item)
return
res
def
preorder(
self
,root):
# 先序遍历
if
root
is
None
:
return
[]
result
=
[root.item]
left_item
=
self
.preorder(root.child1)
right_item
=
self
.preorder(root.child2)
return
result
+
left_item
+
right_item
def
inorder(
self
,root):
# 中序序遍历
if
root
is
None
:
return
[]
result
=
[root.item]
left_item
=
self
.inorder(root.child1)
right_item
=
self
.inorder(root.child2)
return
left_item
+
result
+
right_item
def
postorder(
self
,root):
# 后序遍历
if
root
is
None
:
return
[]
result
=
[root.item]
left_item
=
self
.postorder(root.child1)
right_item
=
self
.postorder(root.child2)
return
left_item
+
right_item
+
result
t
=
Tree()
for
i
in
range
(
10
):
t.add(i)
print
(
'层序遍历:'
,t.traverse())
print
(
'先序遍历:'
,t.preorder(t.root))
print
(
'中序遍历:'
,t.inorder(t.root))
print
(
'后序遍历:'
,t.postorder(t.root))
|
输出结果:
1
2
3
4
|
层次遍历: [
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
]
先次遍历: [
0
,
1
,
3
,
7
,
8
,
4
,
9
,
2
,
5
,
6
]
中次遍历: [
7
,
3
,
8
,
1
,
9
,
4
,
0
,
5
,
2
,
6
]
后次遍历: [
7
,
8
,
3
,
9
,
4
,
1
,
5
,
6
,
2
,
0
]
|
希望本文所述对大家Python程序设计有所帮助.
原文链接:http://www.cnblogs.com/PrettyTom/p/6677993.html 。
最后此篇关于Python编程实现双链表,栈,队列及二叉树的方法示例的文章就讲到这里了,如果你想了解更多关于Python编程实现双链表,栈,队列及二叉树的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
好吧,我的教授(数据结构课)布置了这个:你的任务是编写一个程序来更新双向链表中的字符访问频率。该程序应一次从包含许多字符的文本文件中读取一个字符。为了方便起见,不要计算空格。每次访问一个字符时,将其访
嗨我想知道如何将我的对象从 arrayList 复制到双向链表?我的 DNode 构造函数也是: public DNode(Object element, DNode prev, DNode
我想实现 Split 函数来学习 C 的困难方式双链表,但要做到这一点,我需要每个节点都有其索引号,就像常规列表、数组一样。当我执行“Push”功能(将新节点添加到列表末尾)时,一切都很好,但是当我执
struct Node { int data; Node *next; Node *prev; }; class DoublyLinkedList { ofstream cout3; Node *he
我刚刚开始学习 C,并且(似乎)到目前为止,大多数东西都在点击。但是,我在尝试使用双链表 时遇到了一些问题。当我尝试构建/运行此代码时,我不断收到 seg-fault。我正在通过 NetBeans 使
我试图分两部分实现双链表:第一个是创建列表的实际功能;第二个是模拟器 - 包含一些线程、读取器和写入器(每个线程都在 while 循环中弹出和插入双链表),以及一个垃圾收集器线程,如果列表太大(根据
我正在分析我要在其上构建双向链表的这段代码: struct dplist_node { dplist_node_t * prev, * next; element_t element; };
我正在尝试制作一个简单的双链表,我首先使用了 (switch): int choice, data; switch(choice) { case 1:
我是 C 编程的初学者。我的任务是使用双链表创建学生列表。该应用程序应具有三个功能:显示列表、添加新学生和通过 ID 号删除学生。我做到了,它运行得很好。我想请教几个问题: 是否使用不当? 如果有缩短
我需要在 C 中的双链表中,但它必须用于不同的类型。在 C++ 中,我们为它使用模板。我在哪里可以找到 C 中带有抽象类型项的双链表的示例。 谢谢 最佳答案 您可以采用几种方法,其中一种涉及在您的 A
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
最近我开始学习 C++,并且开始玩简单的结构。我在双链表上苦苦挣扎,我被困在“prev”指针上;/“Next”指针工作正常但“prev”不工作,我不知道为什么。 #ifndef _DOUBLELIST
在此处提问之前,我会尽力查找问题的解决方案,但我遇到了一些困难。虽然有一个用于 Java 的,但它并没有帮助我理解我的实现哪里出了问题。因此,事不宜迟,这里是一些背景,然后是问题。 尝试此操作的背景/
双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。 PHP SPL中的SplDoublyLinkedList类提供了对双链表的操作。
我的 DLL 插入函数有问题。附加到列表上没有问题,但是当我有一个包含 5 个对象的列表并且我想插入节点之间时,它什么也不做。我一直在四处寻找数小时来解决这个问题,但没有任何改变。 这是我的代码:在
我有一个具有这些属性的 class Node: int value; Node* next; Node* prev; 当我初始化列表以了解哪个是第一个节点时,我有一个带有属性 Node* first
我已经编写了这段代码,一般来说效果很好,但是当我们到达 i == 74 列表元素为 4 - 11 - 18 - 4 - 10 - 18 - 17 - 22 - 14 - 29 和 swapNodes(
你能帮我弄清楚为什么我会收到这些 2019 错误吗?我很确定所有文件都保存在正确的位置,而且我认为我对头文件使用了正确的约定?这是我的系统编程类(class)的实验室。 错误如下: 1>main.ob
我是一名优秀的程序员,十分优秀!