python一道关于堆栈的题

来源:互联网 发布:移动宽带网络参数设置 编辑:程序博客网 时间:2024/06/08 09:27

题目

利用列表来模拟堆栈。什么是堆栈?堆栈是一种执行”后进先出”算法的数据结构。在这里利用列表来模拟堆栈。

def push(char1, L):    L.insert(0, char1)    print(L)def pop(y, L):    if len(L) == 0:        print('Cannot pop from an empty list!')    else:        for i in range(int(y)):            delete = L.pop(i-i)            print(delete)L = []char = input('请输入要测试的字符串:    ')for i in range(len(char)):    char1 = char[i]    push(char1, L)for i, album in enumerate(L):    print(i, album)y = input('请输入想删除的字母的个数:    ')pop(y, L)print('经过删除后的列表为:    ', L) 

在这里需要注意几点。首先是在插入时利用了L.insert(0, char1),为什么要这样用。我们知道堆栈是”后进先出”即”先进后出”因此最先出现的字母我们要把它放到后面,对于新来的字母我们利用L.insert(0, char1)把它放到列表的最前面。其次,在删除元素时要注意元素的下标,因为我们要删除列表中最前面的字母即下标为0的字母。因此我们在删除中要用delete= L.pop(i-i)在这里的循环中的i只能用来控制次数,不能当做下标!为什么?因为i开始等于0所以说我们第一次删除的时列表中最前面的元素,单进行第二次循环时i=1,此时删除的并不是最前面的元素而是最前面元素的后一个元素。因此要用i-i控制下。

请输入要测试的字符串:    abcd['a']['b', 'a']['c', 'b', 'a']['d', 'c', 'b', 'a']0 d1 c2 b3 a请输入想删除的字母的个数:    4dcba经过删除后的列表为:     []请输入要测试的字符串:    abcd['a']['b', 'a']['c', 'b', 'a']['d', 'c', 'b', 'a']0 d1 c2 b3 a请输入想删除的字母的个数:    2dc经过删除后的列表为:     ['b', 'a']