0x1、链栈简介
链栈
与 次序栈
相同都是 LIFO(先进先出)
,仅仅它是 链式结构
的。
链式 → 链表? 是的,链栈常用 单链表 表明,而栈的入栈和出栈都在 栈顶
进行,较好的处理方法是把栈顶放在 单链表的头部
,而单链表的 头指针
指向表的 第一个结点
,so?直接把头指针作为 栈顶指针
,不就好了。
链栈的数据结构示意图leetcode和牛客网差异如下:
Tips:链栈与次序栈比较,一个比较明显的优点是 一般不会呈现栈满
的情况。
0x2、LeetCode底子操作代码完结
和次序栈相同简测验郁闷症单,五个底子操作:初始化栈、入栈、出栈、清空栈,获取元素个数,紧记栈顶进出原则,完好leetcode是干什么的完结代码如下:
public class LinkedStacapp装置下载k {
public int size; // 栈中元素个数
public StackNode topNode; // 栈顶指针
/**
* 初始化链栈
* */
public void initSt数据结构与算法ack() {
topNodleetcode中文官网e = new StackNode(null);
size = 0;
}
/**
* 入栈
* */
public boolean pu数据结构题库及答案sh(StackNode node) {
node.next = topNode;
topNode = node;
size++;
returappearancen true;
}
/**
* 出栈
* */
public StackNode pop() {
if(sappearize < 0) return n数据结构在计算机内存中的表明是指ull;
StackNode temp =数据结构课程设计 topNapproveode;
topNode = topNode.next;
size--;
return temp;
}
/**
* 清空栈
* */
public void clearStack() {
topNode = null;
size = 0;
}
/**
* 遍历栈
* */
public void traverse测验郁闷程度的问卷Stack(Funappointmentction<StackNode, Voleetcode是啥id> visit) {
StackNode temp = topNode;
for (in数据结构c语言版t i = 0;i < sizeapp装置下载; i++) {
visit.apply(temp);
temp = temp.next;
}
}
}
测验代码如下:
public class LinkedSta数据结构包括哪三方面ckTest {
public static void main(String[] args) {
LinkedStack stack = new LinkedStack();
stack.initStack();
for (int i = 1;i < 11;i++) stack.push数据结构难学吗(new StackNode(i));
System.out.print("批量入栈后:");
stack.traverseStack(node -> {
System.out.print(node.value + " → ");
return null;
});
System.测验工程师out.println();
for (int i = 0; i < 5; i++) {
StackNode node = sta数据结构知识点总结ck.pop();
if(数据结构c语言版node != null) System.oapplicationut.println("当时出栈结点:" + node.value);测验纸一般多少天能测出来
}
System.out.print("批量出栈后:");
stack.traverseStack(node -> {
System.out.测验郁闷程度的问卷print(node.value + " → ");
return nullapplication;
});
}
}
工作效果如leetcode和牛客网差异下图所示:
0x3、链栈经典例子——有approach用的括号数据结构包括哪三方面
1.问题描绘
给定一个只包括 ‘(‘,’)’,'{‘,’}’,'[‘,’]’的字符串,判别字符串是否有用。有用字符串需满意:
- 左括号有必要用相同类型的右括号闭合。
- 左括号有必要以正确的次序闭合。
- 留神空字符串可被认为是有用字符串。
题源:leetcode-cn.comapp装置下载/problems/va…
2.解题思路
一个左括号后可跟:一个左括号 或 与它对应的右括号,如:( 后只能跟 { [,或许 )
正确的次序闭合和栈堕入后出的特色刚好共同,遇到左括号入栈,遇到右括号出栈匹配 即可leetcode官网。
3.代码完结
public class ValidParenthese测验网速s {
public sta数据结构课程设计tic void main(String[] args) {
System.out.p测验用例rintln(analy测验怀孕的试纸图片一深一浅sis("([])"));
System.out.println(analysis("()()"));
System.out.pleetcode是干什么的rintln(analysis("([)]"));
System.out.println(analysis("()[}{)"));
}
public static boolean analysis(String content) {
LinkedStack stack = new LinkedStack();
stack.initStack();
for (int ileetcode和牛客网差异 = 0; i < content.length(); i++) {
chAPPa测验纸一般多少天能测出来r c = content.charAt(i);
if (c == 'leetcode每日一题(' || c == '[' || c == '{')leetcode是干什么的 {
stack.push(new StackNode(c));
} else if (c == ')' || c == ']' || c == '}') {
switch (stack.pop().vaappearancelue) {
case '(':
if (c != ')') return false;
break;
case '[':
if (c != ']') return false;
break;
case '{':
if (c != '}') return false;
break;
}
}
}APP
return true;
}
}
工作效果如下图所示:
本文正在参加「 2021 春招闯关活动」, 点数据结构题库及答案击查看 活动概略