Java数据结构的实现
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数据结构的实现的更多相关文章
- Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用
Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...
- JAVA数据结构系列 栈
java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...
- Java数据结构之树和二叉树(2)
从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...
- Java数据结构之树和二叉树
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- java 数据结构 图
以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客,主要是在自己理解的基础上进行记录. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示 ...
- java 数据结构 队列的实现
java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ...
- java 数据结构 栈的实现
java数据结构之栈的实现,可是入栈,出栈操作: /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ No ...
- Java数据结构和算法
首先,本人自学java,但是只学习了java的基础知识,所以想接下来学习一下数据结构和算法,但是找了很多教材,大部分写的好的都是用c语言实现的,虽然知道数据结构和算法,跟什么语言实现的没有关系,但是我 ...
随机推荐
- BNU 20950 ——沉重的货物 —————— · 最短路、最短边最大化」
沉重的货物 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: ...
- 【Shell】shell 判断文件夹或文件是否存在
1.文件夹不存在则创建,文件夹是directory if [ ! -d "/data/" ];then mkdir /data else echo "文件夹已经存在&qu ...
- 6、图标:icon
1.图标 /* ---html----*/ <ion-content text-center class="icons-basic-page"> <ion-row ...
- MVC5 model常见的写法
1.数据库表中为ID的字段 [Key] //关键字 [Required] //不为空 [Display(Name = "ID")] public int id { get; set ...
- App调用safar
/调用safar打开网页 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.cnblo ...
- hibernate open session in view 抛出异常解决方法
在使用open-session-in-view的时候,如果使用不当,有可能抛出两种异常1,NonUniqueObjectException2,在配合spring使用的时候会可能会抛出org.sprin ...
- 【代码笔记】Java常识性基础补充(一)——赋值运算符、逻辑运算符、三元运算符、Scanner类、键盘输入、Random类、随机数
为什么要进行Java常识性基础补充? 之前学习Java语言,学得很多很杂,而且是很多不同的方面插入讲解的,比如在跟班上课,自学java编程例子,java语法,过了很久,因为各种原因长时间不怎么写,有时 ...
- js简单实现表格排序
昨天看到一篇关于表格排序的随笔,鉴于本人还只会简单的js,不会使用封装,所以自己也试了一下写这个效果.可能不太优化,原理思路是:获取行对象tr,排序tr中要比较的对象td,排序后添加回tbody.如下 ...
- arcgis版接合图表5.2 免费软件,支持国家2000坐标系,ArcGIS10.0,ArcGIS10.1,ArcGIS10.2都可以使用
下载地址:http://files.cnblogs.com/gisoracle/jionmap52.rar 1. 国家2000,西安80,北京54.坐标系的接合图表生成.根据经纬度范围,坐标 ...
- Android应用开发基础之二:数据存储和界面展现(二)
常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRightOf="@id/tv1" 设置在指 ...