本章我们介绍有关栈的知识,栈的重点在于顺序存储,链式存储及其特点。 1.栈的基本概念 (1)栈的定义 栈是只允许在一端进行插入和删除的线性表。有一个栈顶和栈底。栈顶是允许插入和删除的那一端,栈底是不允许插入和删除的那一端。如果一个栈不包括任何元素,就是一个空表也就是空栈。 栈的特点是先进先出。 (2 ...
分类:
其他好文 时间:
2020-09-17 17:51:55
阅读次数:
21
一. 问题 给定一个含有 n 个元素的序列 A,将序列中的元素逆转。 二. 思路 在前一篇文章中,我选择用用临时变量,来进行前后元素交换。这种算法的时间复杂度是 O( n ),空间复杂度是 O( 1 )(因为用到了有限个临时变量)。现在我们考虑一种新的算法:用一个栈来读入序列中的元素,再将栈中元素弹 ...
分类:
编程语言 时间:
2020-09-11 14:14:25
阅读次数:
40
题目描述 输入一个链表,输出该链表中倒数第k个结点。 解题思路: 这个题目也延续了剑指offer题目当中信息不给全的传统,其中代码当中的第一个参数head表示链表的表头Node,k表示的是一个数字。我们只需要遍历所有Node,将这些Node放进一个栈当中即可(用列表来代替栈),然后找到栈当中的倒数第 ...
分类:
其他好文 时间:
2020-08-13 22:15:19
阅读次数:
52
阅读目录 栈 stack 队列 链表 数组 字典实现原理 NSDictionary 树 B-tree/B+tree 栈 stack 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,把另一端称为栈底。向一个栈插入新元素又称作 进栈、入栈或压 ...
分类:
其他好文 时间:
2020-08-06 16:59:20
阅读次数:
67
@ 前言 在最开始讲解JVM内存结构的时候有简单分析过方法的执行原理——每一次方法调用都会生成一个栈帧并压入栈中,方法链的执行就是一个个栈帧弹出栈的过程,本篇就从字节码层面详细分析方法的调用细节。 正文 解析 Java中方法的调用对应字节码有5条指令: invokestatic:用于调用静态方法。 ...
分类:
其他好文 时间:
2020-08-06 00:56:51
阅读次数:
87
题意:给一个长度为$n$的序列$a_i$和一个数$k$。 现在把$a$序列重复$k$次生成一个数列$b$,然后从第一位开始往一个栈中加入$b_i$ 。 如果这个栈里存在元素与$b_i$相等那么一直pop直到把那个数弹掉然后不加入新数;否则push$b_i$入栈。求全部操作完之后栈中的元素。 $n \ ...
分类:
其他好文 时间:
2020-07-29 09:56:37
阅读次数:
60
思路: 中序:左->根->右 1.需要一个建立一个栈,首先将左子树放入栈中 2.获取栈顶元素并进行节点判断是否有右子树 3. 代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode ...
分类:
其他好文 时间:
2020-07-27 23:50:51
阅读次数:
62
1.栈的基础使用,js中数组直接可以作为栈使用,栈遵循先进后出的原则,即js可以使用push()和pop() 比较容易的实现一个栈 20. 有效的括号给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 ...
分类:
编程语言 时间:
2020-07-27 09:34:28
阅读次数:
84
代码: #include <iostream>#include <stack>using namespace std; int g_a_r_l_e(stack<int>&stackdata)//取栈顶元素并在栈中将其删除; //注意这里转引用,如果不传引用每次递归会传入不同的stack,这样会出现错 ...
分类:
其他好文 时间:
2020-07-26 01:27:13
阅读次数:
62