java数据结构中栈怎么应用
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"java数据结构中栈怎么应用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java数据结构中栈怎么应用"吧!1.声明一个栈接口SStac
千家信息网最后更新 2025年11月07日java数据结构中栈怎么应用
本篇内容主要讲解"java数据结构中栈怎么应用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java数据结构中栈怎么应用"吧!
1.声明一个栈接口SStack
package ch05; public interface SStack{ boolean isEmpty(); // 判断栈是否为空 void push(T x); // 元素x入栈 T pop(); // 出栈,返回栈顶元素 T peek(); // 返回栈顶元素,但不出栈}
2. 定义顺序栈类SeqStack
package ch05; public class SeqStackimplements SStack { Object[] element; int top; // 构造方法,创建一个空栈,存储容量大小size public SeqStack(int size){ element=new Object[size]; top=-1; } // 判断栈是否为空 @Override public boolean isEmpty() { return top==-1; } // 元素x入栈 @Override public void push(T x) { if (x==null){ return; } // 若栈满,则扩充栈容量 if (this.top==element.length-1){ Object[] temp=this.element; element=new Object[temp.length*2]; for (int i=0;i =0){ str="("; for (int i=top;i>=0;i--){ str+=element[i]+","; } str=str.substring(0,str.length()-1); str+=")"; }else {//空栈 str="()"; } return str; }}
3.定义结点类Node
package ch05; public class Node{ public T data; public Node next; public Node(T data, Node next) { this.data = data; this.next = next; } public Node(){ this(null,null); }}
4. 定义链式栈类LinkedStack
package ch05; public class LinkedStackimplements SStack { private Node top; public LinkedStack() { top=new Node<>(); } @Override public boolean isEmpty() { return top.next==null ? true:false; } @Override public void push(T x) { if (x==null){ return; } //生成新结点 Node q=new Node<>(x,null); q.next=top.next; top.next=q; } @Override public T pop() { T elem=null; if (top.next!=null){ elem=top.next.data; top.next=top.next.next; } return elem; } @Override public T peek() { T elem=null; if (top.next!=null){ elem=top.next.data; } return elem; } // 返回顺序栈中所有元素的描述字符串,形式为"(,)",覆盖Object类的toString()方法 public String toString(){ String str=""; Node p=top.next; if (p!=null){ str="("; while (p!=null){ str+=p.data+","; p=p.next; } str=str.substring(0,str.length()-1); str+=")"; }else { str="()"; } return str; }}
5.括号匹配
package ch07; import java.util.Scanner; public class Bracket { // 括号匹配 public static String isMatched(String infix) { SeqStack stack = new SeqStack(infix.length()); for (int i = 0; i < infix.length(); i++) { char ch = infix.charAt(i); switch (ch) { case '(': stack.push(ch); break; case ')': if (stack.isEmpty() || !stack.pop().equals('(')) { return "expect ("; } } } return stack.isEmpty() ? "" : "expect )"; } // 测试括号匹配算法 public static void main(String[] args) { // 括号匹配 Scanner r = new Scanner(System.in); System.out.print("输入括号表达式:"); String infix = r.nextLine(); System.out.println(isMatched(infix)); }} 6.表达式求值(后缀表达式):
package ch05; import java.util.Scanner; public class ExpressionPoland { // 括号匹配 public static String isMatched(String infix) { SeqStack stack = new SeqStack(infix.length()); for (int i = 0; i < infix.length(); i++) { char ch = infix.charAt(i); switch (ch) { case '(': stack.push(ch); break; case ')': if (stack.isEmpty() || !stack.pop().equals('(')) { return "expect ("; } } } return stack.isEmpty() ? "" : "expect )"; } // 将中缀表达式转换为后缀表达式 public static StringBuffer toPostfix(String infix){ SeqStack stack=new SeqStack(infix.length()); StringBuffer postfix=new StringBuffer(infix.length()*2); int i=0; System.out.println("\n求后缀表达式过程:"); System.out.println("字符"+"\tstack\t\tpostfix"); while(i='0' && ch<='9'){ // 获取运算的整数 postfix.append(ch); // 将数字追加到后缀表达式中 i++; if(i stack=new LinkedStack(); int value=0; System.out.println("\n计算过程:"); for(int i=0;i='0' && ch<='9'){ String s=""; while(ch!=' '){// 求运算数 s+=ch; i++; ch=postfix.charAt(i); } stack.push(Integer.parseInt(s)); // 将运算数入栈 }else{ if(ch!=' '){ int y=stack.pop(); // 第二个运算数 int x=stack.pop(); // 第一个运算数 switch(ch){ case '+': value=x+y; break; case '-': value=x-y; break; case '*': value=x*y; break; case '/': value=x/y; break; }//switch // 输出计算表达式 if(y>=0){ System.out.println(x+(ch+"")+y+"="+value); }else{ System.out.println(x+(ch+"")+"("+y+")"+"="+value); } // 计算结果入栈 stack.push(value); } } } return stack.pop(); // 返回栈中计算的最终结果 } // 测试表达式求值算法 public static void main(String[] args) { Scanner r=new Scanner(System.in); // 表达式求值 System.out.print("输入表达式:"); String infix = r.nextLine(); String match=isMatched(infix); if(match.equals("")){// 括号匹配 StringBuffer postfix=toPostfix(infix); System.out.println("\n后缀表达式:"+postfix); System.out.println("\n计算结果:"+toValue(postfix)); }else{// 括号不匹配 System.out.println("表达式错误:"+match); } }} 运行结果如下:

到此,相信大家对"java数据结构中栈怎么应用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
表达式
运算
字符
后缀
运算符
元素
括号
方法
数据
顺序
空格
结果
结点
数据结构
结构
应用
优先级
内容
字符串
容量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发外包合同模板6
metronic 数据库
计算机网络安全及防
bim软件开发上市公司
网站怎么挂上服务器
江苏数据软件开发设施参考价格
内部网络时钟服务器
雄安软件开发测试培训
数据库中的游标
惠普服务器raid驱动
我的世界最安全的服务器
学习软件开发技术去哪里读
人人美剧软件开发
将微信头像直接存入数据库
淳安软件开发文档
滁州哪个服务器最好
数据库三级样题
寿光网络技术
高拍仪直接传送到服务器
防溺水网络安全竞赛入口
服务器远程地址密码怎么管理
魔兽服务器大小有区别吗
山东嵊灿网络技术有限公司
如何找软件开发工程师
在服务器上怎么使用python
山东网络技术安全大赛
建模软件开发哪家强
linux认证服务器搭建
无尽服务器号
外国网站连接不上服务器