【正确答案】栈的实现有两种方法,分别为采用数组来实现和采用链表来实现。下面分别详细介绍这两种方法。
方法一:数组实现 在采用数组来实现栈的时候,栈空间是一段连续的空间。实现思路如下图所示。
从上图中可以看出,可以把数组的首元素当做栈底,同时记录栈中元素的个数size,假设数组首地址为arr,从上图可以看出,压栈的操作其实是把待压栈的元素放到数组arr[size]中,然后执行size+操作;同理,弹栈操作其实是取数组arr[size-1]元素,然后执行size-操作。根据这个原理可以非常容易实现栈,示例代码如下:
class MyStack:
# 模拟栈
def __init__(self):
self.items=[]
#撑判断栈是否为空
def isEmpty(self):
return len(self.items)==0
# 返回栈的大小
def size(self):
return len(self.items)
#返回栈顶元素
def top(self):
if not self.isEmpty():
return elf.items[len(self.items)-1]
else:
return None
#弹栈
def pop(self):
if len(self.items)>0:
return self.items.pop()
else:
print "栈已经为空"
return None
#压栈
def push(self,item):
self.items.append(item)
if __name__=="__main__":
s=MyStack()
s.push(4)
print "栈顶元素为:"+str(s.top())
print "栈大小为:"+str(s.size())
s.pop()
prmt "弹栈成功"
s.pop()
方法二:链表实现 在创建链表的时候经常采用一种从头结点插入新结点的方法,可以采用这种方法来实现栈,最好使用带头结点的链表,这样可以保证对每个结点的操作都是相同的,实现思路如下图所示。
【答案解析】[考点] 如何实现栈