我目前正在为即将到来的考试做准备,有一次来自较旧的考试,我们已经获得了ADTQueue
public interface ADTQueue<T> { public void enq(T element);
public void deq();
public T front();
public boolean empty(); }
我们现在必须实现类Queue以及带有构造函数ListElement(T元素)的内部类及其中的一些方法......
我已经实现了,这是我的以下代码:
public class Queue<T> implements ADTQueue<T> {
private ListElement<T> head;
private ListElement<T> tail;
public Queue(){
head=null;
tail=null;
}
public void enq (T element){
if (empty()){
head= new ListElement(element);
tail= new ListElement(element);
}
tail.nextElement=new ListElement(element);
tail=tail.nextElement;
}
public void deq(){
if (empty()){
throw new Exception();
}
T firstElement=front();
head=head.nextElement;
if (head==null){
tail = null;
}
}
public T front(){
if(empty()){
return null;
}
return head.element;
}
public boolean empty(){
return (head==null);
}
public class ListElement<T>{
private T element = null;
private ListElement<T> nextElement = null;
public ListElement(T element) {
this.element = element;
}
public T getElement() {
return element;
}
public ListElement<T> getNextElement() {
return nextElement;
}
public void setNextElement(ListElement<T> nextElement) {
this.nextElement = nextElement;
}
}
我想知道,如果我做的正确,如果我能做得更好。 另外,如果我想做同样但有双链表,它会是什么样子? 我知道,我还需要一个get-和setPreviousElement,但我不确定,enqueue和dequeue方法会有什么变化...... 如果你们能提出一些建议,我会非常高兴 thx提前
答案 0 :(得分:0)
我也尝试过实施和ADTStack,如果你们其中一个人能告诉我,它是否合适以及我应该改进什么,我会非常高兴
public class Stack<T> implements ADTStack<T> {
private ListElement<T> firstElement;
int size = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
}
@Override
public void push(T element) {
if (empty()){
firstElement = new ListElement(element);
size++;
}
else{
firstElement.nextElement=firstElement;
firstElement=new ListElement(element);
size++;
}
}
@Override
public void pop() {
if(empty()){
throw new RuntimeException("stack is empty");
}
else {
T element = top();
firstElement=firstElement.nextElement;
size--;
}
}
@Override
public T top() {
if(empty()){
return null;
}
else{
return firstElement.element;
}
}
@Override
public boolean empty() {
return (firstElement==null);
}
@Override
public int size() {
return size;
}
public class ListElement<T>{
private T element = null;
private ListElement<T> nextElement = null;
public ListElement(T element){
this.element = element;
}
public T getElement(){
return element;
}
public ListElement<T>getNextElement(){
return nextElement;
}
public void setNextElement(ListElement<T> element){
this.nextElement = nextElement;
}
}
}