跪求用JAVA语言实现一个栈和一个队列,数据元素为double型。。。具体在问题补充里
实现一个栈和一个队列,数据元素为double型,具有基本的出栈入栈操作,出队入队操作。给出main方法对栈和队列进行初始化。1、栈要求分别实现顺序栈和链栈2、队列要求使用...
实现一个栈和一个队列,数据元素为double型,具有基本的出栈入栈操作,出队入队操作。给出main方法对栈和队列进行初始化。
1、 栈要求分别实现顺序栈和链栈
2、 队列要求使用循环队列。
3、 最好使用图形界面。
4、 程序要有必要的注释。 展开
1、 栈要求分别实现顺序栈和链栈
2、 队列要求使用循环队列。
3、 最好使用图形界面。
4、 程序要有必要的注释。 展开
1个回答
展开全部
public interface MyStack<T> {
/**
* 判断栈是否为空
*/
boolean isEmpty();
/**
* 清空栈
*/
void clear();
/**
* 栈的长度
*/
int length();
/**
* 数据入栈
*/
boolean push(T data);
/**
* 数据出栈
*/
T pop();
}
public class MyArrayStack<T> implements MyStack<T> {
private Object[] objs = new Object[16];
private int size = 0;
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public void clear() {
// 将数组中的数据置为null, 方便GC进行回收
for (int i = 0; i < size; i++) {
objs[size] = null;
}
size = 0;
}
@Override
public int length() {
return size;
}
@Override
public boolean push(T data) {
// 判断是否需要进行数组扩容
if (size >= objs.length) {
resize();
}
objs[size++] = data;
return true;
}
/**
* 数组扩容
*/
private void resize() {
Object[] temp = new Object[objs.length * 3 / 2 + 1];
for (int i = 0; i < size; i++) {
temp[i] = objs[i];
objs[i] = null;
}
objs = temp;
}
@SuppressWarnings("unchecked")
@Override
public T pop() {
if (size == 0) {
return null;
}
return (T) objs[--size];
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("MyArrayStack: [");
for (int i = 0; i < size; i++) {
sb.append(objs[i].toString());
if (i != size - 1) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
}
//栈的链表实现
public class MyLinkedStack<T> implements MyStack<T> {
/**
* 栈顶指针
*/
private Node top;
/**
* 栈的长度
*/
private int size;
public MyLinkedStack() {
top = null;
size = 0;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public void clear() {
top = null;
size = 0;
}
@Override
public int length() {
return size;
}
@Override
public boolean push(T data) {
Node node = new Node();
node.data = data;
node.pre = top;
// 改变栈顶指针
top = node;
size++;
return true;
}
@Override
public T pop() {
if (top != null) {
Node node = top;
// 改变栈顶指针
top = top.pre;
size--;
return node.data;
}
return null;
}
/**
* 将数据封装成结点
*/
private final class Node {
private Node pre;
private T data;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询