Skip to content

Commit a85d85e

Browse files
committed
data_structure
1 parent 8df123b commit a85d85e

File tree

7 files changed

+205
-3
lines changed

7 files changed

+205
-3
lines changed

Diff for: .travis.yml

Whitespace-only changes.

Diff for: DataStructure/__init__.py

Whitespace-only changes.

Diff for: DataStructure/linked_list.py

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
class LinkedList():
2+
def __init__(self, value=None):
3+
self.value = value
4+
# 前驱
5+
self.before = None
6+
# 后继
7+
self.behind = None
8+
9+
def __str__(self):
10+
if self.value is not None:
11+
return str(self.value)
12+
else:
13+
return 'None'
14+
15+
16+
def init():
17+
return LinkedList('HEAD')
18+
19+
20+
def delete(linked_list):
21+
if isinstance(linked_list, LinkedList):
22+
if linked_list.behind is not None:
23+
delete(linked_list.behind)
24+
linked_list.behind = None
25+
linked_list.before = None
26+
linked_list.value = None
27+
28+
29+
def insert(linked_list, index, node):
30+
node = LinkedList(node)
31+
if isinstance(linked_list, LinkedList):
32+
i = 0
33+
while linked_list.behind is not None:
34+
if i == index:
35+
break
36+
i += 1
37+
linked_list = linked_list.behind
38+
if linked_list.behind is not None:
39+
node.behind = linked_list.behind
40+
linked_list.behind.before = node
41+
node.before, linked_list.behind = linked_list, node
42+
43+
44+
def remove(linked_list, index):
45+
if isinstance(linked_list, LinkedList):
46+
i = 0
47+
while linked_list.behind is not None:
48+
if i == index:
49+
break
50+
i += 1
51+
linked_list = linked_list.behind
52+
if linked_list.behind is not None:
53+
linked_list.behind.before = linked_list.before
54+
if linked_list.before is not None:
55+
linked_list.before.behind = linked_list.behind
56+
linked_list.behind = None
57+
linked_list.before = None
58+
linked_list.value = None
59+
60+
61+
def trave(linked_list):
62+
if isinstance(linked_list, LinkedList):
63+
print(linked_list)
64+
if linked_list.behind is not None:
65+
trave(linked_list.behind)
66+
67+
68+
def find(linked_list, index):
69+
if isinstance(linked_list, LinkedList):
70+
i = 0
71+
while linked_list.behind is not None:
72+
if i == index:
73+
return linked_list
74+
i += 1
75+
linked_list = linked_list.behind
76+
else:
77+
if i < index:
78+
raise Exception(404)
79+
return linked_list
80+
81+
82+
linked_list = init()
83+
trave(linked_list)
84+
# delete(linked_list)
85+
insert(linked_list, 0, 1)
86+
insert(linked_list, 0, 2)
87+
insert(linked_list, 0, 3)
88+
remove(linked_list,2)
89+
trave(linked_list)
90+
print(find(linked_list,3))

Diff for: DataStructure/queue.py

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
class MyQueue():
2+
def __init__(self, value=None):
3+
self.value = value
4+
# 前驱
5+
# self.before = None
6+
# 后继
7+
self.behind = None
8+
9+
def __str__(self):
10+
if self.value is not None:
11+
return str(self.value)
12+
else:
13+
return 'None'
14+
15+
16+
def create_queue():
17+
"""仅有队头"""
18+
return MyQueue()
19+
20+
21+
def last(queue):
22+
if isinstance(queue, MyQueue):
23+
if queue.behind is not None:
24+
return last(queue.behind)
25+
else:
26+
return queue
27+
28+
29+
def push(queue, ele):
30+
if isinstance(queue, MyQueue):
31+
last_queue = last(queue)
32+
new_queue = MyQueue(ele)
33+
last_queue.behind = new_queue
34+
35+
36+
def pop(queue):
37+
if queue.behind is not None:
38+
get_queue = queue.behind
39+
queue.behind = queue.behind.behind
40+
return get_queue
41+
else:
42+
print('队列里已经没有元素了')
43+
44+
def print_queue(queue):
45+
print(queue)
46+
if queue.behind is not None:
47+
print_queue(queue.behind)
48+
49+
queue = create_queue()
50+
push(queue,1)
51+
push(queue,2)
52+
push(queue,3)
53+
push(queue,4)
54+
print_queue(queue)
55+
print(pop(queue))
56+
print(pop(queue))
57+
print(pop(queue))
58+
print(pop(queue))
59+
print(pop(queue))

Diff for: DataStructure/stack.py

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class MyStack(object):
2+
def __init__(self, value=None):
3+
self.value = value
4+
# 前驱
5+
self.before = None
6+
# 后继
7+
self.behind = None
8+
9+
def __str__(self):
10+
if self.value is not None:
11+
return str(self.value)
12+
else:
13+
return 'None'
14+
15+
16+
def top(stack):
17+
if isinstance(stack, MyStack):
18+
if stack.behind is not None:
19+
return top(stack.behind)
20+
else:
21+
return stack
22+
23+
24+
def push(stack, ele):
25+
push_ele = MyStack(ele)
26+
if isinstance(stack, MyStack):
27+
stack_top = top(stack)
28+
push_ele.before = stack_top
29+
push_ele.before.behind = push_ele
30+
31+
32+
33+
def pop(stack):
34+
if isinstance(stack, MyStack):
35+
stack_top = top(stack)
36+
if stack_top.before is not None:
37+
stack_top.before.behind = None
38+
stack_top.behind = None
39+
return stack_top
40+
else:
41+
print('已经是栈顶了')

Diff for: README.md

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Python Algorithm
22
用Python实现各种算法
3+
## 数据结构
4+
- 数组(Array)
5+
- 堆栈(Stack)
6+
- 队列(Queue)
7+
- 链表(Linked List)
8+
- 树(Tree)
9+
- 图(Graph)
10+
- 堆(Heap)
11+
- 散列表(Hash)
12+
313
## 排序算法
414

515
- 冒泡排序
@@ -15,4 +25,6 @@
1525

1626
- 顺序查找
1727
- 二分查找
18-
- Hash查找
28+
- 二叉查找树
29+
- 深度优先算法
30+
- 广度优先算法

Diff for: Sort/test_sort.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
from unittest import TestCase
22

33

4-
def get_random_arr(max_num, len, is_int=False):
4+
def get_random_arr(max_num, length, is_int=False):
55
"""生成随机序列"""
66
import random
77
if is_int:
88
return [int(random.uniform(0, 5000)) for x in range(1000)]
99
else:
10-
return [random.uniform(0, max_num) for x in range(len)]
10+
return [random.uniform(0, max_num) for x in range(length)]
1111

1212

1313
def create_arr_list():

0 commit comments

Comments
 (0)