Java算法-数据结构

一、数组

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

解析上面的定义:

  • 线下表数据接口:表示数据是从前往后只有一个分支,数据只有前后两个方向
  • 连续的存储空间:存放数据或者对象引用的地址空间是连续的
  • 相同的数据类型:说明每个数据分配的存储空间是相同的

系统是通过内存地址来访问数据,数组的寻址计算由上面解析的定义可以看出是下面的公式:

a[i] = 头地址 + (i * String类型引用的长度)

java和c数组下标是0开始的 如果下标是从1开始那么计算公式如下.可以看出下标0的优势是减少了一次减法运算.

a[i] = 头地址 + ((i-1) * String类型引用的长度)

array.png

二、队列

队列:先进先出的数据结构

queue.png
java中队列可以使用List

List<String> arrayList = new ArrayList<>();
arrayList.add("1");
arrayList.add("2");
if(arrayList.size()>0){
    //获取队列头元素
    String s = arrayList.get(0);
    //移除队列头元素
    String remove = arrayList.remove(0);
}
// 遍历
for(String s : arrayList){
    System.out.println(s);
}

也可以使用Queue,queue接口中的方法

方法作用
boolean add(E element)将指定的元素添加到队列的末尾,如果成功则返回true,如果队列已满则抛出异常。
boolean offer(E element)将指定的元素添加到队列的末尾,如果成功则返回true,如果队列已满则返回false。
E remove()移除并返回队列头部的元素,如果队列为空则抛出异常。
E poll()移除并返回队列头部的元素,如果队列为空则返回null。
E element()获取队列头部的元素,但不移除它,如果队列为空则抛出异常。
E peek()获取队列头部的元素,但不移除它,如果队列为空则返回null。
int size()返回队列中的元素个数。
boolean isEmpty()判断队列是否为空。
void clear()清空队列。
Queue<String> queue = new LinkedList<>();
String poll = queue.poll();
String peek = queue.peek();
queue.offer("2");
queue.add("1");
String element = queue.element();
String remove = queue.remove();
int size = queue.size();
boolean empty = queue.isEmpty();
queue.clear();

Deque双端队列

入队列:

方法作用
void addFirst(E element)将指定元素添加到双端队列的头部。
void addLast(E element)将指定元素添加到双端队列的尾部。
void offerFirst(E element)将指定元素添加到双端队列的头部,如果成功则返回true,如果队列已满则返回false。
boolean offerLast(E element)将指定元素添加到双端队列的尾部,如果成功则返回true,如果队列已满则返回false。

出队列:

方法作用
E removeFirst()移除并返回双端队列的头部元素,如果队列为空则抛出异常。
E removeLast()移除并返回双端队列的尾部元素,如果队列为空则抛出异常。。
E pollFirst()移除并返回双端队列的头部元素,如果队列为空则返回null。
E pollLast()移除并返回双端队列的尾部元素,如果队列为空则返回null。

获取队列元素:

方法作用
E getFirst()获取双端队列的头部元素,但不移除它,如果队列为空则抛出异常。
E getLast()获取双端队列的尾部元素,但不移除它,如果队列为空则抛出异常。
E peekFirst()获取双端队列的头部元素,但不移除它,如果队列为空则返回null。
E peekLast()获取双端队列的尾部元素,但不移除它,如果队列为空则返回null。

二、栈

栈.png

Java标准库中提供的栈:public class Stack<E> extends Vector<E>

方法作用
Stack()构造函数,构造一个空的栈
E push(E e)将e入栈,并返回e
boolean add(E e)将e入栈,并返回boolean表示成功失败
E pop()将栈顶元素出栈并返回
E peek()获取栈顶元素
int size()获取栈中有效元素个数 (继承自Vector)
boolean empty()检测栈是否为空
Stack<String> stack = new Stack<>();
// 判断是否为空
boolean empty = stack.empty();
// 压栈
stack.push("1");
// 压栈
stack.push("2");
//返回栈顶元素,不删除
String peekValue = stack.peek();
// 弹栈
String popValue = stack.pop();

三、链表

linked.png

LinkedList既实现了queue接口又实现了List, Deque
底层是用链表实现.
方法与上述一致

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值