1.基于数组的链表

 package array;

 import java.util.Arrays;

 /**
* 基于数组的链表
*
* @author 王彪
*
*/
public class MyArrayList {
private static Object[] elements = null;
private static int size = 0;
private static final int DEFUAT_INITIAL_CAPACITY = 10; public MyArrayList() {
this(10);
} public MyArrayList(int initialCapacity) {
if (initialCapacity < 0) {
throw new IllegalArgumentException("输入容量有误");
}
elements = new Object[initialCapacity];
} //初始化数组
// 保存新元素
public void add(Object ele) {
// 数组的扩容问题
if (size == elements.length) {
Object[] temp = Arrays.copyOf(elements, elements.length * 2);
elements = temp;
}
elements[size] = ele;
size++;
} public Object get(int index) {
if (index < 0 || index >= size) {
throw new IllegalArgumentException("输入索引有误");
}
return elements[index];
} public void set(int index, Object newPlayerNum) {
if (index < 0 || index >= size) {
throw new IllegalArgumentException("输入索引有误");
}
elements[index] = newPlayerNum;
} public void remove(int index) {
if (index < 0 || index >= size) {
throw new IllegalArgumentException("输入索引有误");
}
for (int i = index; i < size - 1; i++) {
elements[i] = elements[i + 1];
}
elements[size - 1] = null;
size--;
} public String toString() {
if (elements == null) {
return null;
}
if (size == 0) {
return "[]";
}
StringBuilder sb = new StringBuilder(size * 3 + 1);
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(elements[i]);
if (i < size - 1) {
sb.append(",");
}
if (i == size - 1) {
sb.append("]");
}
}
return sb.toString();
} public int size() {
return size;
} public boolean isEmpty() {
return size == 0;
} public void clear() {
this.elements = new Object[DEFUAT_INITIAL_CAPACITY];
size = 0;
} }

2.双向链表

 package linked;

 public class MyLinkedArrayList {
protected Node first;
protected Node last;
protected int size; public void addFirst(Object ele) {// 在头部增加
Node node = new Node(ele);
if (size == 0) {
this.first = node;
this.last = node;
} else {
node.next = this.first;
this.first.prev = node;
this.first = node;
}
size++;
} public void addLast(Object ele) {// 在尾部增加
Node node = new Node(ele);
if (size == 0) {
this.first = node;
this.last = node;
} else {
this.last.next = node;
node.prev = this.last;
this.last = node;
}
size++;
} public void remove(Object ele) {
Node current = this.first;
for (int i = 0; i < size; i++) {
if (!current.ele.equals(ele)) {
if (current.next == null) {
return;
}
current = current.next;
}
}
if (current == this.first) {
this.first = current.next;
this.first.prev = null;
} else if (current == this.last) {
this.last = current.prev;
this.last.next = null;
} else {
current.prev.next = current.next;
current.next.prev = current.prev;
}
size--;
} @Override
public String toString() {
if (size == 0) {
return "[]";
} else {
StringBuilder sb = new StringBuilder(size * 3 + 1);
Node current = this.first;// 第一个节点
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(current.ele);
if (i != size - 1) {
sb.append(",");
} else {
sb.append("]");
}
current = current.next;
}
return sb.toString();
}
} public class Node {
public Node(Object ele) {
this.ele = ele;
} Node prev;
Node next;
public Object ele;
}
}

3.双向队列

 package deque;

 import linked.MyLinkedArrayList;

 public class MyDeque extends MyLinkedArrayList {
public Object getFirst() {
return this.first.ele;
} public Object getLast() {
return this.last.ele;
} public void removeFirst(Object ele) {
super.remove(this.first);
} public void removeLast(Object ele) {
super.remove(this.last);
} public void addFirst(Object ele) {
super.addFirst(ele);
} public void addLast(Object ele) {
super.addLast(ele);
} }

4.堆

 package stack;

 import array.MyArrayList;

 //栈
public class MyStack extends MyArrayList {
// 入栈
public void push(Object ele) {
super.add(ele);
} // 删除栈顶元素
public void pop() {
int index = super.size() - 1;
super.remove(index);
} // 查询栈顶元素
public Object peek() {
int index = super.size() - 1;
return super.get(index);
} }

Java数据结构的实现的更多相关文章

  1. Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用

    Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...

  2. JAVA数据结构系列 栈

    java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...

  3. Java数据结构之树和二叉树(2)

    从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...

  4. Java数据结构之树和二叉树

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  5. Java数据结构之线性表(2)

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  6. Java数据结构之线性表

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  7. java 数据结构 图

    以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客,主要是在自己理解的基础上进行记录. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示 ...

  8. java 数据结构 队列的实现

    java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ...

  9. java 数据结构 栈的实现

    java数据结构之栈的实现,可是入栈,出栈操作: /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ No ...

  10. Java数据结构和算法

    首先,本人自学java,但是只学习了java的基础知识,所以想接下来学习一下数据结构和算法,但是找了很多教材,大部分写的好的都是用c语言实现的,虽然知道数据结构和算法,跟什么语言实现的没有关系,但是我 ...

随机推荐

  1. Python正则表达

    ```# -*- coding:utf-8 -*-import re re - Support for regular expressions (RE).正则表达式是一个特殊的字符序列,它能帮助你方便 ...

  2. spring-boot 1.4.x遇到的cpu高的问题

    如果你的spring-boot应用里tomcat线程耗cpu较高,并主要耗在做读取jar的操作上(堆栈类似下面),可能跟我们遇到同样的问题. CRC32.update(byte[], int, int ...

  3. java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)

    倒计时程序 涉及到的东西: javafx简单的界面,布局,按钮,文本框,事件响应 java.util.Timer,用于定时 SimpleDateFormat用于在String和Date之间转换. ja ...

  4. CTF传送门

    https://www.zhihu.com/question/30505597详细见知乎 推荐书: A方向: RE for BeginnersIDA Pro权威指南揭秘家庭路由器0day漏洞挖掘技术自 ...

  5. Jmeter压力测试入门操作

    Jmeter压力测试入门   1. 前言 Jmeter 是Apache组织开发的基于Java的压力测试工具,开源并且支持多个操作系统,是一款很好的HTTP测试工具.本篇文章主要的目的是帮助没有接触过J ...

  6. 前端给div加滚动条样式修改

    <!DOCTYPE html> <html lang="en">       <head>             <meta chars ...

  7. 关于 “VMware Workstation 不可恢复错误- (vcpu-0)”

    重装系统后第一次在 VMware Workstation 上创建虚拟机,结果出现了 VMware Workstation 不可恢复错误: (vcpu-0) 错误. 于是我们遵循它给出的提示,查看一下日 ...

  8. jquery控制滚动条

    $(function () { $("table tr td a").css('white-space', 'nowrap'); $("div[id$=ctlScroll ...

  9. raid管理

    raid管理 使用工具命令 storcli64 查看磁盘状态 storcli64 /c0 show 注:现在磁盘状态为UGood状态,表示可以直接制作raid 若磁盘状态为JBOD,则制作raid时会 ...

  10. 订阅无法在 ARM 模式下创建虚拟机,只能在 ASM 模式下创建 Azure VM 部署

    问题描述 资源组所有者可以在新版 portal 创建经典模式的虚拟机,但是无法创建 ARM 模式的虚拟机. 问题现象 环境中有个相对权限比较高的账户,比如 account admin (以下简称为 A ...