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()

 

posted @ 2017-07-11 16:16  cn_XuYang  阅读(262)  评论(0编辑  收藏  举报