线性表 顺序存储 链式存储 ---java实现
首先抽象出一个线性表抽象类(包括主要的增删操作)
public abstract class MyAbstractList<E> {
	public abstract void add(E t);
	public abstract void add(int index,E t);
	public abstract void remove();
	public abstract void remove(int index);
	public abstract int getCount();
	public abstract E get(int index);
	public abstract String toString();
	public abstract boolean contains(E e);
}
ArrayList2继承抽象类,并实现当中的全部抽象方法
public class ArrayList2<E> extends MyAbstractList<E>{
	private E[] e;
	private int len;
	private int size;
	ArrayList2(){
		this.size = 0;
		this.len = 10;
		this.e =  (E[]) new Object[len];
	}
	@Override
	public void add(E t) {
		// TODO Auto-generated method stub
		ensureCap();
		e[size] = t;
		size++;
	}
	private void ensureCap() {
		// TODO Auto-generated method stub
		if(getCount()>=len){
			E[] temp = (E[]) new Object[len*2+1];
			len = len*2+1;
			for(int i=0;i<len;i++){
				temp[i] = e[i];
			}
		}
	}
	@Override
	public void add(int index, E t) {
		// TODO Auto-generated method stub
		ensureCap();
		for(int i=size-1;i>=index;i--){
			e[i+1] = e[i];
		}
		e[index] = t;
		size++;
	}
	@Override
	public void remove() {
		// TODO Auto-generated method stub
		e[size] = null;
		size--;
	}
	@Override
	public void remove(int index) {
		// TODO Auto-generated method stub
		for(int i=index;i<size-1;i++){
			e[index]  = e[index+1];
		}
		e[size] = null;
		size--;
	}
	@Override
	public E get(int index){
		if(index>0 && index<size){
			return e[index];
		}
		else return null;
	}
	public boolean isEmpty(){
		return size>0? false : true;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return size;
	}
	@Override
	public String toString(){
		StringBuffer sb  = new StringBuffer();
		sb.append("[");
		for(int i=0;i<size-1;i++){
			sb.append(e[i]).append(",");
		}
		sb.append(e[size-1]);
		sb.append("]");
		return sb.toString().trim();
	}
	@Override
	public boolean contains(E e1){
		boolean bool = false;
		for(int i=0;i<size;i++){
			if(e[i] == e1){
				bool = true;
			}
		}
		return bool;
	}
}
LinkedList2 继承抽象类,并实现方法
public class LinkedList2<E> extends MyAbstractList<E> {
	private int size;
	private Node<E> head;
	public LinkedList2(){
		this.size = 0;
		head = null;
	}
	@Override
	public void add(E t) {
		// TODO Auto-generated method stub
		Node<E> e = new Node<E>(t);
		if(size == 0) head = e;
		else{
			Node temp = head;
			while(temp.next!=null){
				temp = temp.next;
			}
			temp.next = e;
			size++;
		}
	}
	@Override
	public void add(int index, E t) {
		// TODO Auto-generated method stub
		if(index == 0 || index>size) add(t);
		else{
			Node current = head;
			Node<E> e = new Node<E>(t);
			for(int i=0;i<index-1;i++){
				current = current.next;
			}
			e.next = current.next;
			current.next = e;
			size++;
		}
	}
	@Override
	public void remove() {
		// TODO Auto-generated method stub
		remove(size-1);
	}
	@Override
	public void remove(int index) {
		// TODO Auto-generated method stub
		if(index == 0)  removeFirst();
		else if(index == size)  removeLast();
		else if(index<0 || index>size) ;
		else{
			Node<E> pre = head;
			for(int i=0;i<index-1;i++){
				pre = pre.next;
			}
			Node<E> current = pre.next;
			pre.next = current.next;
			size--;
		}
	}
	private void removeLast() {
		// TODO Auto-generated method stub
		if(size == 0) ;
		else{
			Node<E> current = head;
			for(int i=0;i<size-2;i++){
				current = current.next;
			}
			current.next = null;
			size--;
		}
	}
	private void removeFirst() {
		// TODO Auto-generated method stub
		head = head.next;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return size;
	}
	@Override
	public E get(int index) {
		// TODO Auto-generated method stub
		Node<E> current = head;
		for(int i=0;i<index-1;i++){
			current = current.next;
		}
		return current.e;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		StringBuffer sb = new StringBuffer();
		sb.append("[");
		Node<E> current = head;
		for(int i=0;i<size;i++){
			sb.append(current.e).append(",");
		}
		sb.append("]");
		return sb.toString().trim();
	}
	@Override
	public boolean contains(E e) {
		// TODO Auto-generated method stub
		if(size == 0 ) return false;
		else{
			Node<E> current = head;
			for(int i=0;i<size-1;i++){
				if(current.e == e) return true;
				current = current.next;
			}
			return false;
		}
	}
}
/**
 * 链表结点
 */
