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];
}
}