日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数据结构(java语言描述)顺序栈的使用

發(fā)布時(shí)間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构(java语言描述)顺序栈的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.聲明Istack接口;

package stack;
public interface Istack {
?? ?public void clear();
?? ?public boolean isEmpty();
?? ?public int length();
?? ?public Object peek();
?? ?public void push(Object x) throws Exception;
?? ?public Object pop();
}

2.實(shí)現(xiàn)棧的類(lèi)

package stack;
public class sqstack implements Istack {//非抽象類(lèi)要實(shí)現(xiàn)接口的所有方法
?? ?private Object[] data;
?? ?private int top;
?? ?public sqstack(int maxsize){//初始化一個(gè)最大存儲(chǔ)空間為maxsize大小棧
?? ??? ?top=0;
?? ??? ?data=new Object[maxsize];
?? ?}
?? ?//清空棧
?? ?public void clear(){
?? ??? ?top=0;
?? ?}
?? ?//判空
?? ?public boolean isEmpty(){
?? ??? ?return top==0?true:false;
?? ?}
?? ?//返回棧的長(zhǎng)度
?? ?public int length(){
?? ??? ?return top;
?? ?}
?? ?//返回棧頂元素
?? ?public Object peek(){//當(dāng)方法定義返回值為某個(gè)類(lèi)型時(shí),方法中要返回某個(gè)值或者null(0 1/true false)
?? ??? ?if(!isEmpty()){
?? ??? ??? ?return data[top-1];
?? ??? ?}else{
?? ??? ??? ?return null;
?? ??? ?}
?? ?}
?? ?//入棧操作
?? ?public void push(Object x) throws Exception{
?? ??? ?if(top==data.length)
?? ??? ??? ?throw new Exception("棧已滿(mǎn)!");
?? ??? ?else
?? ??? ??? ?data[top++]=x;
?? ?}
?? ?public Object pop(){
?? ??? ?if(isEmpty())
?? ??? ??? ?return null;
?? ??? ?else
?? ??? ??? ?return data[--top];//出棧,同是top--
?? ?}
}

3.算法

package stack;
import java.util.Scanner;
public class st1 {
?? ?/**********************************************************
?? ? * *****分配符匹配問(wèn)題:編寫(xiě)java語(yǔ)句中分隔符是否匹配的程序*********
?? ? **********************************************************/
?? ?private final int left=0;
?? ?private final int right=1;
?? ?private final int other=2;
?? ?//判斷輸入的分隔符的類(lèi)型(左、右、其它)
?? ?public int verifyFlag(String str){
?? ??? ?if("(".equals(str)||"[".equals(str)||"{".equals(str)||"/*".equals(str))
?? ??? ??? ?return left;
?? ??? ?else if(")".equals(str)||"]".equals(str)||"}".equals(str)||"*/".equals(str))
?? ??? ??? ?return right;
?? ??? ?else
?? ??? ??? ?return other;
?? ?}
?? ?//列舉正確的幾種匹配規(guī)則,完成匹配
?? ?public boolean matches(String str1,String str2){
?? ??? ?if(("(".equals(str1)&&")".equals(str2))||("[".equals(str1)&&"]".equals(str2))
?? ??? ??? ??? ?||("{".equals(str1)&&"}".equals(str2))||("/*".equals(str1)&&"*/".equals(str2)))
?? ??? ??? ?return true;
?? ??? ?else
?? ??? ??? ?return false;
?? ?}
?? ?//判斷輸入的字符串是否合法
?? ?private boolean isLegal(String str)throws Exception{
?? ??? ?if(!"".equals(str)&&str!=null){//如果輸入的字符串不是空串,也不在串尾
?? ??? ??? ?sqstack s=new sqstack(100);
?? ??? ??? ?int length=str.length();//返回字符串的長(zhǎng)度
?? ??? ??? ?for(int i=0;i<length;i++){//對(duì)輸入的字符串進(jìn)行遍歷
?? ??? ??? ??? ?char c=str.charAt(i);
?? ??? ??? ??? ?String t=String.valueOf(c);
?? ??? ??? ??? ?//判斷str中是否有/* 或*/存在,若存在則作為一個(gè)字符串
?? ??? ??? ??? ?if(i!=length){
?? ??? ??? ??? ??? ? if(('/'==c&&'*'==str.charAt(i+1))||
?? ??? ??? ??? ??? ??? ??? ? '*'==c&&'/'==str.charAt(i+1)){
?? ??? ??? ??? ??? ??? ??? ??? ? t=t.concat(String.valueOf(str.charAt(i+1)));
?? ??? ??? ??? ??? ??? ??? ??? ? ++i;
?? ??? ??? ??? ??? ??? ??? ? }
?? ??? ??? ??? ?}
?? ??? ??? ??? ?//將分割后的所有字符串分別與左、右、其它三種符號(hào)比較
?? ??? ??? ??? ?if(left==verifyFlag(t)){
?? ??? ??? ??? ??? ?s.push(t);//字符串時(shí)左則入棧
?? ??? ??? ??? ?}else if(right==verifyFlag(t)){
?? ??? ??? ??? ??? ?if(s.isEmpty()||!matches(s.pop().toString(),t)){//是右則判斷棧是否為空或者棧頂元素是否與該字符串匹配
?? ??? ??? ??? ??? ??? ?//System.out.println("!matches(s.pop().toString(),t):"+!matches(s.pop().toString(),t));
?? ??? ??? ??? ??? ??? ?throw new Exception("錯(cuò)誤:java語(yǔ)法不合法!");//不能匹配則拋出異常
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}//for循環(huán)遍歷整個(gè)java語(yǔ)句
?? ??? ??? ?
?? ??? ??? ?if(!s.isEmpty()){//匹配結(jié)束,若棧不為空則str有誤,拋出異常
?? ??? ??? ??? ?throw new Exception("錯(cuò)誤:java語(yǔ)句不合法!");
?? ??? ??? ??? ?
?? ??? ??? ?}//
?? ??? ??? ?
?? ??? ??? ?return true;
?? ??? ?}else{//大if 判斷str ("".equals(str)||str=null)語(yǔ)句為空
?? ??? ??? ?throw new Exception("錯(cuò)誤:java語(yǔ)句為空!");
?? ??? ?}
}
?? ?public static void main(String[] args) throws Exception{
?? ??? ?st1 e=new st1();
?? ??? ?System.out.println("請(qǐng)輸入分java語(yǔ)句:");
?? ??? ?Scanner sc=new Scanner(System.in);
?? ??? ?if(e.isLegal(sc.nextLine()))
?? ??? ??? ?System.out.println("java語(yǔ)句合法");
?? ??? ?else
?? ??? ??? ?System.out.println("錯(cuò)誤:java語(yǔ)句不合法!");
?? ?}
}

轉(zhuǎn)載于:https://www.cnblogs.com/xleer/p/5289661.html

總結(jié)

以上是生活随笔為你收集整理的数据结构(java语言描述)顺序栈的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。