问答题 1.  实现一个栈的数据结构,使其具有以下方法:压栈、弹栈、取栈顶元素、判断栈是否为空以及获取栈中元素个数。
【正确答案】栈的实现有两种方法,分别为采用数组来实现和采用链表来实现。下面分别详细介绍这两种方法。
   方法一:数组实现
   在采用数组来实现栈的时候,栈空间是一段连续的空间。实现思路如下图所示。
   

   从上图中可以看出,可以把数组的首元素当做栈底,同时记录栈中元素的个数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()
   方法二:链表实现
   在创建链表的时候经常采用一种从头结点插入新结点的方法,可以采用这种方法来实现栈,最好使用带头结点的链表,这样可以保证对每个结点的操作都是相同的,实现思路如下图所示。
   
【答案解析】[考点] 如何实现栈