栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。
由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放 。。
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放。
5、程序代码区—存放函数体的二进制代码。
不懂可以参考一下连接
栈结构实现
栈可以用顺序表实现,也可以用链表实现。
栈的操作
Stack() 创建一个新的空栈
push(item) 添加一个新的元素item到栈顶
pop() 弹出栈顶元素
peek() 返回栈顶元素
is_empty() 判断栈是否为空
size() 返回栈的元素个数
1 classStack(object):2 """栈"""
3 def __init__(self):4 self.items =[]5
6 defis_empty(self):7 """判断是否为空"""
8 return self.items ==[]9
10 defpush(self, item):11 """加入元素"""
12 self.items.append(item)13
14 defpop(self):15 """弹出元素"""
16 returnself.items.pop()17
18 defpeek(self):19 """返回栈顶元素"""
20 return self.items[len(self.items)-1]21
22 defsize(self):23 """返回栈的大小"""
24 returnlen(self.items)25 if __name__ == "__main__":26 stack =Stack()27 stack.push("hello")28 stack.push("world")29 stack.push("itcast")30 printstack.size()31 printstack.peek()32 printstack.pop()33 printstack.pop()34 print stack.pop()
代码结构
利用python中列表的方法实现数据结构中堆栈的“后进先出”的性质
列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。
用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的pop()方法可以把一个元素从堆栈顶释放出来。例如:
>>> stack = [1, 2, 3]>>> stack.append(4)>>> stack.append(5)>>>stack
[1, 2, 3, 4, 5]>>>stack.pop()5
>>>stack
[1, 2, 3, 4]>>>stack.pop()4
>>>stack.pop()3
>>>stack
[1, 2]
实例