LinkedList(实现了queue,deque接口,List接口)实现栈和队列的功能

 LinkedList是用双向链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。

底层是一个双向链表,链表擅长插入和删除操作,队列和栈最常用的2种操作都设计到插入和删除








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.LinkedList;
import java.util.Queue;
//用linkedList模拟队列,因为链表擅长插入和删除
public class Hi {
    public static void main(String [] args) { //做剑指offer遇见过这个数结
        Queue<String> queue = new LinkedList<String>();
        //追加元素
        queue.add("zero");
        queue.offer("one");
        queue.offer("two");
        queue.offer("three");
        queue.offer("four");
        System.out.println(queue);//[zero, one, two, three, four]
        //从队首取出元素并删除
        System.out.println(queue.poll());// zero
        System.out.println(queue.remove());//one
        System.out.println(queue);//[two, three, four]
        //从队首取出元素但是不删除
        String peek = queue.peek();
        System.out.println(peek); //two
        //遍历队列,这里要注意,每次取完元素后都会删除,整个
        //队列会变短,所以只需要判断队列的大小即可
        while(queue.size() > 0) {
            System.out.println(queue.poll());
        }//two three four
    }
}

  




 

 //用linkedList模拟栈,因为链表擅长插入和删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Deque;
import java.util.LinkedList;
 
public class Hi {
    public static void main(String[] args) {
        /*模拟栈,这是从头开始进来的*/
        Deque<String> deque = new LinkedList<String>();
        /*Pushes an element onto the stack
         *at the head of this dequeue */
        deque.push("a");
        deque.push("b");
        deque.push("c");
        System.out.println(deque); //[c, b, a]
        //获取栈首元素后,元素不会出栈
        System.out.println(deque.peek());//c
        while(deque.size() > 0) {
            //获取栈首元素后,元素将会出栈
            System.out.println(deque.pop());//c b a
        }
        System.out.println(deque);//[]
         
        /*模拟栈*/
        deque.offerLast("a");
        deque.offerLast("b");
        deque.offerLast("c");// [a, b, c]
        while(!deque.isEmpty())
            System.out.println(deque.pollLast());
    }   // 先输出c再b最后a
}

  





1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Stack;
//没有用到接口编程
public class Hi {
    public static void main(String[] args) {
      Stack<Integer> s = new Stack<Integer>();
      s.push(1);
      s.push(2);// [1,2]
      s.push(3);// [1,2,3]
      while(!s.isEmpty()){
          System.out.println(s.pop());
      }//依次输入 3 接着是2 ,然后1
    }
}

  

posted on   多情剑客无情剑;  阅读(4067)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示