package DataStructure_5_Stack;
import java.util.Stack;
public class StackUtil {
/*
* ����ջ�е�Ԫ����Integer����ջ����ջ���ǣ� 5,4,3,2,1 ���ø÷�����ջ����ջ���� 1,2,3,4,5
* ע�⣺ ֻ��ʹ�� Stack�Ļ�����������push,pop,peek,isEmpty
*/
public static void reverse(Stack s){
if(s.isEmpty()){ return; }
int length = s.size();
Object []temp = new Object[length];
for(int i = 0; i < length; i++){
temp[i] = s.pop();
}
for(int i = 0; i < length; i++){
s.push(temp[i]);
}
return;
}
/*
* ɾ��ջ��ָ��Ԫ�أ�ע�⣺ֻ��ʹ��Stack�Ļ�����������push,pop,peek,isEmpty
*
*/
public static void remove(Stack s, Object o){
int length = s.size();
Object elementTemp;
System.out.println(length);
int count = 0;
Object []temp = new Object[length];
if(s.isEmpty()){ return; }
for(int i = 0; i < length;i++){
elementTemp = s.pop();
if(!o.equals(elementTemp)){
temp[count++] = elementTemp;
System.out.println(temp[i]);
}
}
for(int i = count-1; i >= 0; i--){
s.push(temp[i]);
}
return;
}
/*
* ��ջ��ȡ��len��Ԫ�أ�ԭ��ջ�е�Ԫ�ر��ֲ���
* @param len
* @return
*/
public static Object[] getTop(Stack s , int len){
if(s.isEmpty() || len > s.size() || len < 0){
return null;
}
Object []result = new Object[len];
for(int i = 0; i < len; i++){
result[i] = s.pop();
}
return result;
}
/*
* �ַ��� s ���ܰ�����Щ�ַ��� () [] {}, a, b, c ... x, y, z
* ʹ�ö�ջ����ַ��� s �е������Dz��dzɶԳ��ֵ�
* ���磺 s = ��([e{d}f])��,����ַ����е������dzɶԳ��ֵģ��÷������� true
* ����� s = "([b{x]})",����ַ����е����Ų��dzɶԳ��ֵģ��÷��� ���� false
* @param s
* @return
*/
public static boolean isValidPairs(String s){
Stack stack = new Stack();
System.out.println(stack.isEmpty());
char elementTemp;
boolean tag = false;
char [] a = s.toCharArray();
for(int i = 0; i < a.length; i++){
if((!tag) && (a[i] == '(' || a[i] == ')' || a[i] == '[' || a[i] == ']' || a[i] == '{' || a[i] == '}')){
stack.push(a[i]);
tag = true;
}else{
if(a[i] == '(' || a[i] == ')' || a[i] == '[' || a[i] == ']' || a[i] == '{' || a[i] == '}'){
elementTemp = (char) stack.pop();
switch(elementTemp){
case '(': if(a[i]==')'){}else{ stack.push(elementTemp); stack.push(a[i]); }; break;
case '[': if(a[i]==']'){}else{ stack.push(elementTemp); stack.push(a[i]); }; break;
case '{': if(a[i]=='}'){}else{ stack.push(elementTemp); stack.push(a[i]); }; break;
}
}
}
}
if(stack.isEmpty()){
return true;
}
return false;
}
}