数据结构:栈、队列、双端队列、优先队列

一、栈Stack

特性:先进后出、后进先出
时间复杂度:添加和删除元素O(1),查询某个元素O(n)

在这里插入图片描述

具体实现和常用方法请看栈Java官方文档
源码文档

示例代码:

Stack<Integer> stack = new Stack<>();//创建Stack实例
stack.push(1);//在栈顶插入元素
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack);//输出栈
System.out.println(stack.search(4));//元素4在栈中位置,下标从1开始
stack.pop();//移除栈顶元素
stack.pop();
Integer topElement = stack.peek();//查看栈顶元素
System.out.println(topElement);
System.out.println("3的位置"+stack.search(3));

运行结果:

[1, 2, 3, 4]
1
2
3的位置-1

二、队列Queue

特性:先进先出、后进后出
时间复杂度:添加和删除元素O(1),查询某个元素O(n)
在这里插入图片描述
具体实现和常用方法请看队列Java官方文档
源码文档

示例代码:

//创建队列的实现类LinkedList实例
		Queue<String> queue = new LinkedList<String>();
		queue.offer("one");//向队尾中插入元素
		queue.offer("two");
		queue.offer("three");
		queue.offer("four");
		System.out.println(queue);//打印队列
		
		String polledElement = queue.poll();//取出队头元素
		System.out.println(polledElement);
		System.out.println(queue);
		
		String peekedElement = queue.peek();//查询队头元素
		System.out.println(peekedElement);
		System.out.println(queue);
		//遍历队列
		while (queue.size()>0) {
			System.out.println(queue.poll());
		}

运行结果:

[one, two, three, four]
one
[two, three, four]
two
[two, three, four]
two
three
four

三、双端队列Deque

双端队列为栈和队列的结合体。它可以往队列前端添加或移除元素,也可以往队列后端添加或移除元素
时间复杂度:插入和删除元素O(1),查询某个元素O(n)
在这里插入图片描述
具体实现和常用方法请看双端队列Java官方文档

示例代码:

//创建Deque的实现类LinkedList实例
		Deque<String> deque = new LinkedList<String>();
		deque.addFirst("a");//在队头添加元素
		deque.addFirst("b");
		deque.addFirst("c");
		System.out.println(deque);
		
		String string = deque.getFirst();//查询队头第一个元素
		System.out.println(string);
		System.out.println(deque);
		
		//遍历队列
		while (deque.size()>0) {
			System.out.println(deque.removeFirst());//查询并删除队头第一个元素
		}
		System.out.println(deque);

运行结果:

[c, b, a]
c
[c, b, a]
c
b
a
[]

四、优先队列PriorityQueue

特性:和栈与队列不同,不在是先入后出或先入先出,而是按照元素优先级出
时间复杂度:插入操作为O(1),取出操作为O(logn)【按照元素优先级取出】
优先队列底层具体实现的数据结构较为多样和复杂,可以使用heap堆、bst二叉搜索树、treap树堆来实现

具体实现和常用方法请看优先队列Java官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值