java数据结构中栈怎么应用

java数据结构中栈怎么应用

本篇内容主要讲解“java数据结构中栈怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java数据结构中栈怎么应用”吧!

1.声明一个栈接口SStack

packagech05;publicinterfaceSStack{booleanisEmpty();//判断栈是否为空voidpush(Tx);//元素x入栈Tpop();//出栈,返回栈顶元素Tpeek();//返回栈顶元素,但不出栈}

2.定义顺序栈类SeqStack,包括数据元素的对象数组和栈顶元素下标两个私有成员变量,构造方法可实例化容量为size大小的空顺序栈,调用类中成员方法实现顺序栈的入栈、出栈、获取栈顶元素等操作,重写toString()方法获取顺序栈的字符串描述。

packagech05;publicclassSeqStackimplementsSStack{Object[]element;inttop;//构造方法,创建一个空栈,存储容量大小sizepublicSeqStack(intsize){element=newObject[size];top=-1;}//判断栈是否为空@OverridepublicbooleanisEmpty(){returntop==-1;}//元素x入栈@Overridepublicvoidpush(Tx){if(x==null){return;}//若栈满,则扩充栈容量if(this.top==element.length-1){Object[]temp=this.element;element=newObject[temp.length*2];for(inti=0;i=0){str="(";for(inti=top;i>=0;i--){str+=element[i]+",";}str=str.substring(0,str.length()-1);str+=")";}else{//空栈str="()";}returnstr;}}

3.定义结点类Node,包括数据域和地址域两个成员变量,构造方法实例化结点,重写toString()方法获取结点的字符串描述。

packagech05;publicclassNode{publicTdata;publicNodenext;publicNode(Tdata,Nodenext){this.data=data;this.next=next;}publicNode(){this(null,null);}}

4.定义链式栈类LinkedStack

packagech05;publicclassLinkedStackimplementsSStack{privateNodetop;publicLinkedStack(){top=newNode<>();}@OverridepublicbooleanisEmpty(){returntop.next==null?true:false;}@Overridepublicvoidpush(Tx){if(x==null){return;}//生成新结点Nodeq=newNode<>(x,null);q.next=top.next;top.next=q;}@OverridepublicTpop(){Telem=null;if(top.next!=null){elem=top.next.data;top.next=top.next.next;}returnelem;}@OverridepublicTpeek(){Telem=null;if(top.next!=null){elem=top.next.data;}returnelem;}//返回顺序栈中所有元素的描述字符串,形式为"(,)",覆盖Object类的toString()方法publicStringtoString(){Stringstr="";Nodep=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="()";}returnstr;}}

5.括号匹配

packagech07;importjava.util.Scanner;publicclassBracket{//括号匹配publicstaticStringisMatched(Stringinfix){SeqStackstack=newSeqStack(infix.length());for(inti=0;i

6.表达式求值(后缀表达式):

packagech05;importjava.util.Scanner;publicclassExpressionPoland{//括号匹配publicstaticStringisMatched(Stringinfix){SeqStackstack=newSeqStack(infix.length());for(inti=0;istack=newSeqStack(infix.length());StringBufferpostfix=newStringBuffer(infix.length()*2);inti=0;System.out.println("\n求后缀表达式过程:");System.out.println("字符"+"\tstack\t\tpostfix");while(i='0'&&ch<='9'){//获取运算的整数postfix.append(ch);//将数字追加到后缀表达式中i++;if(istack=newLinkedStack();intvalue=0;System.out.println("\n计算过程:");for(inti=0;i='0'&&ch<='9'){Strings="";while(ch!=''){//求运算数s+=ch;i++;ch=postfix.charAt(i);}stack.push(Integer.parseInt(s));//将运算数入栈}else{if(ch!=''){inty=stack.pop();//第二个运算数intx=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);}}}returnstack.pop();//返回栈中计算的最终结果}//测试表达式求值算法publicstaticvoidmain(String[]args){Scannerr=newScanner(System.in);//表达式求值System.out.print("输入表达式:");Stringinfix=r.nextLine();Stringmatch=isMatched(infix);if(match.equals("")){//括号匹配StringBufferpostfix=toPostfix(infix);System.out.println("\n后缀表达式:"+postfix);System.out.println("\n计算结果:"+toValue(postfix));}else{//括号不匹配System.out.println("表达式错误:"+match);}}}

运行结果如下:

到此,相信大家对“java数据结构中栈怎么应用”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

发布于 2021-12-22 21:54:45
分享
海报
36
上一篇:JavaScript中this指向问题怎么理解 下一篇:Java中的Object.getClass()怎么使用

推荐阅读

忘记密码?

图形验证码