else if (e=-')')//栈空返回false{ if (st.empty()) return false;if (st.peek()!='(') return false;//栈顶不匹配返回假st.pop();1if (e=='j')//栈空返回falsefif (st.empty()) return false;if (st.peek()!'[') return false;1/栈顶不匹配返回假st.pop();子if (e=='}')//栈空返回false{ if (st.empty()) return false;//栈顶不匹配返回假if (st.peek()!='{') return falsejst.pop();7i++;//继续遍历strAif (st.empty())return true;//栈空返回true//栈不空返回falseelse return false;子26/101
else { if (e==')') { if (st.empty()) return false; //栈空返回false if (st.peek()!='(') return false; //栈顶不匹配返回假 st.pop(); } if (e==']') { if (st.empty()) return false; //栈空返回false if (st.peek()!='[') return false; //栈顶不匹配返回假 st.pop(); } if (e=='}') { if (st.empty()) return false; //栈空返回false if (st.peek()!='{') return false; //栈顶不匹配返回假 st.pop(); } } i++; //继续遍历str } if (st.empty()) return true; //栈空返回true else return false; //栈不空返回false } 26/101
public static void main(string[] args)( System.out.println("测试1");String str="([)]";if(isMatch(str))System.out.println(str+"中括号是匹配的");elseSystem.out.println(str+"中括号不匹配");System.out.println("测试2");str="([)";if(isMatch(str))System.out.println(str+"中括号是匹配的");elseSystem.out.println(str+"中括号不匹配");测试1([)]中括号不匹配测试2(I)中括号是匹配的27/101
public static void main(String[] args) { System.out.println("测试1"); String str="([)]"; if (isMatch(str)) System.out.println(str+"中括号是匹配的"); else System.out.println(str+"中括号不匹配"); System.out.println("测试2"); str="([])"; if (isMatch(str)) System.out.println(str+"中括号是匹配的"); else System.out.println(str+"中括号不匹配"); } } 测试1 ([)]中括号不匹配 测试2 ([])中括号是匹配的 27/101
【例3.6】有1~n的n个元素,通过一个栈可以产生多种出栈序列,设计一个算法判断序列b是否得为一个合适的出栈序列,并给出操作过程。要求用相关数据进行测试。例如,n=512345,12354是合适的出栈序列。51234,45123不是合适的出栈序列。28/101
【例3.6】有1~n的n个元素,通过一个栈可以产生多种出栈序列,设 计一个算法判断序列b是否得为一个合适的出栈序列,并给出操作过程。要 求用相关数据进行测试。 例如,n=5 12345,12354是合适的出栈序列。 51234,45123不是合适的出栈序列。 28/101
解:用栈模拟。将进栈序列1~n存放到数组a中。判断a序列通过一个栈算是否得到出栈序列b。令i、分别遍历a、b数组(初始值均为の),反复执行以下操作直到a或者b数组遍历完:(1)若栈空,a进栈,++。(2)若栈不空,如果栈顶元素≠b[]],将a[订进栈,+。(3)否则,出栈一个元素,j++。简单地说就是当栈顶元素=b序列当前元素,出栈一次,否则将a序列的当前元素进栈。当该过程结束,再将栈中与b序列相同的元素依次出栈。如果b序列遍历完(j==n)说明b序列是合法的出栈序列,返回true,否则不是合法的出栈序列,返回false。29/101
解:用栈模拟。将进栈序列1~n存放到数组a中。判断a序列通过一个 栈算是否得到出栈序列b。 令i、j分别遍历a、b数组(初始值均为0),反复执行以下操作直到a 或者b数组遍历完: (1)若栈空,a[i]进栈,i++。 (2)若栈不空,如果栈顶元素≠b[j],将a[i]进栈,i++。 (3)否则,出栈一个元素,j++。 简单地说就是当栈顶元素=b序列当前元素,出栈一次,否则将a序列的 当前元素进栈。 当该过程结束,再将栈中与b序列相同的元素依次出栈。如果b序列遍 历完(j==n)说明b序列是合法的出栈序列,返回true,否则不是合法的 出栈序列,返回false。 29/101
用字符串op记录所有的栈操作。import java.util.*;public class Exam3 6(static String op="";public static boolean isSerial(int[] b) int i,j,n=b.length;Integer e;int [] a=new int[n];Sqstackclass<Integer>st=newSqstackclass<Integer>()for (i=o;i<n;i++)//将1~n放入数组a中a[i]=i+1;i=0; j=0;30/101
import java.util.*; public class Exam3_6 { static String op=""; public static boolean isSerial(int[] b) { int i,j,n=b.length; Integer e; int [] a=new int[n]; SqStackClass<Integer> st=new SqStackClass<Integer>(); for (i=0;i<n;i++) a[i]=i+1; //将1~n放入数组a中 i=0; j=0; 用字符串op记录所有的栈操作。 30/101