1. 基于线性表的实现
# 栈的顺序表实现
# 1 是否空 2 是否满 3 压入 4弹出 5 查询最顶元素
class St_list:
def __init__(self,max_):
self.max=max_
self.elems=[None]*self.max
self.top=-1
def is_empty(self):
return self.top==-1
def is_full(self):
return self.top==self.max-1
def push(self,elem):
if not self.is_full():
self.elems[self.top]=elem
self.top+=1
else:
print("st is full")
def pop(self):
if not self.is_empty():
self.top -= 1
ans=self.elems[self.top]
return ans
else:
print("超出引索")
2. 基于链表的实现
from Llist import *
class St_clist:
def __init__(self,max_=10):
self.top=-1
self.max=max_
self.list=Linklist()
def is_empty(self):
return self.top==-1
def is_full(self):
return self.top==self.max-1
def push(self,elem):
if not self.is_full():
self.list.append(elem)
self.top += 1
else:
print("堆栈已满")
def pop(self):
if not self.is_empty():
ans=self.list.delete(self.list.length-1)
self.top -= 1
return ans
else:
print("堆栈已空")
3.栈 API
class St_list:
# [ ] 的 左边是栈口
def __init__(self,max_):
self.max=max_
self.elems=[None]*self.max
self.top=-1
def is_empty(self):
return self.top==-1
def is_full(self):
return self.top==self.max-1
def push(self,elem):
if not self.is_full():
self.top+=1
self.elems[self.top]=elem
else:
print("栈已满")
def pop(self):
if not self.is_empty():
ans=self.elems[self.top]
self.elems[self.top] = None
self.top -= 1
return ans
else:
print("栈已空!")
def traversal(self):
return self.elems
# API提供: 设计栈的深度 查看是否栈空 查看栈满 压入栈 出栈 遍历栈