Python栈的链表实现以及栈来实现浏览器的前进后退功能

  • 栈的链表实现
'''
	用无头节点的单链表实现栈

	filename:link_stack.py
	Author by: Lofues
'''
class Node(object):
	def __init__(self,val : int):
		self.val = val
		self.next = None

class LinkedStack(object):
	def __init__(self):
		self.n = 0
		self.top = None

	def push(self,val : int):
		# 栈的插入操作:头插法
		new_node = Node(val)
		new_node.next = self.top
		self.top = new_node
		self.n += 1

	def pop(self) -> int:
		if self.empty():
			return None
		else:
			x = self.top.val
			self.n -= 1
			self.top = self.top.next
			return x

	def __len__(self) -> int:
		return self.n

	def empty(self) -> bool:
		return self.n == 0

	def __repr__(self):
		cur = self.top
		result = []
		while cur:
			result.append(cur.val)
			cur = cur.next
		return '->'.join(str(x) for x in result)

def main():
	ls = LinkedStack()
	for i in range(10):
		ls.push(i)
	print(ls,len(ls))
	print(ls.pop())
	print(ls)
	print(len(ls))


if __name__ == '__main__':
	main()
  • 浏览器的浏览前进后退功能实现
'''
	用链表栈实现浏览器浏览的前进和倒退功能:

	使用两个栈X和Y来分别实现前进和后退功能,首先将浏览过的页面一次性的压入到X栈中;
	当需要倒退操作时,将X栈顶的页面压入到Y栈,当需要前进操作时,将Y栈顶的页面压入到X栈;
	当X栈没有元素时不能再进行倒退操作,当Y栈没有元素时不能再进行前进操作。

	Author by:Lofues
'''
import sys
# 向系统路径中加入link_stack文件
sys.path.append('link_stack.py')
from link_stack import LinkedStack

class Browser(object):
	def __init__(self):
		# 注意forward变量的名字不要与类函数的名字相同
		self._forward = LinkedStack()
		self._back = LinkedStack() 

	def open(self,url : str):
		print('open page:{}'.format(url))
		self._back.push(url)

	def can_forward(self) -> bool:
		return False if self._forward.empty() else True

	def can_back(self) -> bool:
		return False if self._back.empty() else True

	def back(self) -> str:
		if not self.can_back():
			print('you can not go back')
			return None
		else:
			url = self._back.top.val
			self._forward.push(self._back.pop())
			print('you go back to the {} page'.format(url))
			return url

	def forward(self) -> str:
		if not self.can_forward():
			print('you can not go forward')
			return None
		else:
			url = self._forward.top.val
			self._back.push(self._forward.pop())
			print('you go forward to the {} page'.format(url))
			return url

def main():
	b = Browser()
	b.open('a')
	b.open('b')
	b.open('c')
	for i in range(4):
		print(b.back())
	print(b.forward())

if __name__ == '__main__':
	main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值