题目要求:作业E202_02_09_队列类中已经实现了队列类,但是它只能存储整型数据,如果需要存储浮点数还需要另外定义一个类似的队列类。现在要求定义一个通用队列,不管什么类型的数据都可以。
提示:使用泛型
package _05_第五章泛型.E202_05_01_通用队列;
public class Test {
public static void main(String[] args) {
Queue<Integer> queue = new Queue<>(5);
System.out.printf("整型队列:\n");
queue.In(11);
queue.In(22);
queue.In(33);
queue.In(44);
queue.In(55);
System.out.println(queue);
queue.Out();
System.out.println(queue);
System.out.println();
Queue<Double> queue2 = new Queue<>(5);
System.out.printf("浮点型队列:\n");
queue2.In(11.0);
queue2.In(22.0);
queue2.In(33.0);
queue2.In(44.0);
queue2.In(55.0);
System.out.println(queue2);
Result<Double> result = new Result<>();
result = queue2.Out();
System.out.println("弹出的值:"+result.d);
System.out.println(queue2);
}
}
package _05_第五章泛型.E202_05_01_通用队列;
public class Queue <T> {
T []data;//提供存储数据的空间
int capacity;//队列容量
int size;//队列中元素个数
int top;//队列指针(下标)
int top2;//记录头指针
public Queue(int capacity) {
this.capacity = capacity;
data = (T[]) new Object[capacity];
size = 0;
top = -1;//表示空 一个都没有
top2 = 0;
}
/**
* 压栈
* @param d 待进栈数据
* @return 是否成功压栈
*/
public boolean In(T d){
if (size == capacity){
return false;
}
top++;
data[top] = d;
size++;
return true;
}
public Result Out(){
Result<T> r = new Result();
if ( size == 0){
r.success = false;
}else {
r.success = true;
r.d = data[top2];
top2++;
}
return r;
}
public String toString(){
String str = "|";
for (int i = top2;i<=size-1;i++) { //
str += data[i] + " ";//data[(top-i)/capacity];
}
str +="|";
return str;
}
}
package _05_第五章泛型.E202_05_01_通用队列;
public class Result<T> {
public boolean success; //是否成功
public T d;//成功出队列的数据
}