用Python学习数据结构3--堆栈

一、概述

堆栈(Stack):先进后出(LIFO)的线性数据结构,对堆栈的插入和删除操作都只能在栈顶(top)进行

二、ADT

堆栈ADT(抽象数据类型)一般提供一下接口:

  • 创建堆栈 Stack()
  • 向栈顶插入项 push(item)
  • 返回栈顶的项,并从堆栈中删除该项 pop()
  • 清空堆栈 clear()
  • 判断堆栈是否为空 empty()
  • 返回堆栈中项的个数 size()
  • 返回栈顶的项 top()

    栈的调用过程及内部数据变化如下所示:

这里写图片描述

三、Python实现

stack.py的定义

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 29 21:50:25 2016
@author: Serana
"""

class Stack:

    def __init__(self):
        print("stack __init__")
        self.items=[]

    #获取指定位置元素值
    def __getitem__(self, i):
        return self.items[i]

    #修改是定位置元素值
    def __setitem__(self, i, v):
        self.items[i] = v

    #返回栈中元素个数
    def __len__(self):
        return self.size()

    #入栈
    def push(self,item):
        self.items.append(item)

   #弹出元素
    def pop(self):
        return self.items.pop()

    #返回栈中元素的个数
    def size(self):
        return len(self.items)

    #判断栈顶是否为空
    def empty(self):
        return self.size() == 0

    #返回栈顶元素
    def top(self):
        return self.items[self.size() - 1]

    #清空栈  
    def clear(self):
        del self.items[:]

测试文件 test.py 如下:

# -*- coding: utf-8 -*-

"""
Created on Sat Oct 29 21:50:25 2016

@author: Serana
"""

from stack import Stack

def test():
    s=Stack()
    s.push(1)
    s.push(2)
    s.push(3)   

    s.top()  #显示栈顶元素
    while not s.empty():
        print("正在弹出元素")
        print(s.pop())

    s.push(4)
    s.push(5)
    s.push(6)
    print(len(s))  
    print(s[1])
    print("清空栈")
    s.clear()
    print(s.size())

if __name__ == "__main__":
    test()

结果显示如下:
这里写图片描述

本文参考自:http://www.cnblogs.com/russellluo/p/3282563.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值