python实现单链表_python 实现单链表和走迷宫

python 实现单链表和走迷宫

2018年11月28日 08:47

1.Python实现单链表

"""

编写一个node的类实现,单链表

首节点值为none

"""

class ListNode:

def __init__(self, x,node = None):

self.data = x

self.next = node

class LinkList:

def __init__(self):

self.head = 0

def initlist(self,data):

self.head = ListNode(data[0])

p = self.head

for i in data[1:]:

node = ListNode(i)

p.next = node

p = p.next

def length(self):

p = self.head

len = 0

while p :

len += 1

p = p.next

return len

def is_empty(self):

if self.length() == 0:

return True

else:

return False

def clear(self):

self.head = 0

def append(self,val):

q = ListNode(val)

if self.head == 0:

self.head = q

else:

p = self.head

while p.next:

p = p.next

p.next = q

def insert(self,index,item):

if self.is_empty() or index < 0 or index > self.length():

print('LinkList index error')

return

if index == 0:

q = Node(item,self.head)

self.head = q

p = self.head

post = self.head

j = 0

while p.next !=0 and j < index:

post = p

p = p.next

j += 1

if index == j:

q = ListNode(item,p)

post.next = q

def deleter(self,index):

if self.is_empty() or index <0 or index >self.length():

print('LinkList index error.')

return

if index == 0:

q = self.head

self.head = q.next

p = self.head

post = self.head

j = 0

while p.next != 0 and j

post = p

p = p.next

j += 1

if index == j:

post.next = p.next

def index(self,value):

if self.is_empty():

print("LinkList is empty.")

return

p = self.head

i = 0

while p.next!= 0 and not p.data == value:

p = p.next

i += 1

if p.data ==value:

return i

else:

print('Not found!')

return -1

def get(self,index):

if self.is_empty() or index <0 or index >self.length():

print('LinkList index error.')

return

p = self.head

j = 0

while p.next != 0 and j

p = p.next

j += 1

if j == index:

return p.data

else:

print("Target is not exist.")

return None

def __getitem__(self, key):

if self.is_empty():

print('linklist is empty.')

return

elif key <0 or key > self.length():

print('the given key is error')

return

else:

return self.get(key)

def __setitem__(self, key, value):

if self.is_empty():

print('linklist is empty.')

return

elif key <0 or key > self.length():

print('the given key is error')

return

else:

self.delete(key)

return self.insert(key)

l = LinkList()

l.initlist([1,2,3])

print(l.get(2))

l.append(4)

print(l.get(3))

l.insert(2,50)

print(l.get(2))

l.deleter(2)

print(l.get(2))

print(l.index(3))

print(l[2])

2.Python解决走迷宫问题

"""

说明:0表示通道,1表示墙

从指定的初始点移动到目标地点,输出移动的坐标轨迹,

x 向下,y向上,如果没有出口,放回None

这个是基于栈的,先进后出,深度优先,路径有定义的方向决定

基于队列的好像比较难实现,广度优先,这个是输出最短路径

"""

li = [

[1,1,1,1,1,1,1,1,1],

[1,0,1,1,0,0,0,1,1],

[1,0,1,1,0,0,0,1,1],

[1,0,0,0,0,1,1,1,1],

[1,0,1,1,1,0,0,0,1],

[1,0,0,0,0,0,1,0,1],

[1,1,0,0,1,1,1,1,1],

[1,1,1,0,0,0,1,0,1],

[1,1,1,1,1,1,1,1,1]

]

#(x-1,y),(x,y+1),(x+1,y),(x,y-1)

def coord(point):

x,y = point

temp = [(x-1,y),(x,y+1),(x+1,y),(x,y-1)]

return temp

def maze(li,start_point,end_point):

curr_point = start_point

path_stack = [curr_point]

while path_stack:

flag = False

for next_point in coord(curr_point):

if li[next_point[0]][next_point[1]] == 0:

flag = True

li[curr_point[0]][curr_point[1]] = 2

curr_point = next_point

path_stack.append(curr_point)

if curr_point == end_point:

print('其中一个出口为:')

print(path_stack)

return

break

if not flag:

pa = path_stack.pop()

li[pa[0]][pa[1]] = 2

try:

curr_point = path_stack[-1]

except Exception as e:

print('对不起,没有出口')

return

if __name__ == '__main__':

maze(li,(1,1),(7,7))

作者: ming.zhong

阅读: 1167

评论: 1

点赞

收藏

关注

icon_weibo_24.png

wechat.png

本文版权归作者和此站共有,欢迎转载,但未经作者同意必须声明引用出处,且在文章页面明显位置给出原文连接。

评论

Nickname

Email

Comment

Submit

Cancel

a1.jpgming.zhong(2018-12-06 18:48:54)#1楼

超级厉害的!!回复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值