分隔符匹配:java
棧一般用於解析某種類型的文本串,一般,文本串是用於計算機語言寫的代碼行,而解析它們的程序就是編譯器。數組
check()調用看StackX2類。指針
主程序中從用戶那裏不間斷讀取問本行,把文本字符串做爲參數建立一個BracketCHecker對象,而後調用這個BracketChecker對象的check()方法。若是出現任何錯誤,check()方法將顯示出來,不然分隔符的語法是正確的。code
check()方法能報告出現不匹配分隔符的位置。對象
棧的效率,數據項入棧和出棧的時間複雜度爲常數O(1),棧操做所耗的時間不依賴於棧中數據項的個數。隊列
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class StackX2 { private int maxSize; private char[] stackArray; private int top; public StackX2(int s) { maxSize = s; stackArray = new char[maxSize]; top = -1; } public void push(char j) { stackArray[++top] = j; } public char pop() { return stackArray[top--]; } public char peek() { return stackArray[top]; } public boolean isEmpty() { return (top == -1); } } class BracketChecker { private String input; public BracketChecker(String in) { input = in; } public void check() { int stackSize = input.length(); StackX2 theStack = new StackX2(stackSize); for(int j=0;j<input.length();j++) { char ch = input.charAt(j); switch(ch) { case '{': case '[': case '(': theStack.push(ch); break; case '}': case ']': case ')': if(!theStack.isEmpty()) { char chx = theStack.pop(); if((ch=='}'&&chx!='{') || (ch==']'&&chx!='[') || (ch==')'&&chx!='(')) System.out.println("error:" + ch + "at" + j); } else System.out.println("error:" + ch + "at" + j); break; default: break; } } if(!theStack.isEmpty()) System.out.println("error:missing"); } } class BracketsApp { public static void main(String[] args) throws IOException { String input; while(true) { System.out.print("enter string containing delimiters: "); System.out.flush(); input = getString(); if(input.equals(" ")) break; BracketChecker theChecker = new BracketChecker(input); theChecker.check(); } } private static String getString() throws IOException { // TODO Auto-generated method stub InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String s = br.readLine(); return s; } }
enter string containing delimiters: enter string containing delimiters: f{fklkfla(ff[d]} error:}at15 error:missing enter string containing delimiters: enter string containing delimiters: a{b(c]d}e error:]at5 enter string containing delimiters:
隊列:rem
採用先進先出,先存入的數據先被讀出。字符串
插入:get
隊頭+1,隊尾不變input
刪除:
隊尾+1,隊頭不變
循環隊列:
避免隊列不滿但不能插入新的數據,能夠讓隊頭隊尾指針繞回數組開始的位置。
class Queue { private int maxSize; private long[] queArray; private int front; private int rear; private int nElems; public Queue(int s) { maxSize = s; queArray = new long[maxSize]; front = 0; rear = -1; nElems = 0; } public void insert(long j) { if(rear == maxSize - 1); rear = -1; queArray[++rear] = j; nElems++; } public long remove() { long temp = queArray[front++]; if(front == maxSize) front = 0; nElems--; return temp; } public long peekFront() { return queArray[front]; } public boolean isEmpty() { return (nElems==0); } public boolean isFull() { return (nElems==maxSize); } public int size() { return nElems; } } class QueueApp { public static void main(String[] args) { Queue theQueue = new Queue(5); theQueue.insert(10); theQueue.insert(11); theQueue.insert(12); theQueue.insert(14); theQueue.remove(); theQueue.remove(); theQueue.remove(); theQueue.insert(77); theQueue.insert(88); theQueue.insert(99); theQueue.insert(77777); while(!theQueue.isEmpty()) { long n = theQueue.remove(); System.out.println(n); System.out.println(" "); } System.out.println(" "); } }