目录:

前言

1:栈

  1.1:栈的实现

  1.2:栈的应用:

    1.2.1:检验数学表达式的括号匹配

    1.2.2:将十进制数转化为任意进制

    1.2.3:后置表达式的生成及其计算

2:队列

  2.1:队列的实现

  2.2:队列的应用之囚徒问题

3:双端队列

  3.1:双端队列的实现

  3.2:双端队列的应用之回文检测

4:列表

  3.1:链表的实现

 

前言

  线性数据结构有四种:栈(stack),队列(queue),双端队列(deque),列表(list)

  线性数据结构就是一群数据的集合,数据的位置和其加入的先后顺序有关,并且由此将其看为有两端,头(top)与尾(rear)【其中认为头是最先加入的数据,尾是最后加入的数据】

 

一:栈(stack)

       1:栈的构造

         栈可以看成是堆盘子,只能从上端加入以及从上端取出,也就是只能从一端对其进行操作。对应到线形结构就是只能在尾部对其进行加入与删除的数据结构。简称LIFO(last in first out),即是后进先出。

         习惯上我们把栈尾部叫做栈顶(TOP),加入数据叫做压栈(push),删除叫做出栈(pop)

         要注意一点的是,此处的栈顶其实是list的队尾,理论上将两个top对应起来也是简单的,但是前面讲过list的insert(0,i)与pop(0)都是O(n)的操作,而末尾的append(i)与pop(i)都是O(1),故依旧选择后者。

 1 class Stack:
 2     def __init__(self,*args):
 3         self.cstack = []        #c:construct
 4         for i in args:
 5             self.cstack.append(i)
 6     def push(self,x):                #压栈
 7         self.cstack.append(x)
 8     def size(self):                #查看元素个数
 9         return len(self.cstack)
10     def pop(self):                #出栈
11         if self.size()>0:
12             return self.cstack.pop()
13         else:
14             print('Sorry, this is an empty stack')
15     def peek(self):                #检查栈顶元素是什么
16         if self.size()>0:
17             return self.cstack[len(self.cstack)-1]
18         else:
19             return 'empty stack'
栈的实现

相关文章: