python--栈的顺序存储和链式存储

栈stack操作:后进先出,只允许在一短进行插入删除操作,
顺序存储为顺序栈,sequential stack有栈满数组溢出问题,
链式存储linked stack没有设置头结点,data+next 栈底结点next域为null。

class SeqStack(object):
	def __init__(self,size):
		self.top = -1
		self.max_size =  size
		self.data = [None for _ in range(size)]

	def isEmpty(self):
		print self.top == -1
	def getLength(self):
		print self.top + 1

	def push(self,element):
		if self.top + 1 == self.max_size:
			print 'stack is full!'
		else:
			self.top = self.top + 1
			self.data[self.top] = element
 #pop the top element,and stack length - 1
	def pop(self):
		if self.top == -1:
			print 'stack is empty!'
		else:
			self.top = self.top  -1
			print self.data[self.top + 1]
#show the pop element
	def get_pop(self):
		if self.top == -1:
			print 'stack is empty!'
		else:
			print self.data[self.top]

	def init_stack(self):
		data = input('please input the element,enter # end:')
		while data != '#':
			self.push(data)
			data = input('please input the element,enter # end:')

	def show_stack(self):
		index = self.top
		store = []
		while index >= 0 :
			store.append(self.data[index])
			index  = index - 1
		print store

if __name__ == '__main__':
	stack = SeqStack(10)
	#stack.isEmpty()
	#stack.getLength()
	stack.init_stack()
	stack.show_stack()
	stack.push('one')
	stack.push('two')
	stack.getLength()
	stack.show_stack()
	stack.get_pop()
	stack.pop()
	stack.show_stack()

输出:
please input the element,enter # end:1
please input the element,enter # end:2
please input the element,enter # end:3
please input the element,enter # end:’#’
[3, 2, 1]
5
[‘two’, ‘one’, 3, 2, 1]
two
two
[‘one’, 3, 2, 1]

class Node(object):
	def __init__(self,data):
		self.data = data
		self.next = None

class LinkStack(object):
	def __init__(self):
		self.top = Node(None)
		self.num = 0

	def isEmpty(self):
		print self.num == 0

	def getLength(self):
		print self.num

	def get_pop(self):
		print self.top.data

	def push(self,element):
		temp = Node(element)
		if self.num == 0:
			self.top = temp
		else:
			temp.next = self.top
			self.top = temp
		self.num = self.num + 1

	def pop(self):
		if self.num == 0:
			print 'stack is empty!'
		else:
			self.num = self.num - 1
			old_top = self.top
			old_top_data = old_top.data
			self.top = old_top.next
			print old_top_data

	def init_stack(self):
		data = input('please input the element,enter # end:')
		while data != '#':
			self.push(data)
			data = input('please input the element,enter # end:')

	def show_stack(self):
		if self.num == 0:
			print 'stack is null !'
		else:
			count = self.num
			temp = self.top
			store = []
			while count > 0:
				store.append(temp.data)
				temp = temp.next
				count  = count - 1
			print store


if __name__ == '__main__':
	stack = LinkStack()
	stack.isEmpty()
	stack.getLength()
	stack.init_stack()
	stack.show_stack()
	stack.push('end')
	stack.getLength()
	stack.show_stack()
	stack.get_pop()
	stack.pop()
	stack.show_stack()

输出:
True
0
please input the element,enter # end:1
please input the element,enter # end:2
please input the element,enter # end:3
please input the element,enter # end:4
please input the element,enter # end:5
please input the element,enter # end:’#’
[5, 4, 3, 2, 1]
6
[‘end’, 5, 4, 3, 2, 1]
end
end
[5, 4, 3, 2, 1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值