顺序表
静态顺序表:使用定长数组存储。
动态顺序表:使用动态开辟的数组存储。

接口

package com.github.sqlist;public interface ISequence {// 在 pos 位置插入 valboolean add(int pos, Object data);// 查找关键字 key 找到返回 key 的下表,没有返回 -1int search(Object key);// 查找是否包含关键字 key 是否在顺序表当中(这个和search有点冲突)boolean contains(Object key);// 得到 pos 位置的值Object getPos(int pos);// 删除第一次出现的关键字 keyObject remove(Object key);// 得到顺序表的长度int size();// 打印顺序表void display();// 清空顺序表以防内存泄漏void clear();
}

实现接口里的每个方法

package com.github.sqlist;import java.util.Arrays;/** 顺序表*/
public class MySequenceImpl implements ISequence {private Object[] elem;// 有效数据个数private int usedSize;private static final int DEFAULT_SIZE = 10;public SqList() {this.elem = new Object[DEFAULT_SIZE];this.usedSize = 0;}/*** 判断是否为满* @return 满了返回true,否则返回false*/private boolean isFull() {return this.elem.length == this.usedSize;}/*** 在 pos 位置插入 val* @param pos*        要插入的位置* @param data*        要插入的值* @return*        插入成功返回true,否则返回false*/@Overridepublic boolean add(int pos, Object data) {// 1. 判断pos位置的合法性if (pos < 0 || pos > this.elem.length) {return false;}// 2. 判断是否满了,如果满了进行扩容if (isFull()) {this.elem = Arrays.copyOf(this.elem, 2*this.elem.length);}// 3. 把pos位置以及之后的数全部向后挪一个位置for (int i = this.usedSize-1; i >= pos; i--) {this.elem[i+1] = this.elem[i];}// 4. 在 pos 位置插入 valthis.elem[pos] = data;// 5. 更新长度this.usedSize++;return true;}/*** 判断是否为空* @return 表为空返回true,否则返回false*/private boolean isEmpty() {return this.usedSize == 0;}/*** 查找关键字 key 找到返回 key 的下表,没有返回 -1* @param key 关键字的值* @return 查找成功返回true,失败返回false*/@Overridepublic int search(Object key) {// 1. 判断是否为空if (isEmpty()) {return -1;}// 2. 遍历查找for (int i = 0; i < this.elem.length; i++) {// 注意:判断条件不能写成:this.elem[i] == keyif (this.elem[i].equals(key)) {return i;}}return -1;}/*** 查找是否包含关键字 key 是否在顺序表当中(这个和search有点冲突)* @param key 关键字的值* @return 查找成功返回true,失败返回false*/@Overridepublic boolean contains(Object key) {// 1. 判断是否为空if (isEmpty()) {return false;}// 2. 遍历查找for (int i = 0; i < this.elem.length; i++) {// 注意:判断条件不能写成:this.elem[i] == keyif (this.elem[i].equals(key)) {return true;}}return false;}/*** 得到 pos 位置的值* @param pos 得到的值的位置* @return 成功得到 pos位置的值返回true,否则返回false*/@Overridepublic Object getPos(int pos) {// 1. 判断位置是否合法if (pos<0 || pos>=this.elem.length) {return null;}// 2. 位置合法return this.elem[pos];}/*** 删除第一次出现的关键字 key* @param key 关键字* @return*/@Overridepublic Object remove(Object key) {// 1. 先查表看有没有这个关键字// index:关键字下标int index = search(key);// 2. 若表里没有这个关键字if (index == -1) {return null;}// 3. 表里有这个关键字Object data = this.elem[index];int i;// 删除第一次出现的关键字 key,把key后面的数全部向前挪一个位置for (i = index; i < this.usedSize; i++) {elem[i] = elem[i+1];}this.usedSize--;this.elem[i+1] = null;return data;}/*** 得到顺序表的长度* @return 顺序表的长度*/@Overridepublic int size() {return this.usedSize;}/*** 打印顺序表*/@Overridepublic void display() {for (int i = 0; i < this.usedSize; i++) {System.out.print(this.elem[i] + " ");}System.out.println();}/*** 清空顺序表以防内存泄漏*/@Overridepublic void clear() {for (int i = 0; i < this.usedSize; i++) {this.elem[i] = null;}}
}

测试方法的正确性

