编程之美3.7队列中取最大值操作问题Java版
2016-08-09 16:36
295 查看
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package chart_3; /** * * 3.7 队列中取最大值操作问题 */ public class QueueMaxOperate_3_7 { public static void main(String[] args) { //定义一个Stack类 Stack s = new Stack(5); s.push(12); s.push(3); s.push(5); s.push(9); s.push(6); s.push(36); System.out.println(s.Max()); s.Pop(); System.out.println(s.Max()); //定义一个Queue_T类,用Stack实现 Queue_T q = new Queue_T(); q.EnQueue(3); q.EnQueue(4); q.EnQueue(2); System.out.println(q.Max()); q.DeQueue(); q.EnQueue(5); System.out.println(q.Max()); } private static class Stack { private static int maxStackItemIndex; private static int stackTop; private static int[] link2NextMaxItenm; private static int[] stackItem; private static int maxn; public Stack(int maxn) { stackTop = -1; maxStackItemIndex = -1; link2NextMaxItenm = new int[maxn]; stackItem = new int[maxn]; this.maxn = maxn; } void push(int x) { if (stackTop >= maxn-1) { } else { stackTop++; stackItem[stackTop] = x; if (x > Max()) { link2NextMaxItenm[stackTop] = maxStackItemIndex; maxStackItemIndex = stackTop; } else { link2NextMaxItenm[stackTop] = -1; } } } int Pop(){ int ret; if(stackTop <0){ return -1; }else{ ret = stackItem[stackTop]; if(stackTop == maxStackItemIndex){ maxStackItemIndex = link2NextMaxItenm[stackTop]; } stackTop--; return ret; } } int Max() { if (maxStackItemIndex >= 0) { return stackItem[maxStackItemIndex]; } else { return -1; } } } }
Queue_T类
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package chart_3;
import java.util.Enumeration;
import java.util.Stack;
/**
*
* @author Administrator
*/
class Queue_T {
private Stack<Integer> stackA;
private Stack<Integer> stackB;
private int max_index;
public Queue_T() {
stackA = new Stack<Integer>();
stackB = new Stack<Integer>();
max_index = -1;
}
void EnQueue(int v) {
stackB.push(v);
if (v > max_index) {
max_index = v;
}
}
Integer DeQueue() {
if (stackA.isEmpty()) {
while (!stackB.isEmpty()) {
stackA.push(stackB.pop());
}
}
int peek = stackA.pop();
if (peek == max_index) {
max_index = LookMax();
}
return peek;
}
int Max(){
return max_index;
}
int LookMax() {
int maxA = -1;
int maxB = -1;
Enumeration<Integer> itemsA = stackA.elements();
while (itemsA.hasMoreElements()) {
if (itemsA.nextElement() > maxA) {
maxA = itemsA.nextElement();
}
}
if (!stackB.isEmpty()) {
Enumeration<Integer> itemsB = stackB.elements();
while (itemsB.hasMoreElements()) {
if (itemsB.nextElement() > maxB) {
maxB = itemsB.nextElement();
}
}
}
if(maxA > maxB)
return maxA;
else
return maxB;
}
}
相关文章推荐
- 编程之美3.7——队列中取最大值操作问题
- 编程之美3.7--队列中取最大值操作问题
- 队列中取最大值操作问题(编程之美3.7)
- 编程之美:第三章 结构之法 3.7队列中取最大值操作问题
- 编程之美3.7——队列中取最大值操作问题
- 《编程之美》读书笔记18: 3.7 队列中取最大数操作问题
- 编程之美3.7——队列中取最大值操作问题
- 编程之美3.7,队列中的最大值操作问题
- 编程之美-3.7-队列中取最大值操作问题
- 编程之美—队列中取最大值操作问题
- 编程之美3.7 队列中最大值问题
- 编程之美读书笔记3.7队列中取最大值操作的问题 解法2
- 读书笔记之编程之美 - 3.7 队列中取最大值操作问题
- [编程之美] PSet3.7 队列中取最大值操作问题
- 编程之美--3.7 队列中取最大值操作问题
- 编程之美读书笔记_3.7_队列中取最大数操作问题
- 编程之美3.7队列中取最大值操作
- 编程之美——队列中取最大值操作问题
- 编程之美3.7 队列中最大值问题
- 《编程之美》——队列中取最大值操作的问题