package 栈的应用.SqQueue_4.SqStack_4;
import java.util.Arrays;
public class SqStackClass<E> {
final int incapacity=10;
private int capacity;
public E data[];
public int top;
public SqStackClass()
{
data=(E[])new Object[incapacity];
top=-1;
capacity=incapacity;
}
public SqStackClass(int n)
{
data=(E[])new Object[n];
top=-1;
capacity=incapacity;
}
public boolean isEmpty()
{
return top==-1;
}
public void push(E t)
{
if(top==data.length-1)
throw new IllegalArgumentException("栈满");
top++;
data[top]=t;
}
public E pop()
{
if(top==-1)
throw new IllegalArgumentException("栈空");
E e=data[top];
top--;
return data[top+1];
//return e;
}
public E peek()
{
if(top==-1)
throw new IllegalArgumentException("栈空");
return data[top];
}
//public boolean isHuiWen(String s)
//{
// char[] c=s.toCharArray();
// for(char c1:c)
// {
// this.push(c1);
// }
//}
@Override
public String toString() {
return "SqStackClass [data=" + Arrays.toString(data) + "]";
}
}
package 栈的应用.SqQueue_4.SqStack_4;
public class SqstackDemo {
//static SqStackClass<String> stack=new SqStackClass<String>();
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="(1+5)+{}-[]";
String s2="(]";
String s3="(((";
String s4="))";
String s5="{123(5=7)}";
isMatch(s1);
isMatch(s2);
isMatch(s3);
isMatch(s4);
isMatch(s5);
}
static boolean isMatch(String s)
{ System.out.println("该字符串为:"+s);
String ss[]=s.split("");
SqStackClass<String> stack=new SqStackClass<String>();
for(String s1:ss)
{
if(s1.equals("(")||s1.equals("[")||s1.equals("{"))
{
stack.push(s1);
}
else {
if(s1.equals(")"))
{
if(stack.isEmpty())
{
System.out.println("No!不符合");
return false;
}
if(!stack.peek().equals("("))
{
System.out.println("No!不符合");
return false;
}
stack.pop();
}
if(s1.equals("]"))
{
if(stack.isEmpty())
{
System.out.println("No!不符合");
return false;
}
if(!stack.peek().equals("["))
{
System.out.println("No!不符合");
return false;
}
stack.pop();
}
if(s1.equals("}"))
{
if(stack.isEmpty())
{
System.out.println("No!不符合");
return false;
}
if(!stack.peek().equals("{"))
{
System.out.println("No!不符合");
return false;
}
stack.pop();
}
}
}
if(stack.isEmpty())//排除全是左括号的情况;
{
System.out.println("Yes!符合标准");
return true;
}
else {
System.out.println("No!不符合");
return false;
}
}
}
package 栈的应用.SqQueue_4.SqStack_4;
import java.util.*;
public class Main1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
int n=sc.nextInt();
for(int i=0;i<x;i++)
{
//SqStackClass stack=new SqStackClass(n);
String s=sc.next();
ifIllegal(s,n);
}
}
static boolean ifIllegal(String s,int n)
{
String ss[]=s.split("");
SqStackClass stack=new SqStackClass(n);
for(String a:ss)
{
if(a.equals("S"))
{
if(stack.top==stack.data.length-1)
{
System.out.println("NO");
return false;
}
stack.push(a);
}
if (a.equals("X"))
{
if (!stack.isEmpty())
{
stack.pop();
}
else
{
System.out.println("NO");
return false;
}
}
}
if(stack.isEmpty())
{
System.out.println("YES");
return true;
}
else
{
System.out.println("NO");
return false;
}
}
}
链式存储:
package 栈的应用.SqQueue_4.LinkStack_4;
public class LinkNode<E> {
public E data;
// private E data;
LinkNode<E> next;
public LinkNode()
{
next=null;
}
public LinkNode(E e)
{
data=e;
next=null;
}
}
package 栈的应用.SqQueue_4.LinkStack_4;
public class LinkStack<E> {
LinkNode<E> head;
public LinkStack()
{
head=new LinkNode<>();
head.next=null;
}
public boolean idEmpty()
{
return head.next==null;
}
public void push(E e)
{
LinkNode s=new LinkNode(e);
s.next=head.next;
head.next=s;
}
public E pop()
{
if(head.next==null)
throw new IllegalArgumentException("栈空");
E e=(E)head.next.data;
head.next=head.next.next;
return e;
}
public E peek()
{
if(head.next==null)
throw new IllegalArgumentException("栈空");
E e=(E)head.next.data;
return e;
}
}
package 栈的应用.SqQueue_4.LinkStack_4;
public class LinkStackDemo {
public static void main(String[] args) {
String s1="1221";
String s2="123";
String s3="";
String s4="33211";
isHuiwen(s1);
isHuiwen(s2);
isHuiwen(s4);
}
static boolean isHuiwen(String s)
{
System.out.println(s);
String ss[]=s.split("");
LinkStack stack=new LinkStack();
for(String a:ss)
{
if(stack.idEmpty())
{
stack.push(a);
}
else {
if(stack.peek().equals(a))
{
stack.pop();
}
else
stack.push(a);
}
}
if(stack.idEmpty())
{
System.out.println("是回文符");
return true;
}
else
{
System.out.println("不是回文符");
return false;
}
}
}