博客
关于我
线型表的顺序存储结构----顺序表(学习笔记)
阅读量: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/

    你可能感兴趣的文章
    poj 2386 Lake Counting(BFS解法)
    查看>>
    poj 2387 最短路模板题
    查看>>
    POJ 2391 多源多汇拆点最大流 +flody+二分答案
    查看>>
    POJ 2403
    查看>>
    poj 2406 还是KMP的简单应用
    查看>>
    POJ 2431 Expedition 优先队列
    查看>>
    Qt笔记——获取位置信息的相关函数
    查看>>
    POJ 2484 A Funny Game(神题!)
    查看>>
    POJ 2486 树形dp
    查看>>
    POJ 2488:A Knight&#39;s Journey
    查看>>
    SpringBoot为什么易学难精?
    查看>>
    poj 2545 Hamming Problem
    查看>>
    poj 2723
    查看>>
    poj 2763 Housewife Wind
    查看>>
    Qt笔记——模型/视图MVD 文件目录浏览器软件
    查看>>
    POJ 2892 Tunnel Warfare(树状数组+二分)
    查看>>
    poj 2965 The Pilots Brothers' refrigerator-1
    查看>>
    poj 3026( Borg Maze BFS + Prim)
    查看>>
    POJ 3041 - 最大二分匹配
    查看>>
    POJ 3041 Asteroids(二分匹配模板题)
    查看>>