java数据结构中栈怎么应用
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"java数据结构中栈怎么应用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java数据结构中栈怎么应用"吧!1.声明一个栈接口SStac
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
科技平台互联网
智能科技公司是互联网公司吗
互联网科技的发展
浩特互联网科技
科技创新互联网企业
有木互联网科技
唐信互联网科技 大连
成都仁贤领冠互联网科技有限公司
荆州市昕露互联网络科技有限公司
移动互联网科技公司
华夏恒生互联网科技013171
互联网行业科技股
中和天地互联网科技有限公司
无锡工业互联网科技有限公司
科技互联网海报
四川互联网展示科技馆设计
宇信科技在杭州互联网排第几
济南小医互联网科技有限公司招聘
广西泛欧互联网科技有限公司
广东猫王互联网科技有限公司电话
互联网金融科技
互联网扶贫科技
互联网下的科技发展
丰台科技园 互联网公司
创业天下互联网科技有限公司
亳州好赞互联网科技有限公司
上海京穆互联网科技有限公司
广东鹅鹅鹅互联网科技有限公司
兰石爱特工业互联网科技分公司
中国互联网公司的科技投入