栈先进后出,实现比较简单,只操作栈顶:
应用1:反转字符:
应用2:校验格式
注:以上代码均出自《Java数据结构和算法中文第二版》
class StackX
{
private final int maxSize;
private final char[] stackArray;
private int top;
public StackX(int ms)
{
maxSize = ms;
stackArray = new char[maxSize];
top = -1;
}
public void push(char item)
{
stackArray[++top] = item;
}
public char pop()
{
return stackArray[top--];
}
public char peak()
{
return stackArray[top];
}
public boolean isEmpty()
{
return (top == -1);
}
public boolean isFull()
{
return (top == maxSize - 1);
}
}
应用1:反转字符:
class Reverse
{
private final String input;
private String output;
Reverse(String in)
{
input = in;
}
/**
* 反转字符
*
* @return String
*/
public String doReverse()
{
int stackSize = input.length();
StackX stackX = new StackX(stackSize);
for(int i = 0; i < input.length(); i++)
{
char chin = input.charAt(i);
stackX.push(chin);
}
output = "";
while (!stackX.isEmpty())
{
char chout = stackX.pop();
output = output + chout;
}
return output;
}
}
应用2:校验格式
class BracketChecker
{
private final String input;
BracketChecker(String in)
{
input = in;
}
/**
* 校验格式
*
* @return String
*/
public void check()
{
int stackSize = input.length();
StackX stackX = new StackX(stackSize);
for(int i = 0; i < input.length(); i++)
{
char chin = input.charAt(i);
switch(chin)
{
case '{':
case '[':
case '(':
stackX.push(chin);
break;
case '}':
case ')':
case ']':
if(!stackX.isEmpty())
{//表达式不匹配
char chpop = stackX.pop();
if((chin == '}' && chpop != '{') || (chin == ']' && chpop != '[') || (chin == ')' && chpop != '('))
{
System.out.println("ERROR RIGHT1 COMPLETE AT " + i);
}
}
else
{ //只有右扣号,没有左扣号
System.out.println("ERROR RIGHT HAVE NOT COMPLETE " + i);
}
break;
default:
break;
}
}
if(!stackX.isEmpty())
{
System.out.println("ERROR HAVE NOT RIGHT ");
}
}
}
注:以上代码均出自《Java数据结构和算法中文第二版》