用栈实现队列、用队列实现栈

1、用栈实现队列:栈是先进后出,队列是先进先出 

定义两个栈 把第一个栈的输出  输入到第二个栈里面就可以   再让第二个栈进行输出就可以 

main方法

 Stack stack=new Stack();
	   Stack stack1=new Stack();
	   for(int i=0;i<10;i++) {
		   stack.set(i);
	   }
	   stack.putf();
	   for(int i=0;i<10;i++) {
		   int a=stack.get1();
		   if(a==-1) {
			   System.out.println("当前数据为空");
			   break;
		   }
		   stack1.set(a);
	   }
	   for(int i=0;i<10;i++) {
		   stack1.get();
	   }

栈的定义多了一个返回值为int 的函数用来获得栈内元素

public class Stack {
   private int a[]=new int[100];
   private int f=0;
   public void set(int value) {
	   if(f==a.length) {
		   int b[]=new int[a.length*2];
		   for(int k=0;k<a.length;k++) {
			   b[k]=a[k];
		   }
		   a=b;
	   }
	   a[f]=value;
	   f++;
   }
   public void putf() {
	   System.out.println(f);
   }
   public void get() {
	   if(f==0) {
		   System.out.println("栈已空");
		   return;
	   }
	  System.out.print(a[f-1]+" ");
	   f--;
	  
   }
   public int get1() {
//因为加了返回值 因此要在返回值前面进行f的递减
	   f--;
	   if(f==-1) {
		   System.out.println("栈已空");
		   return -1;
	   }
	   return a[f];
	   
	   
   }
}

2、用队列queue 来实现栈

队列是先进先出的因此不能通过简单的来回倒来实现栈的先进后出 同样用两个队列实现

因此借助的思想是:入第一个队列n个元素 前n-1个出队列 返回最后的n 把前n-1个元素 放入到第二个队列里面 ,再把n-2个元素入到第一个队列 返回第 n-2个元素 重复这两个步骤直到队列为空。

我是一次性输出来的用的递归,如果要一次一次输出 去掉递归就可以了

 public static void main(String []args) {
	  DuiLie duilie=new DuiLie();
	  DuiLie duilie1=new DuiLie();
	  for(int i=0;i<10;i++) {
		  duilie.set(i);
	  }
//这是以栈的形式输出
	  duiLieStack(duilie,duilie1);
}
 public static void duiLieStack(DuiLie duilie,DuiLie duilie1) {
		 
		  int count=duilie.geti();
		 
		  if(count==0) {
			  return;
		  }
		 
		  for(int i=0;i<count-1;i++) {
			  int a=duilie.get1();
			   if(a==-1) {
				   System.out.println("当前数据为空");
				   break;
		  }
			  duilie1.set(a); 
	   }
		  duilie.get();
		  duiLieStack(duilie1,duilie);
	   XunHuanDui xdui=new XunHuanDui();
	   for(int i=0;i<10;i++) {
		   xdui.set(i);
	   }
	   for(int i=0;i<4;i++) {
		   xdui.get();
	   }
	   System.out.println();
	   for(int i=0;i<2;i++) {
		   xdui.set(100);
	   }
	   for(int i=0;i<9;i++) {
		   xdui.get();
	   }
	  
   }

这是队列的定义(也可以把上面的函数写入到队列的定义里面看个人需求了)

public class DuiLie {
   private int a[]=new int[10];
   private int i=0;
   private int j=0;
 
   public void set(int value) {
	   if(i==a.length) {
		   int b[]=new int[a.length*2];
		   for(int k=0;k<a.length;k++) {
			   b[k]=a[k];
		   }
		   a=b;
	   }
	   a[i]=value;
	   i++;
   }
   public int geti() {
	   return i-j;
   }
//这是单独的出栈
   public void get() {
	   if(j==i) {
		   System.out.println("队列已空");
		   return;
	   }
	   System.out.print(a[j]+" ");
	   j++;
   }
//这是带返回值的出栈
   public int get1() {
	   j++;
	   if(j==i+1) {
		   System.out.println("队列已空");
		   return -1;
	   }
	   return a[j-1];
   }
   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值