一、栈的定义
栈是一种先进后出(FILO: First In Last Out,)的线性结构,即压栈和弹栈均在栈的尾部完成。
压栈:即栈添加成员,在栈的尾部完成
弹栈:即栈删除成员,在栈的尾部完成
在创建栈时,如果以数组的数据结构为基础时,以数组的尾部为栈的尾部;
在创建栈时,如果以链表的数据结构为基础时,以链表的头部为栈的尾部;
二、栈的功能成员函数
push(): 在栈的尾部添加成员
pop(): 在栈的尾部删除成员
top(): 返回栈的头部成员
is_Empty(): 检测栈是否为空,若为空,则返回True, 否则返回False
length(): 返回栈的成员数量
travel(): 遍历栈的所有成员
三、Python实现
(1)以数组为数据结构
class stack_list():
def __init__(self, nums=[]):
self._array = nums
def is_Empty(self):
if not self._array:
return True
else:
return False
def length(self):
return len(self._array)
def top(self):
return self._array[-1]
def push(self, num):
self._array.append(num)
def pop(self):
return self._array.pop()
def travel(self):
print(self._array)
(2)以链表为数据结构
class Node():
def __init__(self, value):
self._value = value
self._next = None
# stack based on linkedlist
class stack_linkedlist():
def __init__(self):
self._head = None
def is_Empty(self):
return self._head == None
def length(self):
if self.is_Empty():
return 0
else:
count = 1
cur = self._head
while cur._next != None:
count += 1
cur = cur._next
return count
def push(self, num):
node = Node(num)
node._next = self._head
self._head = node
def pop(self):
node = self._head
self._head = self._head._next
return node._value
def top(self):
return self._head._value
def travel(self):
_list = []
cur = self._head
while cur != None:
_list.append(cur._value)
cur = cur._next
print(_list)