1. 程式人生 > >堆疊和佇列的實現

堆疊和佇列的實現

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());
	}
}
結果如下所示:


以上就是堆疊的兩種實現方法