描绘包括max函数的行列

疑问: 假设有这样一个具有3个操作的队伍: 1.EnQueue(v)看,将v参与队伍中 2.DeQueue:使队伍中的队首元素删去并回来此元素 3.MaxElement:回来队伍中的最大元素 描写一种数据结构和算法,让MaxElement操作的时辰复杂度尽可能的降低。 分析与解法: 先完结一个带有max函数的栈,然后用两个栈完结一个队伍 import java.util.LinkedList;

 http://www.fpzhuhai.com/linked/20130320.do 
public class Test_3_7 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Queue queue = new Queue();
		queue.EnQueue(4);
		System.out.println(queue.MaxElement());
		queue.EnQueue(1);
		System.out.println(queue.MaxElement());
		queue.EnQueue(5);
		System.out.println(queue.MaxElement());
		queue.EnQueue(3);
		System.out.println(queue.MaxElement());
		queue.DeQueue();
		System.out.println(queue.MaxElement());
		queue.DeQueue();
		System.out.println(queue.MaxElement());
		queue.DeQueue();
		System.out.println(queue.MaxElement());
		

	}
	
	
}
//先完结一个具有查找最大值功用的栈
class Stack{
	LinkedList datalist = new LinkedList();
	LinkedList helplist = new LinkedList();
	public void push(int i){
		if(datalist.size()==0){
			datalist.add(i);
			helplist.add(0);
		}
		else{
			int max =datalist.get(helplist.getLast());
			if(i>max){
				helplist.add(datalist.size());
			}
			else{
				helplist.add(helplist.getLast());
			}
			datalist.add(i);
		}
	}
	public Integer pop(){
		if(datalist.size()==0){
			System.out.println("栈中已无数据!");
			return null;
		}
		helplist.removeLast();
		return datalist.removeLast();
		
	}
	public Integer max(){
		if(datalist.size()==0){
			System.out.println("栈中已无数据!");
			return null;
		}
		return datalist.get(helplist.getLast());
	}
	public boolean isEmpty(){
		if(datalist.size()==0)
			return true;
		else 
			return false;
			}
}
//用两个栈完结一个队伍
class Queue{
	Stack stack1 = new Stack();
	Stack stack2 = new Stack();
	public void EnQueue(int i){
		stack1.push(i);
	}
	public Integer DeQueue(){
		int temp;
		if(stack2.isEmpty()==true){
			while(stack1.isEmpty()==false){
			temp = stack1.pop();
			stack2.push(temp);
			}
		}
		return stack2.pop();
	}
	public Integer MaxElement(){
		if(stack1.isEmpty())
			return stack2.max();
		else if(stack2.isEmpty()){
			return stack1.max();
		}
		return stack1.max()>stack2.max()?stack1.max():stack2.max();
	}
} 输出效果: 4 4 5 5 5 5 3 http://www.star1234.info/linked/20130320.do 
posted @ 2013-03-21 05:36  chinadiy197601  阅读(167)  评论(0编辑  收藏  举报