堆栈和队列的实现


1.使用数组实现,代码和结果如下所示:

要求:

写Stack.java,实现堆栈功能,使用int数组保存数据特点:先进后处 后进先出  

写Queue.java,实现队列功能,使用int数组保存数据特点:先进先出 后进后出  使用Test.java对堆栈和队列进行测试

如下所示,分别为实现方法:

首先实现stack.java类,其代码如下所示:

package ex.md05;
public class Stack
{
	private int[] a=new int[1000];
	private int i=0;
	public void push(int m)
	{
	  a[++i]=m;
	}
	public int pop()
	{
	  if(i>0)
	  {
	     return  a[i--];
	  }
           else return  -1;
	}
}
接着实现队列Queue.java代码,具体如下所示:

package ex.md05;
public class Queue
{
  	int[] a=new int[1000];
	private int i=1;
	public void in(int m)
	{
	   a[i++]=m;
	}
	public int out()
	{
	   int k=1;
	   int index=0;
	   int temp=a[k];
	   for(int j=k;j<i;j++)
	   {
	     a[j-1]=a[j];
	     index++;
	   }
	     i=index;
	   return temp;
	}
}
最后,我们实现测试类Test.java,观察逻辑是否正确

package ex.md05;

public class Test 
{
	public static void main(String[] args) 
	{
		Stack stack = new Stack();
		//stack.pop();
		System.out.println("Stack push()---1-200--------");
		for(int i=1; i<=200; i++){
			stack.push(i);
		}
		System.out.println("Stack pop()---1-100--------");
		for(int i=1; i<=100; i++){
			System.out.println("pop:" + stack.pop());
		}
		System.out.println("Stack push()---201-300--------");
		for(int i=201; i<=300; i++){
			stack.push(i);
		}
		System.out.println("Stack pop()---1-200--------");
		for(int i=1; i<=200; i++){
			System.out.println("pop:" + stack.pop());
		}

		Queue queue = new Queue();
		//queue.out();
		System.out.println("Queue in()---1-200--------");
		for(int i=1; i<=200; i++){
			queue.in(i);
		}
		System.out.println("Queue out()---1-100--------");
		for(int i=1; i<=100; i++){
			System.out.println("out:" + queue.out());
		}
		System.out.println("Queue in()---201-300--------");
		for(int i=201; i<=300; i++){
			queue.in(i);
		}
		System.out.println("Queue out()---1-200--------");
		for(int i=1; i<=200; i++){
			System.out.println("out:" + queue.out());
		}
	}
}

编译运行之后,我们能够看到运行结果如下所示:

根据分析,我们的运行结果是正确的(以上只是部分结果,下面是运行后的所有结果,请下载查看http://download.csdn.net/my

2.使用list来实现功能,代码如下所示:

写MyStack类,实现堆栈功能。在类中使用ArrayList保存数据。
写MyQueue类,实现队列功能。在类中使用ArrayList保存数据。
使用Test.java测试堆栈和队列

首先实现MyStack.java代码:

package sample;
import java.util.*;
public class MyStack
{
	List<Integer> list = new ArrayList<Integer>();
        Iterator it=list.iterator();
	int index=0;
	public MyStack(){}
	public void push(Integer i)
	{
	      list.add(i);
	      index++;
	}
	public Integer pop()
	{
	   if(!(list.isEmpty()))
	   {
	       index--;
	     return (Integer)list.remove(index);
	   }
	   return null;
	}
}
实现MyQueue.java类:

package sample;
import java.util.*;
public class MyQueue
{
	List<Integer> list = new ArrayList<Integer>();
        Iterator it=list.iterator();
	int index=0;
	public MyQueue(){}
	public void in(Integer i)
	{
  	      list.add(i);
	      index++;
	}
	public Integer out()
	{
	   if(!(list.isEmpty()))
	   {
	      Integer temp=0;
      	      temp=(Integer)list.get(0);
		 list.remove(0);
	         index--;
	     return temp;
	   }
	   return null;
	}
}
使用Test类进行测试,代码如下所示:

package sample;

public class Test 
{
	public static void main(String[] args) 
	{
		MyStack stack = new MyStack();
		stack.push(new Integer(1));
		stack.push(new Integer(2));
		stack.push(new Integer(3));
		System.out.println(stack.pop());
		stack.push(new Integer(4));
		System.out.println(stack.pop());
		System.out.println(stack.pop());
		System.out.println(stack.pop());
		System.out.println(stack.pop());
		stack.push(new Integer(5));
		System.out.println(stack.pop());
		System.out.println(stack.pop());
		System.out.println("------------------------");
		MyQueue queue = new MyQueue();
		queue.in(new Integer(1));
		queue.in(new Integer(2));
		queue.in(new Integer(3));
		System.out.println(queue.out());
		queue.in(new Integer(4));
		System.out.println(queue.out());
		System.out.println(queue.out());
		System.out.println(queue.out());
		System.out.println(queue.out());
		queue.in(new Integer(5));
		System.out.println(queue.out());
		System.out.println(queue.out());
	}
}
结果如下所示:


以上就是堆栈的两种实现方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suwu150

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值