本程序是利用两个单向队列实现栈(实际中是使用双向队列,但是只用了其单向性质)
import java.util.*;
class Queue<T>
{
Stack<T> s1;
Stack<T> s2;
private int size=0;
public Queue()
{
s1 = new Stack<T>();
s2 = new Stack<T>();
}
public void offer(T x)
{
s1.add(x);
size++;
}
public T poll()
{
while(!s1.isEmpty())
{
s2.push(s1.pop());
}
size--;
return s2.pop();
}
public T peek()
{
while(!s1.isEmpty())
{
s2.push(s1.pop());
}
return s2.peek();
}
public int size()
{
return size;
}
public boolean isEmpty()
{
return size==0?true:false;
}
public String toString()
{
peek();
return s2.toString();
}
}
class Stackby<T>
{
T x=null;
private LinkedList<T> list1;
private LinkedList<T> list2;
private int size;
public Stackby()
{
size =0;
list1 = new LinkedList<T>();
list2 = new LinkedList<T>();
}
public void push(T x)
{
list1.add(x);
size++;
}
public T pop()
{
while(list1.size()>1)
{
list2.add(list1.poll());
}
x = list1.poll();
size--;
while(!list2.isEmpty())
{
list1.add(list2.poll());
}
return x;
}
public String toString()
{
return list1.toString();
}
}
public class scanner{
public static void main(String args[]) {
// Scanner cin = new Scanner(System.in);
// List<String> list = new LinkedList<String>();
// Queue<String> q = new Queue<String>();
// String str ;
// q.offer("1");
// q.offer("2");
// q.offer("3");
// System.out.println(q.toString());
// q.poll();
// System.out.println(q.toString());
// q.offer("4");
// System.out.println(q.toString());
Stackby<String> stack = new Stackby<String>();
stack.push("1");
stack.push("2");
stack.push("3");
System.out.println(stack.toString());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.toString());
stack.push("4");
System.out.println(stack.toString());
System.out.println(stack.pop());
}
public static int[] comput(int n)
{
int a=n;
int a_1=n;
int num=0;
int flag=0,flag_1=0;
int[] arry;
while(a>0)
{
flag_1++;
a = a/10;
}
arry= new int[flag_1];
// while(a_1>0)
// {
// num = a_1%10;
// arry[arry.length-flag-1]=num;
// a_1 = a_1/10;
// flag++;
// }
for(int i=0;i<flag_1;i++)
{
num = a_1%10;
arry[arry.length-i-1]=num;
a_1 = a_1/10;
}
for(int i=0;i<arry.length;i++)
{
System.out.print(arry[i]+" ");
}
return arry;
}
public static int compute(String str) throws Exception
{
int sum=0;
if(str==null)
{
throw new Exception("不符合");
}
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)-'0'>9||str.charAt(i)-'0'<0)
throw new Exception("不符合");
sum = sum*10+str.charAt(i)-'0';
}
return sum;
}
public static String compute_move(String str,int k)
{
String s = str;
int n =k;
char[] arry = s.toCharArray();
for(int i=0;i<n;i++)
{
char temp = arry[arry.length-1];
for(int j=arry.length-1;j>0;j--)
{
arry[j]=arry[j-1];
}
arry[0]=temp;
}
s = String.valueOf(arry);
return s;
}
public static String compute_1(String str)
{
String[] arry = str.split(" ");
String[] arry_1=new String[arry.length];
String k="";
for(int i=0;i<arry.length;i++)
{
arry_1[arry_1.length-i-1]=arry[i];
}
for(int i=0;i<arry_1.length;i++)
{
for(int j=0;j<arry_1[i].length();j++)
{
k=k+arry_1[i].charAt(j);
}
if(i==arry_1.length-1)
k=k;
else
k=k+" ";
}
return k;
}
public static void compute_2(String str)
{
String s = str;
for(int i=0;i<s.length();)
{
int num=1;
for(int j=i+1;j<s.length();j++)
{
if(s.charAt(i)==s.charAt(j))
{
num++;
}
else
{
break;
}
}
System.out.print(s.charAt(i)+""+num);
i=i+num;
}
}
public static void compute_3(String str)
{
String[] s = str.split(" ");
for(int i=0;i<s.length;i++)
{
if(i==s.length-1)
{
System.out.print(s[i]);
}
else
{
System.out.print(s[i]+"%20");
}
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void compute_4(List<?> list)
{
Iterator<?> iter = list.iterator();
Stack stack = new Stack();
while(iter.hasNext())
{
stack.push(iter.next());
}
while(!stack.isEmpty())
{
System.out.print(stack.pop());
}
}
}
结果:
[1, 2, 3]
3
2
[1]
[1, 4]
4