使用链表实现栈
需要用到创建的栈基本操作实现接口:MyStack
需要用到之前创建的单链表 ==> : MyLink 作为存储容器;
创建MyLinkedStack 类实现MyStack 接口
public class MyLinkedStack<T> implements MyStack<T> {
private MyLink<T> data;
public MyLinkedStack() {
data = new MyLink();
}
@Override
public int getSize() {
return data.getSize();
}
@Override
public boolean isEmpty() {
return data.isEmpty();
}
@Override
public void push(T element) {
data.addHead(element);
}
@Override
public T pop() {
return data.removeTail();
}
@Override
public T peek() {
return data.getTail();
}
@Override
public String toString() {
StringBuilder sbl=new StringBuilder();
sbl.append("栈顶 <");
try {
for (int i = 0; i < this.getSize(); i++) {
sbl.append(data.get(i));
if (i != this.getSize() - 1) {
sbl.append(",");
}
}
sbl.append("> 栈顶");
return sbl.toString();
} catch (IllegalArgumentException e) {
e.printStackTrace();
return null;
}
}
}
使用链表实现队列
需要用到之前创建的队列基本操作实现接口 ==> MyQueue
需要用到上次创建的链表作为底层存储==> MyLink
创建MyLinkedQueue 实现接口 MyQueue
public class MyLinkedQueue<E> implements MyQueue<E> {
private MyLink<E> data;
public MyLinkedQueue() {
data = new MyLink<>();
}
@Override
public int getSize() {
return data.getSize();
}
@Override
public boolean isEmpty() {
return data.isEmpty();
}
@Override
public void enqueue(E element) {
data.addTail(element);
}
@Override
public E dequeue() {
return data.removeHead();
}
@Override
public E getFront() {
return data.getHead();
}
}
分别比较数组实现队列 与 链表实现队列 的运行效率
数组实现队列==> MyQueueImpl
出队操作运行效率;
public class TestTimeForQueue {
public static void main(String[] args) {
int count=10000;
MyQueue<Integer> ArrayQueue= new MyQueueImpl(100) ;
TestTimeForQueue.testTime(ArrayQueue,count);
MyQueue<Integer> LinkQueue=new MyLinkedQueue<>();
TestTimeForQueue.testTime(LinkQueue,count);
}
public static void testTime(MyQueue myQueue,int count){
long start=System.nanoTime();
for (int i = 0; i < count; i++) {
myQueue.enqueue(i+10);
}
long end=System.nanoTime();
System.out.println("时间==>"+(end-start)/1000000000.0);
}
}
测试结果:
时间==>0.0012415
时间==>0.1221521
数组实现队列 比 链表实现队列 的入队快;
由于在创建数组实现队列的类时,调用了数组尾部添加元素的方法; 在数组尾部添加元素 O(1);在向尾部添加元素时,其他位置的元素不移动
而这个链表实现队列时调用链表尾部添加元素的方法;时间复杂度为O(n)
|