java——线性表接口实现
线性表是存储顺序牌类的数据时最常用的数据结构。
实现线性表有两种方式。第一种是使用数组存储线性表的元素。数组是动态创建的。超过数组的容量时,创建一个
新的更大的数组,并且将当前数组中的元素复制到新建的数组中。另一种方法是用链表结构实现。链表由节点组成,每
个结点都是动态生成的,用来存储一个元素。所有的结点连接成一个线性表。
对于线性表的主要操作有:
1、提取线性表的元素
2、在线性表中插入一个新元素
3、从线性表中删除一个元素
4、获取线性表中元素的个数
5、查找线性表中是否包含某个元素
6、判断线性表是否为空
下面这个接口类定义了常用的操作。
package com.ezreal;
public interface ListIntf {
/**
* 返回表长度
* @return
*/
public int size();
/**
* 增加元素
* @param obj
*/
public void add(Object obj);
/**
* 重置为空表
*/
public void clear();
/**
* 判断是否为空
* @return
*/
public boolean isEmpty();
/**
* 第i个数据元素的值
* @param i
* @return
*/
public Object get(int i);
/**
* 返回第一个这个元素的位置
* @param obj
* @return
*/
public int indexOf(Object obj);
/**
* 返回这个元素的前驱
* @param obj
* @return
*/
public Object getPre(Object obj);
/**
* 返回这个元素的后继
* @param obj
* @return
*/
public Object getNext(Object obj);
/**
* 第i个位置插入新的元素对象
* @param obj
* @param i
*/
public void insertElementAt(Object obj ,int i);
/**
* 删除第i个元素
* @param i
* @return
*/
public Object remove(int i);
/**
* 删除数据元素obj,并返回这个元素的值
* @param obj
* @return
*/
public Object remove(Object obj);
}
接下来用数组实现线性表。数组的类型是Object类型,所以,数组中每个元素实际元素存储的是对象的。
package com.ezreal;
public class SqList implements ListIntf {
final int maxlen = 1000;
Object v[] = new Object[maxlen];
int len = 0;
public SqList() {
}
@Override
public void add(Object obj) {
if(len == maxlen){
System.out.println("溢出");
}else{
v[len] = obj;
len++;
}
}
@Override
public int size() {
return len;
}
@Override
public void clear() {
len =0;
}
@Override
public boolean isEmpty() {
if(len == 0){
return true;
}
return false;
}
@Override
public Object get(int i) {
if(i<1 || i>len){
System.out.println("获取元素位置不正确");
}else{
return v[i-1];
}
return null;
}
@Override
public int indexOf(Object obj) {
for(int i=0;i<len;i++){
if(v[i].equals(obj)){
return i;
}
}
return -1;
}
@Override
public Object getPre(Object obj) {
int i = indexOf(obj);
if(i==-1){
System.out.println("无该元素");
}else if(i == 0){
System.out.println("无前驱");
}else{
return v[i-1];
}
return null;
}
@Override
public Object getNext(Object obj) {
int i = indexOf(obj);
if(i==-1){
System.out.println("无该元素");
}else if(i == len){
System.out.println("无前驱");
}else{
return v[i+1];
}
return null;
}
@Override
public void insertElementAt(Object obj, int i) {
if(len == maxlen){
System.out.println("溢出");
return;
}else {
if(i < 0 || i >len){
System.out.println("插入位置不正确");
return;
}else{
for(int j=len-1;j>=i-1;j--){
v[j+1]=v[j];//第i个元素和他后面的所有元素均后移一个位置
}
v[i-1]=obj;
len++;
return;
}
}
}
@Override
public Object remove(int i) {
Object obj;
if(i<1 || i>len){
System.out.println("删除位置不正确");
}else{
obj = v[i-1];
for(int j=i;j<len;j++){
v[j-1]=v[j];
}
len--;
return obj;
}
return null;
}
@Override
public Object remove(Object obj) {
int i=indexOf(obj);
if(i==-1){
System.out.println("无该元素");
}else {
remove(i+1);
}
return null;
}
}
如有不对的地方,请各位看官指出。
java——线性表接口实现的更多相关文章
- Java线性表的排序
Java线性表的排序 ——@梁WP 前言:刚才在弄JDBC的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈 ...
- 线性表接口的实现_Java
线性表是其组成元素间具有线性关系的一种线性结构,对线性表的基本操作主要有插入.删除.查找.替换等,这些操作可以在线性表的任何位置进行.线性表可以采用顺序存储结构和链式存储结构表示. 本接口的类属于da ...
- Java 线性表、栈、队列和优先队列
1.集合 2.迭代器 例子: 3.线性表 List接口继承自Collection接口,有两个具体的类ArrayList或者LinkedList来创建一个线性表 数组线性表ArrayList Linke ...
- java线性表学习笔记(一)
线性表是一种按顺序储存数据是的常用结构,大多数的线性表都支持以下的典型操作: 从线性表提取插入删除一个数据: 找出线性表中的某一个元素: 找出线性表中的元素: 确定线性表中是否包含某一个元素,确定线性 ...
- 数据结构与算法分析java——线性表1
说到线性结构的话,我们可以根据其实现方式分为三类: 1)顺序结构的线性表 2)链式结构的线性表 3)栈和队列的线性表 应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有&qu ...
- java线性表之顺序表实现
仿照arrayList写了一个简化版的线性表,主要为了用来研究arrayList在实现什么操作的情况下比较节省性能,楼主文采很差,直接上代码. import java.util.Arrays; pub ...
- 数据结构与算法分析java——线性表3 (LinkedList)
1. LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作.LinkedList 实现 Lis ...
- 数据结构与算法分析java——线性表2(ArrarList )
ArrayList ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, C ...
- java线性表学习笔记(二)
链表中的每一个元素都包含一个称为节点的结构,每向链表中增加一个元素,就会产生一个与之相关的节点,每个节点与它相邻的节点相连接(这是基础吧,不过在看c的时候没认真看,呼). 定义节点类如下(使用了泛型, ...
随机推荐
- IOTutility 一个轻量级的 IOT 基础操作库
IOTutility 一个轻量级的 IOT 基础操作库 Base utility for IOT devices, networking, controls etc... IOTutility 的目的 ...
- 回文词 (Palindromes,Uva401)
例题 3-3 回文词 (Palindromes,Uva401) 输入一个字符中,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓回文串,就是反转以后和原串相同,如abba和madam.所有 ...
- DP_括号匹配序列问题
括号匹配问题 简单括号匹配问题是给出字符串,判断字符串中的括号是否匹配,此类问题核心解决方案就是利用栈的后进先出的特性,从左到右依次遍历字符串,遇左括号进栈,遇右括号将其与栈顶元素配对,若能配对,则栈 ...
- Makefile:如何写目标依赖
本文并不是Makefile的教程,仅是本人学习时的感悟. Makefile的基本格式 目标:依赖文件(or 目标) [tab]命令 目标: 是要生成的或操作的命令的索引 依赖: 是生成目标依赖的文件或 ...
- 《Java核心技术36讲》阅读笔记:谈谈对Java平台的理解笔记
1. 谈谈你对Java平台的理解. Java是一种面向对象的语言,最显著的特性有两个方面: 一个就是一次编译,到处运行(Write once, run anywhere),能够非常容易的获得跨平台能力 ...
- 【leetcode 简单】 第五十二题 有效电话号码
给定一个文本文件 file.txt,请只打印这个文件中的第十行. 示例: 假设 file.txt 有如下内容: Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Li ...
- 版本控制工具——SVN
一.需求 需求之一:备份 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流 需求之二:代码还原 这个项目中需要一个很复杂的功能,老王摸索 ...
- 20155223 2006-2007-2 《Java程序设计》第二周学习总结
20155223 2006-2007-2 <Java程序设计>第二周学习总结 第三章内容总结 3.1 类型 正如我所预料的情况一样:Java脱胎于C语言,就一定会留有和C语言相近或相同的语 ...
- 20145209 实验三 《敏捷开发与XP实践》 实验报告
20145209 实验三 <敏捷开发与XP实践> 实验报告 实验内容 XP基础. XP核心实践. 相关工具. 实验步骤 敏捷开发与XP 1.敏捷开发 敏捷开发(Agile Developm ...
- JS中的eval函数
最近开始慢慢学习前端的脚本了,上次碰到了一个问题,需要通过一个对象的属性名称来获得这个对象这个属性的值.如果在C#中,那么直接通过反射就可以了.而在js中,也有类似的函数,那就是eval ...