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

来源:互联网 发布:数据挖掘 神经网络 编辑:程序博客网 时间:2024/06/05 01:54
剧情提要:
阿伟看到了一本比较有趣的书,是关于《计算几何》的,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>


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

0 0