问题描述
编写一个类,从标准输入中读取一串包含"(" “)” “[” “]” “{” "}"的字符串,并使用栈来判定其中的括号是否配对完整。例如 “[()]{}{[()()] ()}”程序应该打印true,对于 [(]) 则打印false.
算法
1.将字符串转换为字符数组chars
2.利用for循环,将每一次读取到的字符chars[i]与(,[,{进行比较,若匹配,则将chars[i]压入栈中;否则,进入3.
3.将chars[i]与),],}进行比较。这里以)为例进行说明,若chars[i]=’)’,则与栈顶元素top进行比较,若栈顶元素为’(’,则匹配,将栈顶元素pop出;若栈顶元素不为‘(’,则不匹配,返回false,退出循环
4.当所有chars[i]都遍历完成,退出循环,返回true,证明括号全部匹配
代码实现
1.链表实现栈
ListStack.java
package cn.Day06_栈.demo2;
/**
* 链表实现栈
*/
public class ListStack<Item> {
private class Node{
//结点的嵌套类型
Item item;
Node next;
}
private Node first;//栈顶(最新添加的元素)
private int num;//栈中元素的数目
/**
* 判断栈是否为空
* @return 空:true 非空:false
*/
public boolean isEmpty(){
if (first==null){
return true;
}
return false;
}
/**
* 返回栈中元素的个数
* @return
*/
public int size(){
return num;
}
/**
* 入栈
*/
public void push(Item item){
Node oldfirst=first;
first=new Node();
first.item=item;
first.next=oldfirst;//新的元素指向旧的元素
num++;
}
/**
* 出栈
* @return 返回出栈元素的包含内容
*/
public Item