栈和队列

一、栈

栈(stack)是运算受限的线性表,只允许在表的一端进行添加和删除(先进后出,后进先出)
插入删除的一端叫做栈顶(top),表的另一端叫栈底(bottom)
插入–>进栈(push)
删除–>出栈(pop)
得到栈顶元素(Peek)
栈的存储结构
顺序栈,类似于顺序表,底层使用数组
链栈,类似于单链表,节点
在这里插入图片描述

二、队列

队列(queue)简称队,也是一种运算受限的线性表,只允许在表的一端进行插入,另一端删除。把插入数据元素的一端称为队尾(rear),删除数据的一端叫队首(front)。先进先出
队列的存储结构
1.顺序队列
1.1使用数组作为存储结构
在这里插入图片描述
缺点:出队操作后,front之前的空间不能再次得到,导致空间大量丢失
1.2使用循环数组
在这里插入图片描述
可以再次使用front之前的空间

2.链式队列
使用带头节点的单链表
链表的头部作为队首,尾部作为队尾
队首指针指向队首元素的前一个结点,队尾指针指向队尾元素所在的节点
队列为空时,队首和队尾指针指向头节点
在这里插入图片描述
3.双端队列deque
两端都可以进行进队和出队的操作,将队列的两端分为前端和后端,逻辑上仍是线性结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
双端队列既可以用于队操作,也可用于栈操作(只操作一端)

Java中的队列和栈

Stack:栈类,已过时,底层是Vector
Queue:队列类
Deque:双端队列(也可用于栈操作)
Java中栈和队列都可以通过LinkedList类实现(底层链表),ArrayDeque也可实现(底层线性表)

package com.liang.datastructure.stackQueue;

import java.util.ArrayDeque;
import java.util.Deque;

public class Demo {
	public static void main(String[] args) {
		int n=128;
		
		Deque<Integer> stack=new ArrayDeque<Integer>();
		int t=n;
		do {
			int mod=t%2;
			stack.push(mod);
			t=t/2;
		}while(t>0);
		System.out.print(n+"--->");
		while(!stack.isEmpty()) {
			
			System.out.print(stack.pop());
		}
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值