package data_structures_java ;
import java.util.LinkedList;
class Queue_implementation {
private LinkedList<Float> list = new LinkedList<Float>();
public void enqueue(Float item) {
list.addLast(item);
}
public Float dequeue() {
return list.poll();
}
public boolean hasItems() {
return !list.isEmpty();
}
public int size() {
return list.size();
}
public void addItems(Queue_implementation q) {
while (q.hasItems())
list.addLast(q.dequeue());
}
}
我想使用 arraylist 来创建自己的队列。但随后我就必须编写像 add_only_to_front() 这样的函数。
问题: 您可以使用哪些基本数据结构来制作自己的链表、堆栈……有什么关键区别吗? 因为我使用数组列表来编写自己的堆栈实现,并且我想将数组列表用于队列、双端队列、链表、映射(可能?)、堆(?)。
这是我使用 arraylist 的堆栈实现:
package data_structures_java;
import java.util.ArrayList ;
public class Stack_implementation {
ArrayList<Integer> actual_stack ;
int index_top ;
public Stack_implementation( int size ){
actual_stack = new ArrayList<Integer>(size) ;
index_top = 0 ;
}
public int pop(){
System.out.println("popped 1 element!") ;
int result = actual_stack.get(index_top) ;
actual_stack.remove(index_top) ;
--index_top ;
return result ;
}
public void push(int element){
if( index_top > actual_stack.size()){
System.out.println("can't push on stack!");
return ;
}
actual_stack.add(element) ;
index_top++ ;
}
public void print_stack(){
if(actual_stack.isEmpty() )System.out.println("stack is empty") ;
for(int i = index_top-1 ; i >= 0 ; i--){
System.out.println( "|\t" + actual_stack.get(i) + "\t|" ) ;
}
}
}
最佳答案
差异在于运行时间,因此没有“正确”的方法。尽管某些方法比其他方法好得多。某些数据结构比其他方法更好地实现抽象数据类型(ADT)。例如,数组非常适合堆栈,因为您可以轻松插入和弹出元素;另一方面,数组不太适合实现优先级队列(取决于有序/无序,您可以获得线性运行时间)。对于您列出的大多数示例,数组(数组列表)效果很好。
在我看来,编写自己的 ADT 非常棒。它可以帮助您更好地了解包的工作原理并更好地实现它们的用途。
关于java - 使用ArrayList(或更好的链接列表)编写自己的队列在技术上是否正确?[下面的java代码],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977276/