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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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.實現棧的類

package stack;
public class sqstack implements Istack {//非抽象類要實現接口的所有方法
?? ?private Object[] data;
?? ?private int top;
?? ?public sqstack(int maxsize){//初始化一個最大存儲空間為maxsize大小棧
?? ??? ?top=0;
?? ??? ?data=new Object[maxsize];
?? ?}
?? ?//清空棧
?? ?public void clear(){
?? ??? ?top=0;
?? ?}
?? ?//判空
?? ?public boolean isEmpty(){
?? ??? ?return top==0?true:false;
?? ?}
?? ?//返回棧的長度
?? ?public int length(){
?? ??? ?return top;
?? ?}
?? ?//返回棧頂元素
?? ?public Object peek(){//當方法定義返回值為某個類型時,方法中要返回某個值或者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("棧已滿!");
?? ??? ?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 {
?? ?/**********************************************************
?? ? * *****分配符匹配問題:編寫java語句中分隔符是否匹配的程序*********
?? ? **********************************************************/
?? ?private final int left=0;
?? ?private final int right=1;
?? ?private final int other=2;
?? ?//判斷輸入的分隔符的類型(左、右、其它)
?? ?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;
?? ?}
?? ?//列舉正確的幾種匹配規則,完成匹配
?? ?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();//返回字符串的長度
?? ??? ??? ?for(int i=0;i<length;i++){//對輸入的字符串進行遍歷
?? ??? ??? ??? ?char c=str.charAt(i);
?? ??? ??? ??? ?String t=String.valueOf(c);
?? ??? ??? ??? ?//判斷str中是否有/* 或*/存在,若存在則作為一個字符串
?? ??? ??? ??? ?if(i!=length){
?? ??? ??? ??? ??? ? if(('/'==c&&'*'==str.charAt(i+1))||
?? ??? ??? ??? ??? ??? ??? ? '*'==c&&'/'==str.charAt(i+1)){
?? ??? ??? ??? ??? ??? ??? ??? ? t=t.concat(String.valueOf(str.charAt(i+1)));
?? ??? ??? ??? ??? ??? ??? ??? ? ++i;
?? ??? ??? ??? ??? ??? ??? ? }
?? ??? ??? ??? ?}
?? ??? ??? ??? ?//將分割后的所有字符串分別與左、右、其它三種符號比較
?? ??? ??? ??? ?if(left==verifyFlag(t)){
?? ??? ??? ??? ??? ?s.push(t);//字符串時左則入棧
?? ??? ??? ??? ?}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("錯誤:java語法不合法!");//不能匹配則拋出異常
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}//for循環遍歷整個java語句
?? ??? ??? ?
?? ??? ??? ?if(!s.isEmpty()){//匹配結束,若棧不為空則str有誤,拋出異常
?? ??? ??? ??? ?throw new Exception("錯誤:java語句不合法!");
?? ??? ??? ??? ?
?? ??? ??? ?}//
?? ??? ??? ?
?? ??? ??? ?return true;
?? ??? ?}else{//大if 判斷str ("".equals(str)||str=null)語句為空
?? ??? ??? ?throw new Exception("錯誤:java語句為空!");
?? ??? ?}
}
?? ?public static void main(String[] args) throws Exception{
?? ??? ?st1 e=new st1();
?? ??? ?System.out.println("請輸入分java語句:");
?? ??? ?Scanner sc=new Scanner(System.in);
?? ??? ?if(e.isLegal(sc.nextLine()))
?? ??? ??? ?System.out.println("java語句合法");
?? ??? ?else
?? ??? ??? ?System.out.println("錯誤:java語句不合法!");
?? ?}
}

轉載于:https://www.cnblogs.com/xleer/p/5289661.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。