栈及其应用

栈先进后出,实现比较简单,只操作栈顶:
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数据结构和算法中文第二版》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值