linkedlist-mjs 0.1.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
#初始化一个节点(数据域+指针域)
|
|
2
|
+
class Node:
|
|
3
|
+
|
|
4
|
+
def __init__(self, val=None, next=None):
|
|
5
|
+
self.val = val # 数据域
|
|
6
|
+
self.next = None
|
|
7
|
+
|
|
8
|
+
#新建一个有序列表,j是第一个节点值,也就是首元节点,n是接单个数
|
|
9
|
+
def jianl(j,n):
|
|
10
|
+
tou=None
|
|
11
|
+
p=None #临时漂移指针
|
|
12
|
+
for i in range(j,n+1):
|
|
13
|
+
new_data=Node(i)
|
|
14
|
+
if tou==None:
|
|
15
|
+
tou=new_data
|
|
16
|
+
p=new_data
|
|
17
|
+
else:
|
|
18
|
+
p.next=new_data
|
|
19
|
+
p=p.next
|
|
20
|
+
|
|
21
|
+
return tou
|
|
22
|
+
|
|
23
|
+
#在两个列表中同时顺序取值比较,运用去优秀链表,无序列表无法排序(q是链表1,w是链表2,s参数是正序或逆序参数)
|
|
24
|
+
def x_hebing(q, w,s):
|
|
25
|
+
if q is None:
|
|
26
|
+
return w
|
|
27
|
+
if w is None:
|
|
28
|
+
return q
|
|
29
|
+
|
|
30
|
+
if s == "a": #正序表头
|
|
31
|
+
if q.val <= w.val:
|
|
32
|
+
head = q
|
|
33
|
+
q = q.next
|
|
34
|
+
else:
|
|
35
|
+
head = w; w = w.next
|
|
36
|
+
elif s == "c": #逆序表头
|
|
37
|
+
if q.val >= w.val:
|
|
38
|
+
head = q
|
|
39
|
+
q = q.next
|
|
40
|
+
else:
|
|
41
|
+
head = w; w = w.next
|
|
42
|
+
|
|
43
|
+
h = head #临时漂移指针
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
while q and w:
|
|
48
|
+
if s == "a": # 升序
|
|
49
|
+
if q.val < w.val:
|
|
50
|
+
h.next = q
|
|
51
|
+
q = q.next
|
|
52
|
+
elif q.val > w.val:
|
|
53
|
+
h.next = w
|
|
54
|
+
w = w.next
|
|
55
|
+
elif q.val == w.val:
|
|
56
|
+
h.next = q
|
|
57
|
+
q = q.next
|
|
58
|
+
w=w.next
|
|
59
|
+
elif s=="c": # 降序
|
|
60
|
+
if q.val > w.val:
|
|
61
|
+
h.next = q;
|
|
62
|
+
q = q.next
|
|
63
|
+
elif q.val < w.val:
|
|
64
|
+
h.next = w
|
|
65
|
+
w = w.next
|
|
66
|
+
else:
|
|
67
|
+
h.next = q
|
|
68
|
+
q = q.next
|
|
69
|
+
w = w.next
|
|
70
|
+
h = h.next
|
|
71
|
+
|
|
72
|
+
h.next = q if q else w
|
|
73
|
+
return head
|
|
74
|
+
#只用冒泡配许进行,通过元素的交换来实现排序(b_j:是标记是否交换的参数,x是辅助存储位置,max是较大元素位置 q1是临时漂移指针,q2是临时漂移指针的后继指针)
|
|
75
|
+
def jiangxu(q):
|
|
76
|
+
head=q
|
|
77
|
+
x=None
|
|
78
|
+
max=None
|
|
79
|
+
while q:
|
|
80
|
+
b_j=False
|
|
81
|
+
q1=head
|
|
82
|
+
while q1.next:
|
|
83
|
+
q2 = q1.next
|
|
84
|
+
if q1.val<q2.val:
|
|
85
|
+
x=q1.val
|
|
86
|
+
q1.val=q2.val
|
|
87
|
+
q2.val=x
|
|
88
|
+
b_j = True
|
|
89
|
+
|
|
90
|
+
q1 = q1.next
|
|
91
|
+
if not b_j:
|
|
92
|
+
break
|
|
93
|
+
return head
|
|
94
|
+
|
|
95
|
+
#先判断两个链表的长度的大小,在大的列表里面找小链表中的每个元素,返回去去想读后的两个连表,后再将两个链表进行拼接()
|
|
96
|
+
def cha_j(p,m):
|
|
97
|
+
if p is None:
|
|
98
|
+
return m
|
|
99
|
+
if m is None:
|
|
100
|
+
return p
|
|
101
|
+
|
|
102
|
+
j_s_p=0 #p表的长度计数
|
|
103
|
+
j_s_m=0 #m表的长度计数
|
|
104
|
+
j_s_p_1=0 #p表剔除与m表相同元素后的计数
|
|
105
|
+
j_s_m_1=0 #m表剔除与p表相同元素后的计数
|
|
106
|
+
x = None #用来存储较小链表(外循环)的元素值
|
|
107
|
+
y = None #用来存储相同链元素值
|
|
108
|
+
p_T=p #用来纪录p表
|
|
109
|
+
m_T=m #用来纪律m表
|
|
110
|
+
p_t=p #用来循环计数p表元素指针
|
|
111
|
+
m_t=m #用来循环计数m表元素指针
|
|
112
|
+
#计算p,m表的元素个数
|
|
113
|
+
while p_t != None:
|
|
114
|
+
p_t=p_t.next
|
|
115
|
+
j_s_p+=1
|
|
116
|
+
while m_t!=None:
|
|
117
|
+
m_t=m_t.next
|
|
118
|
+
j_s_m+=1
|
|
119
|
+
#p_b是临时漂移指针,用来循环遍历较小表,m0是当较长表中当前节点的前驱节点指针,初始值为none,m1是当前结点指针,m2是后继节点指针
|
|
120
|
+
if j_s_p<=j_s_m:
|
|
121
|
+
p_b=p_T
|
|
122
|
+
p0=None
|
|
123
|
+
while p_b != None:
|
|
124
|
+
x=p_b.val
|
|
125
|
+
p1=p_b
|
|
126
|
+
p2=p1.next
|
|
127
|
+
m1=m_T
|
|
128
|
+
m0=None
|
|
129
|
+
while m1 != None:
|
|
130
|
+
m2=m1.next
|
|
131
|
+
|
|
132
|
+
if x ==m1.val:
|
|
133
|
+
y=m1.val
|
|
134
|
+
#做相同节点在第一个结点、尾结点的处理
|
|
135
|
+
if m0 is None:
|
|
136
|
+
m_T=m2
|
|
137
|
+
else:
|
|
138
|
+
if m2 is not None:
|
|
139
|
+
m0.next=m2
|
|
140
|
+
else:
|
|
141
|
+
m0.next=None
|
|
142
|
+
# 删除这里错误的print("无相同元素")
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
else:
|
|
146
|
+
print("五相同元素")
|
|
147
|
+
m0 = m1
|
|
148
|
+
m1=m1.next
|
|
149
|
+
print(f"x={x},y={y}")
|
|
150
|
+
if x is y:
|
|
151
|
+
if p0 is None:
|
|
152
|
+
p_T = p2
|
|
153
|
+
else:
|
|
154
|
+
if p2 is not None:
|
|
155
|
+
p0.next = p2
|
|
156
|
+
else:
|
|
157
|
+
p0.next = None
|
|
158
|
+
else:
|
|
159
|
+
p0=p_b
|
|
160
|
+
|
|
161
|
+
p_b=p_b.next
|
|
162
|
+
#与上述一致,但不同与传入的p、m表中m表为较长表
|
|
163
|
+
else:
|
|
164
|
+
|
|
165
|
+
m_b=m_T
|
|
166
|
+
m0=None
|
|
167
|
+
while m_b!=None:
|
|
168
|
+
x=m_b.val
|
|
169
|
+
p1=p_T
|
|
170
|
+
p0=None
|
|
171
|
+
|
|
172
|
+
m1=m_b
|
|
173
|
+
m2=m1.next
|
|
174
|
+
|
|
175
|
+
while p1 != None:
|
|
176
|
+
p2=p1.next
|
|
177
|
+
|
|
178
|
+
if x ==p1.val:
|
|
179
|
+
y=p1.val
|
|
180
|
+
if p0 is None:
|
|
181
|
+
p_T=p2
|
|
182
|
+
else:
|
|
183
|
+
if p2 is not None:
|
|
184
|
+
p0.next=p2
|
|
185
|
+
else:
|
|
186
|
+
p0.next=None
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
else:
|
|
190
|
+
print("无相同元素")
|
|
191
|
+
p0=p1
|
|
192
|
+
p1=p1.next
|
|
193
|
+
if x == y:
|
|
194
|
+
if m0 is None:
|
|
195
|
+
m_T = m2
|
|
196
|
+
else:
|
|
197
|
+
if m2 is not None:
|
|
198
|
+
m0.next = m2
|
|
199
|
+
else:
|
|
200
|
+
m0.next = None
|
|
201
|
+
else:
|
|
202
|
+
m0=m_b
|
|
203
|
+
|
|
204
|
+
m_b=m_b.next
|
|
205
|
+
#用与计数,除去相同结点后的的p表和m表的长度,g_s是p、m表的非交集结点个数
|
|
206
|
+
p_T1=p_T
|
|
207
|
+
m_T1=m_T
|
|
208
|
+
while p_T1 != None:
|
|
209
|
+
p_T1=p_T1.next
|
|
210
|
+
j_s_p_1+=1
|
|
211
|
+
while m_T1!=None:
|
|
212
|
+
m_T1=m_T1.next
|
|
213
|
+
j_s_m_1+=1
|
|
214
|
+
g_s=j_s_p_1+j_s_m_1
|
|
215
|
+
return p_T,m_T,g_s
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
#用来求单链表中做大值结点,采用循环遍历比值x_head是标记头结点,p_y是临时漂移指针用来循环使用
|
|
219
|
+
def max_a(x):
|
|
220
|
+
x_head=x
|
|
221
|
+
max=x_head.val
|
|
222
|
+
p_y=x
|
|
223
|
+
if x==None:
|
|
224
|
+
print("列表为空")
|
|
225
|
+
else:
|
|
226
|
+
while p_y is not None:
|
|
227
|
+
if p_y.val>=max:
|
|
228
|
+
max=p_y.val
|
|
229
|
+
p_y=p_y.next
|
|
230
|
+
return max
|
|
231
|
+
|
|
232
|
+
#采用倒插法进行逆序:
|
|
233
|
+
#算法步骤:先标记一个空的头指针(head),然后循环遍历目标链表,每次将当前结点倒插入前面提点定义的头指针后面,也就是通过改变头结点来实现逆序
|
|
234
|
+
#p_y是临时漂移指针,p_q是当前结点的前驱结点指针,p_h是后记阵阵
|
|
235
|
+
def y_d_n_z(x):
|
|
236
|
+
|
|
237
|
+
head = None
|
|
238
|
+
p_y = x
|
|
239
|
+
if x == None:
|
|
240
|
+
print("列表为空")
|
|
241
|
+
else:
|
|
242
|
+
p_h = None
|
|
243
|
+
while p_y != None:
|
|
244
|
+
p_q=p_y.next #p_q是p_y的后继结点,避免链表断裂
|
|
245
|
+
p_y.next=p_h #将p_y结点指向head链表的首元结点
|
|
246
|
+
p_h=p_y #p_h是head表的首元结点指针,每次都指向head表第一个结点
|
|
247
|
+
head=p_y #插入p_y结点
|
|
248
|
+
p_y=p_q #p_y结点后移
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
return head
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
#打印函数,用来打印链表(cur是链表漂移指针)
|
|
260
|
+
def show(head):
|
|
261
|
+
cur = head
|
|
262
|
+
while cur:
|
|
263
|
+
print(cur.val, end=" -> ")
|
|
264
|
+
cur = cur.next
|
|
265
|
+
print("None")
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: linkedlist_mjs
|
|
3
|
+
Version: 0.1.3
|
|
4
|
+
Summary: 单链表工具库
|
|
5
|
+
Author-email: 马加帅 <mjs15587100713@qq.com>
|
|
6
|
+
Requires-Python: >=3.8
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
|
|
9
|
+
\# linkedlist-tools
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
一个简单的单链表工具库。
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
\## 安装
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
pip install linkedlist-tools
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
\## 使用
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
import linkedlist\_tools as llt
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
head = llt.jianl(1, 5)
|
|
34
|
+
|
|
35
|
+
llt.show(head)
|
|
36
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
linkedlist_mjs/__init__.py,sha256=EBxTYzE_Mlqhmq0BHDe4wao2HxbNxD_XIBK4TEdH_34,264
|
|
2
|
+
linkedlist_mjs/linkedlist.py,sha256=pY2TuC-HmCcqUM9A6BWQ6YE9asMlSK5TjFAJbQHTz4M,8123
|
|
3
|
+
linkedlist_mjs-0.1.3.dist-info/METADATA,sha256=7NoDG0angDaH_wTgSUOyRafTTD2xIWhkcyDjWRkCPOQ,432
|
|
4
|
+
linkedlist_mjs-0.1.3.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
5
|
+
linkedlist_mjs-0.1.3.dist-info/top_level.txt,sha256=DLEKvwaMsJ2CUwFisB0siUeYKQ-cFo7HDCoczc7kBBc,15
|
|
6
|
+
linkedlist_mjs-0.1.3.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
linkedlist_mjs
|