Python 实现栈与队列
#基于Python2.7
#基于顺序表实现
#发现用Python写题时,没有像写C++时方便的STL可用,不过查阅资料之后发现用class实现也很简洁,不过效率应该不是很高
Python实现栈并使用:
1 class SStack(): 2 def __init__(self): 3 self._elems=[] 4 def is_empty(self): 5 return self._elems==[] 6 def top(self): 7 #if self._elems==[]: 8 # raise StackUnderflow("in SStack.top()") 9 return self._elems[-1] 10 def push(self,e): 11 self._elems.append(e) 12 def pop(self): 13 #if self._elems==[]: 14 # raise StackUnderflow("in SStack.pop()") 15 return self._elems.pop() 16 S=SStack() 17 for i in range(3): 18 S.push(i) 19 while not S.is_empty(): 20 temp=S.top() 21 print temp 22 S.pop()
Python实现队列并使用:
1 class SQueue(): 2 def __init__(self,init_len=8): 3 self._len=init_len 4 self._elems=[0]*init_len 5 self._head=0 6 self._num=0 7 def is_empty(self): 8 return self._num==0 9 def peek(self): 10 #if self._num==0: 11 # raise QueueUnderflow 12 return self._elems[self._head] 13 def dequeue(self): 14 #if self._num==0: 15 # raise QueueUnderflow 16 e=self._elems[self._head] 17 self._head=(self._head+1)%self._len 18 self._num-=1 19 return e 20 def enqueue(self,e): 21 if self._num==self._len: 22 self.__extend() 23 self._elems[(self._head+self._num)%self._len]=e 24 self._num+=1 25 def __extend(self): 26 old._len=self._len 27 self._len*=2 28 new_elems=[0]*self._len 29 for i in range(old_len): 30 new_elems[i]=self._elems[(self._head+i)%old_len] 31 self._elems,self._head=new_elems,0 32 Q=SQueue() 33 for i in range(5): 34 Q.enqueue(i) 35 while not Q.is_empty(): 36 print Q.dequeue() 37 Q.peek()