java数据结构中栈怎么应用
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本篇内容主要讲解"java数据结构中栈怎么应用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java数据结构中栈怎么应用"吧!1.声明一个栈接口SStac
千家信息网最后更新 2025年01月16日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) { SeqStackstack = 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) { SeqStackstack = 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安全错误
数据库的锁怎样保障安全
文件存放位置不是共享服务器
襄阳华为服务器
数据库如何分页
邯郸数据库安全审计
关于网络安全的漫画人物
红领巾广播站网络安全
安阳外卖app软件开发方案
软件开发想转入金融行业
师生如何应对网络安全怎么办
杭州追云软件开发有限公司
中小型企业的服务器
饥荒专用服务器需要开着电脑吗
公司网络安全总体规划
青岛培训软件开发团队
都市之互联网科技帝国免费
学习哪种网络技术可自由赚钱
c 获取服务器ip地址
sql数据库怎么分离
管理软件开发项目 微盘
网络安全教育主题班会内容博客
软件运维和数据库运维
数据库物理图
局域网可以做ftp服务器吗
网络安全方向博士就业
郑州交友软件开发哪家好
在日本用什么安全软件开发
网络安全与数据安全的关系
服务器托管机房
数据库高级技术员工资
网络安全你我共建手抄报图片