两个队列实现栈

本程序是利用两个单向队列实现栈(实际中是使用双向队列,但是只用了其单向性质)  

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值