添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

学习Leetcode-有效的括号。
数据结构中的栈,特性为后入先出。最后进入栈的元素将位于栈顶。
栈有两个基础操作,pop和push。Push将元素压到栈顶,pop将栈顶元素从栈弹出。

使用python进行栈操作
如果我们把一个python列表看作一个栈,且列表末尾为栈顶。那么我们可以使用list.append来为实现push操作(为栈顶添加元素)。使用内置的pop函数来弹出栈顶元素。

基本思路:每遇到一个左括号就将其压入栈,每遇到一个右括号就和栈顶元素匹配,如果匹配成功则栈顶元素弹出。判断结果为:当循环完成时,栈为空,则返回True,否则返回False。

def isValid(s: str) -> bool:
    pairs = {
        ")": "(",
        "]": "[",
        "}": "{",
stack = []
for i in range(len(s)):
    if s[i] in pairs:
        if not stack or stack[-1] != pairs[s[i]]:
            return False
        stack.pop()
    else:
        stack.append(s[i])
if not stack:
    return True
else:
    return False
可以实现为一个数组,总是从数组的一端插入和删除元素。这一端被称为顶。在x86-64中,程序存放在内存中某个区域。顶元素的地址是所有中元素地址中最低的。(根据惯例,我们的是倒过来画的,“顶”在图的底部。)指针%rsp保存着顶元素的地址。
PUSHQ与...
                                    Heap.js
 JavaScript / TypeScript的高效二进制堆(优先级队列,二进制树)数据结构。
 包括JavaScript方法,Python的heapq模块方法和Java的PriorityQueue方法。
 易于使用,已知接口,经过测试并有据可查JavaScript二进制堆库。
 默认情况下,实例为integer min heap 。
它比对数组排序更快吗?
 这取决于您的使用情况,但是在某些情况下,它要快得多:
 heap vs array: push + pop/unshift 50
	heap  x 72,130 ops/sec ±0.50% (93 runs samp
将字符的循环/环形缓冲区实现为 C 扩展的 python 扩展。 它无声地覆盖。
目前,pyringbuf 可在或通过pip install pyringbuf 。 因为这是一个 C 扩展,所以有一个编译步骤,所以你的系统需要能够为 python 编译扩展模块。
>>> from ringbuf import RingBuffer
>>> R = RingBuffer(5)    #choose your buffer size
>>> R.push("a")          #push a single character into the buffer
>>> R.pop()              #pop a single character
>>> R.write("bcdef")     #fill buffer with many cha
                                    root@1.2.3.4# python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
                                    1、push是什么?(推进)
push就是推,延伸为推进。这个它是汇编的一个指令,(在其它语言中也可能会见到它)。意思都是差不多的,就是把一个元素放入中。你可以假想是一个放光盘的那种盒子,有底没盖,先push进去的光盘总是要等后push进去的出来后才能出来。
进 push()
入:在顶(数组的尾部)添加指定的元素,并返回新数组的长度。
2、pop是什么?(弹出)
poppush相反,它的意思是弹出,就是从弹出一个元素,每次弹出的都是顶(光盘盒最上面那个,也就是最后放进去的那个)的那个元素
                                    只是简单的实现,没有对边界情况进行处理,大家可以自己处理一下,比如说为空时不得弹出,也可以设置一下的大小,当满了将会溢出。还有就是输入不为pushpop的情况,或者用户不想用固定的列表[1,2,3]作为进出的数据,也可以改写手动输入数据值。这只是提供一个简单的思路
                                    1.list
列表会将所有元素都放在一对中括号[ ]面,相邻元素之间用逗号,分隔,个数没有限制,可以存储整数、小数、字符串、列表、元组等任何类型的数据,并且同一个列表中元素的类型也可以不同。
1.1初始化
(1)使用 [ ] 直接创建列表:listname = [element1 , element2 , element3 , ... , elementn]
(2)使用 list() 函数创建列表。内置的函数 list(),使用它可以将其它数据类型转换为列表类型。
1.2访问方式
(1)按索引
 $ pushover -a <app> -u <user> -m <message>
$ pushover -A <app> -U <user> -m <message>
$ echo "message" | pushover -a <app> -u <user> -s <sound> -t <title>
 $ pushover -h
usage: pushover [-h] [-c CONFIG_FILE] [-v] [-u USER_NAME] [-U USER]
                [-a APP_NAME] [-A TOKEN] [-d DEVICE] [-p PRIORITY] [-l URL]
根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法;
	根据元素本身的值进行删除,可使用列表(list类型)提供的 remove() 方法;
	将列表中所有元素全部删除,可使用列表(list类型)提供的 clear() 方法。
del:根据索引值删除元素
del 是 Python 中的关键字,专门用来执...
如上图所示:也是有多个数据节点组成的,每个节点包含有数据域和指向下一个节点的指针域。并且每次的pushpop和判空都是操作的顶指针top。
中每个数据节点的定义:
class data_node{
public:
	data_node() :data(0), next(NULL){}//default constructer function
	data_nod...