[从头学数学] 第247节 Python实现数据结构:栈

剧情提要:
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。


正剧开始:
星历2016年07月25日 10:50:44, 银河系厄尔斯星球中华帝国江南行省。

[工程师阿伟]正在和[机器小伟]一起研究[计算几何]]。






<span style="font-size:18px;">###
# @usage   栈
# @author  mw
# @date    2016年07月25日  星期一  10:51:53 
# @param
# @return
#
###       
class Stack:
    def info(self):  
        s = '[';  
        for x in self:  
            s+=repr(x)+', ';  

        if (len(s) > 2):
            s = s[:-2]+']';            
        else:
            s += ']';
        print(s);
          
  
    def __len__(self):  
        return len(self.items);  
          
    def __iter__(self):  
        for i in range(len(self.items)):              
            yield self.items[i];
            
    #初始化
    def __init__(self):
        self.items = []
        
    def pop(self):
        if self.isEmpty():
            raise RuntimeError("Attempt to pop an empty stack")
        topIdx = len(self.items)-1
        item = self.items[topIdx]
        del self.items[topIdx]
        return item
    
    def push(self,item):
        self.items.append(item)
        
    def top(self):
        if self.isEmpty():
            raise RuntimeError("Attempt to get top of empty stack")
        topIdx = len(self.items)-1
        return self.items[topIdx]
    
    def isEmpty(self):
        return len(self.items) == 0

    def find(self, item, start = 0):
        for i in range(start, len(self.items)):
            if (self.items[i] == item):
                return i;

        return -1;

    def __contains__(self, item):
        for i in range(len(self.items)):
            if (self.items[i] == item):
                return True;

        return False;     
</span>


用例:

<span style="font-size:18px;">def main():
    #计时开始
    startTime = time.clock();

    s = Stack()
    lst = list(range(10))
    lst2 = []
    for k in lst:
        s.push(k)
    if s.top() == 9:
        print("Test 1 Passed")
    else:
        print("Test 1 Failed")

    s.info();
    if 5 in s:
        print('In');

    if 100 in s:
        print('In');

    pos = s.find(3);
    print(pos);

    pos = s.find(1000);
    print(pos);

    
    while not s.isEmpty():
        lst2.append(s.pop())
    lst2.reverse()
    if lst2 != lst:
        print("Test 2 Failed")
    else:
        print("Test 2 Passed")

    try:
        s.pop()
        print("Test 3 Failed")
    except RuntimeError:
        print("Test 3 Passed")
    except:
        print("Test 3 Failed")
        
    try:
        s.top()
        print("Test 4 Failed")
    except RuntimeError:
        print("Test 4 Passed")
    except:
        print("Test 4 Failed")

    s.info();
    s.push(100);
    s.info();
    print(len(s));
    
    
    #计时结束
    endTime = time.clock();

    #打印结果
    print('操作用时:{0:.3e} s'.format(endTime-startTime));</span>


本节到此结束,欲知后事如何,请看下回分解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值