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,21 @@
1
+ from .linkedlist import (
2
+ Node,
3
+ jianl,
4
+ x_hebing,
5
+ jiangxu,
6
+ cha_j,
7
+ max_a,
8
+ y_d_n_z,
9
+ show,
10
+ )
11
+
12
+ __all__ = [
13
+ "Node",
14
+ "jianl",
15
+ "x_hebing",
16
+ "jiangxu",
17
+ "cha_j",
18
+ "max_a",
19
+ "y_d_n_z",
20
+ "show",
21
+ ]
@@ -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,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ linkedlist_mjs