博客
关于我
线型表的顺序存储结构----顺序表(学习笔记)
阅读量:489 次
发布时间:2019-03-07

本文共 2725 字,大约阅读时间需要 9 分钟。

首先,我们定义了一条长度为80的链表,该链表的元素编号从1到80。接下来,我们实现了链表的增、删、清空功能。以下是各操作的实现细节:

插入算法

  • 判断插入位置是否合理。如果位置超出链表长度或为负数,提示插入位置不对。
  • 向插入位置后面的所有元素向后移一位。
  • 将目标元素插入到指定位置。
  • 链表长度增加1。
  • 删除算法

  • 判断删除位置是否合理。若位置超出链表长度或为负数,提示位置不对。
  • 向删除位置后面的所有元素向前移一位。
  • 删除指定位置的元素。
  • 链表长度减1。
  • 查找算法

  • 使用for循环和equals方法逐一比较目标值和链表中每个元素的值。
  • 如果找到目标值,返回其索引值。
  • 下面是实现代码:

    public interface ListIntf {    public int size(); // 获取链表长度    public void clear(); // 清空链表    public boolean isEmpty(); // 判断是否为空表    public Object get(int i); // 获取i位置的元素    public int indexOf(Object obj); // 获取元素的索引位置    public Object getPre(Object obj); // 获取前驱元素    public Object getNext(Object obj); // 获取后驱元素    public void insertElementAt(Object obj, int i); // 插入元素    public Object remove(int i); // 移除元素    public Object remove(Object obj); // 移除元素}

    实现上述接口的具体类为Sqlist:

    public class Sqlist implements ListIntf {    final int maxlen = 100;    int len = 80;    int num[] = new int[maxlen];    public Sqlist() {        for (int i = 0; i < len; i++) {            num[i] = 0;        }    }    public int size() {        return len;    }    public void clear() {        for (int i = 0; i < num.length; i++) {            num[i] = 0;        }    }    public boolean isEmpty() {        int index = this.indexOf(null);        return index == -1;    }    public Object get(int i) {        return num[i - 1];    }    public int indexOf(Object obj) {        for (int i = 0; i < num.length; i++) {            if (obj.equals(num[i])) {                return i;            }        }        return -1;    }    public Object getPre(Object obj) {        int index = this.indexOf(obj);        if (index == 0) {            return null;        } else {            return num[index - 1];        }    }    public Object getNext(Object obj) {        int index = this.indexOf(obj);        if (index == num.length - 1) {            return null;        } else {            return num[index + 1];        }    }    public void insertElementAt(Object obj, int i) {        if (i < 1 || i > len) {            System.out.println("插入位置不对");        } else {            for (int j = len; j > i; j--) {                num[j + 1] = num[j];            }            num[i] = (int) obj;            len++;        }    }    public Object remove(int i) {        if (i < 1 || i > len) {            System.out.println("删除位置不对");            return null;        } else {            for (int j = i - 1; j >= 0; j--) {                num[j] = num[j + 1];            }            num[i - 1] = 0;            len--;            return num[i];        }    }}

    运行结果示例:

    • 索引16位置前驱元素为15
    • 索引16位置后驱元素为17
    • 索引16位置元素为17
    • 插入索引80的81后,链表为12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535454555657585960616263646566676869707172737475767778798081

    转载地址:http://uhwcz.baihongyu.com/

    你可能感兴趣的文章
    PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
    查看>>
    Qt开发——简易调色板QPalette
    查看>>
    PostgreSQL-解决连接时遇到的乱码问题
    查看>>
    PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
    查看>>
    PostgreSQL9.1 双机部署配置(主备数据同步)
    查看>>
    Qt开发——简易网络浏览器(一)
    查看>>
    Qt开发——简易成绩登记系统
    查看>>
    Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句
    查看>>
    Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
    查看>>
    Postgresql中的表结构和数据同步/数据传输到Mysql
    查看>>
    Postgresql中自增主键序列的使用以及数据传输时提示:错误:关系“xxx_xx_xx_seq“不存在
    查看>>
    postgreSQL入门命令
    查看>>
    PostgreSQL删除数据库报"ERROR: There is 1 other session using the database."
    查看>>
    Qt开发——爱情公寓人事管理系统
    查看>>
    PostgreSQL和Oracle两种数据库有啥区别?如何选择?
    查看>>
    Postgresql在Windows中使用pg_dump实现数据库(指定表)的导出与导入
    查看>>
    PostgreSQL在何处处理 sql查询之四
    查看>>
    postgresql基本使用
    查看>>
    PostgreSQL学习总结(10)—— PostgreSQL 数据库体系架构
    查看>>
    PostgreSQL学习总结(11)—— PostgreSQL 常用的高可用集群方案
    查看>>