package com.github.sqlist;public class TestDemo1 {public static void main(String[] args) {MySequenceImpl mySequence = new MySequenceImpl();for (int i = 0; i < 10; i++) {mySequence.add(i,i);}System.out.println("在最大值10的范围内插入数据:");mySequence.display();System.out.println();for (int i = 10; i < 20; i++) {mySequence.add(i,i);}System.out.println("扩容:");mySequence.display();System.out.println();System.out.println("随机位置插入数据:");mySequence.add(9,"list");mySequence.display();System.out.println();System.out.println("search查找一个数据:"+mySequence.search("list"));System.out.println("contains查找一个数据:"+mySequence.contains("list"));System.out.println();System.out.println("查找某一个位置对应的值:"+mySequence.getPos(9));System.out.println();System.out.println("删除一个数据:"+mySequence.remove(8));mySequence.display();System.out.println();System.out.println("得到顺序表的长度:"+mySequence.size());}
}

测试结果:

Java 实现顺序表的基本操作相关推荐

  1. C++:顺序表的基本操作(待完善)

    根据命令提示进行顺序表的基本操作(待完善) #include<iostream> #include<algorithm> using namespace std; #defin ...

  2. PTA 顺序表的基本操作

    原题有50分,这个答案有45分,欢迎指出不足 ;) 6-2 顺序表基本操作 (50 分) 实现顺序表的基本操作,如初始化.插入.删除.输出等. 注意:顺序表中可有重复元素值. 要求:写出三个基本操作函 ...

  3. 【头歌】顺序表的基本操作

    第1关:顺序表的插入操作 任务描述 本关任务:编写顺序表的初始化.插入.遍历三个基本操作函数. 相关知识 顺序表的存储结构 顺序表的存储结构可以借助于高级程序设计语言中的数组来表示,一维数组的下标与元 ...

  4. 编程实现顺序表的基本操作

    void InitList(SqList &L)//建立空顺序表函数 voidListInsert(SqList &L, int i, ElemType e) //在顺序表中第i个位置 ...

  5. 顺序表的基本操作(详细、全面)

    顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素 ...

  6. 线性表之顺序表的基本操作

    线性表的定义 线性表是具有相同数据类型的 n ( n > = 0 ) n(n>= 0) n(n>=0)个数据元素的有限序列,其中 n n n为表长,当 n = 0 n=0 n=0时线 ...

  7. 线性表-顺序表的基本操作

    线性表的定义和特点 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列 线性表中元素的个数n(n≥0)称为线性表的长度 空表:n=0 对于非空的线性表或线性结构,特点为: 存在唯一的一个被称作& ...

  8. 简单认识顺序表的基本操作

    文章目录 顺序表 1. 顺序表的概念 2. 顺序表的基本操作 2.1 顺序表的基本属性 2.2 增加元素操作 2.2.1 头插 2.2.2 尾插 2.2.3 按位置插入元素 2.3 删除元素操作 2. ...

  9. 顺序表的基本操作 SCAU8576、SCAU8577、SCAU8578

    //此项目功能:完成顺序表的基本操作及OJ给出的三道题:8576.8577.8578 #include <stdio.h> #include <malloc.h> #defin ...

最新文章

  1. Perl学习笔记(2)
  2. 最值反演[PKUWC2018][loj2542]随机游走
  3. HashMap两种遍历数据的方式
  4. B端产品如何寻找竞品?
  5. groovy和java结合使用
  6. 云服务器svn怎么用,腾讯云服务器搭建SVN
  7. 服务器控件下拉框显示隐藏,演练:在 GridView Web 服务器控件中编辑时显示下拉列表...
  8. Java学习笔记--字符串和文件IO
  9. 怎样学好python编程-一个新手,什么编程都没学过怎么学好Python?
  10. java文件中获取创建日期_如何在Java中获取文件的上次修改日期
  11. OpenCV Show Image cvShowImage() 使用方法
  12. android最新版安装教程,在PC上安装Android系统的图文教程
  13. 智能中线保护装置-零线电流保护器-中性线保护装置
  14. Python读取docx表格中的合并单元格信息
  15. 2019届互联网校招薪资盘点!
  16. autograd-自动求导系统
  17. 客户贷后还款提醒优化项目
  18. “天成云”品牌发布——Tungsten Fabric助力开源开放生态发展
  19. 【12.3】call_soon、call_at、call_later、call_soon_threadsafe
  20. 【论文写作】用对模板,一周码完一篇SCI初稿!

热门文章

  1. C语言 日期转时间戳
  2. python大数相乘
  3. 沪江网校前端架构漫谈
  4. DTM、DEM与DSM的区别
  5. java和区块链哪个难_java 区块链中设计合理的难度系数
  6. Java核心技术卷一
  7. 我的PHP爬虫实现一页式学习工具 : 我的超级文档查看利器 把文档所有页面当做一个页面输出 一直pagedown就可以快速学习 关键词完整全文搜索...
  8. 日志显示格式%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
  9. 虚拟机能ping主机,主机ping虚拟机请求超时
  10. kafka是什么,怎么用?