class Node<E>{
	E e;
	Node<E> next;
	Node(){
		this.next = null;
	}
	Node(E ee){
		e = ee;
		next = null;
	}
}
线性表 顺序存储 链式存储 ---java实现的更多相关文章
- C++线性表的链式存储结构
		C++实现线性表的链式存储结构: 为了解决顺序存储不足:用线性表另外一种结构-链式存储.在顺序存储结构(数组描述)中,元素的地址是由数学公式决定的,而在链式储存结构中,元素的地址是随机分布的,每个元素 ... 
- C 线性表的链式存储实现及插入、删除等操作示例
		一.链式存储的优势 线性表的存储可以通过顺序存储或链式存储实现,其中顺序存储基于数组实现(见本人上一篇博客),在进行插入删除等操作时,需对表内某一部分元素逐个移动,效率较低.而链式结构不依赖于地址连续 ... 
- C++编程练习(2)----“实现简单的线性表的链式存储结构“
		单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素. 对于查找操作,单链表的时间复杂度为O(n). 对于插入和删除操作,单链表在确定位置后,插入和删除时间仅为O(1). 单链表不需要分配存储 ... 
- 数据结构-线性表的链式存储相关算法(C语言实现)
		链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ... 
- 线性表的链式存储——C语言实现
		SeqList.h #ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且 ... 
- typedef struct LNode命名结构指针(线性表的链式存储)
		一.typedef 关键字 1. 简介: typedef工具是一个高级数据特性,利用typedef可以为某一些类型自定义名称. 2. 工作原理: 例如我们定义链表的存储结构时,需要定义结点的存储数据元 ... 
- 线性表的链式存储C语言版
		#include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ... 
- 线性表的链式存储结构的实现及其应用(C/C++实现)
		存档----------- #include <iostream.h> typedef char ElemType; #include "LinkList.h" voi ... 
- javascript实现数据结构:线性表--线性链表(链式存储结构)
		上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ... 
随机推荐
- Linux下禅道系统的搭建
			说明: 禅道系统的搭建,分两大部分 1.xampp环境的搭建 2.禅道系统的搭建 *********************************************************** ... 
- 自动化运维之 ~cobbler~
			一 .Cobbler简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用python开发,小巧轻便(才15k 行python代码),使用简 ... 
- Automate Screen or Button Taps via Tasker : Simulating keypress events
			When using Tasker, sometimes we want to do some automation on screen e.g. screen or button taps. At ... 
- c++中两个类相互包含引用的相关问题
			在构造自己的类时,可能会遇到两个类相互引用的问题. 例如: class A { int i; B b; }; class B { int i; A a; }; 在这种情况下,这样就会出现一个死循环a. ... 
- 用最简单的例子理解观察者模式(Observer Pattern)
			假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户. 把通知这个动作抽象成一个接口. public interface IService { void Notif(); } 客户如果想获得通 ... 
- VS增强插件   Supercharger破解教程
			Supercharger 破解教程:步骤:1.打开Supercharger的options; 2.点击Pricing & Registration 3.复制 license tt4e2HN4X ... 
- Microsoft office2016打开很慢解决
			(1)打开Excel(word.ppt也可以),进入空白纸张,或者随便打开或新建一个文件也行,然后点击左上角“文件”按钮,进入点击“选项”. (2)然后在“常规”选项里,拉到最下面,把“”这个选项去除 ... 
- firedac引擎DATASNAP多表查询和多表提交
			firedac引擎DATASNAP多表查询和多表提交 属性设置FDTableAdapter1.SchemaAdapter := FDSchemaAdapter;FDTableAdapter1.DatS ... 
- Hadoop 组成
			这里介绍一下hadoop的组成, hadoop主要由两部分组成,,一个是hdfs,还有一个是mapreduce 这两个部分在hadoop 2.2.0中分别用start-dfs.sh和start-yar ... 
- python测试开发django-10.django连接mysql
			前言 Django 对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle.本篇以mysql为例简单介绍django连接mysql进行数据操作 Django连 ... 
