美文网首页
数据结构(七) -- 序列

数据结构(七) -- 序列

作者: 峰峰小 | 来源:发表于2016-10-07 21:24 被阅读373次

一,序列

本文将定义并实现一个通用的序列 ADT,从而将向量ADT与列表ADT中的所有方法集成起来——也就是说,这一ADT 将同时支持以秩或位置来访问其中的元素。因此,这种数据结构将适用于解决更多的实际问题。

数据结构(五) -- 向量

数据结构(六) -- 列表


二,序列ADT(AbstractDataType)

序列ADT将同时支持向量ADT与列表ADT中的所有方法,此外,还支持以下两个方法——正是借助这两个方法,我们才得以将秩和位置的概念联系起来:

操作方法 功能描述
rank2Pos(r) 若0 ≤ r < getSize(),则返回秩为r 的元素所在的位置 ;否则,报错
输入:一个(作为秩的)整数
输出:位置
pos2Rank(p) 若p 是序列中的合法位置,则返回存放于p 处的元素的秩 ;否则,报错
输入:一个位置
输出:(作为秩的)整数

三,基于双向链表实现序列

接口:

package dsa.Sequence;

import other.Position;
import dsa.List.ExceptionPositionInvalid;
import dsa.List.List;
import dsa.Vector.ExceptionBoundaryViolation;
import dsa.Vector.Vector;

/*
 * 序列接口
 */

public interface Sequence extends Vector, List {
    // 若0 <= r < getSize(),则返回秩为r的元素所在的位置;否则,报错
    public Position rank2Pos(int r) throws ExceptionBoundaryViolation;

    // 若p是序列中的合法位置,则返回存放于p处的元素的秩;否则,报错
    public int pos2Rank(Position p) throws ExceptionPositionInvalid;
}

实现:

package dsa.Sequence;

import other.Position;
import dsa.Deque.DLNode;
import dsa.List.ExceptionPositionInvalid;
import dsa.List.List_DLNode;
import dsa.Vector.ExceptionBoundaryViolation;

/*
 * 基于双向链表实现序列
 */
public class Sequence_DLNode extends List_DLNode implements Sequence {
    // 检查秩r是否在[0, n)之间
    protected void checkRank(int r, int n) throws ExceptionBoundaryViolation {
        if (r < 0 || r >= n)
            throw new ExceptionBoundaryViolation("意外:非法的秩" + r + ",应该属于[0, "
                    + n + ")");
    }

    // 若0 <= r < getSize(),则返回秩为r的元素所在的位置;否则,报错--O(n)
    public Position rank2Pos(int r) throws ExceptionBoundaryViolation {
        DLNode node;
        checkRank(r, getSize());
        if (r <= getSize() / 2) {// 若秩较小,则
            node = header.getNext();// 从前端开始
            for (int i = 0; i < r; i++)
                node = node.getNext();// 逐一扫描
        } else {// 若秩较大,则
            node = trailer.getPrev();// 从后端开始
            for (int i = 1; i < getSize() - r; i++)
                node = node.getPrev();// 逐一扫描
        }
        return node;
    }

    // 若p是序列中的合法位置,则返回存放于p处的元素的秩;否则,报错--O(n)
    public int pos2Rank(Position p) throws ExceptionPositionInvalid {
        DLNode node = header.getNext();
        int r = 0;
        while (node != trailer) {
            if (node == p)
                return (r);
            node = node.getNext();
            r++;
        }
        throw new ExceptionPositionInvalid("意外:作为参数的位置不属于序列");
    }

    // 取秩为r的元素--O(n)
    public Object getAtRank(int r) throws ExceptionBoundaryViolation {
        checkRank(r, getSize());
        return rank2Pos(r).getElem();
    }

    // 将秩为r的元素替换为obj--O(n)
    public Object replaceAtRank(int r, Object obj)
            throws ExceptionBoundaryViolation {
        checkRank(r, getSize());
        return replace(rank2Pos(r), obj);
    }

    // 插入obj,作为秩为r的元素--O(n);返回该元素
    public Object insertAtRank(int r, Object obj)
            throws ExceptionBoundaryViolation {
        checkRank(r, getSize() + 1);
        if (getSize() == r)
            insertLast(obj);
        else
            insertBefore(rank2Pos(r), obj);
        return obj;
    }

    // 删除秩为r的元素--O(n)
    public Object removeAtRank(int r) throws ExceptionBoundaryViolation {
        checkRank(r, getSize());
        return remove(rank2Pos(r));
    }
}

相关文章

  • 数据结构(七) -- 序列

    一,序列 本文将定义并实现一个通用的序列 ADT,从而将向量ADT与列表ADT中的所有方法集成起来——也就是说,这...

  • python列表

    python列表 序列 基本概念一种数据结构, 数据结构–指的就是计算机中储存数据的方式 序列的分类可变序列—列表...

  • 数据团Python_3. Python序列及整体概述及通用操作

    3. Python序列及整体概述及通用操作 序列是Python最基本的数据结构。 序列可变序列:list不可变序列...

  • 我的Python学习之路2

    序列(sequence) 序列是Python中最基本的一种数据结构数据结构指计算机中数据存储的方式序列用于保存一组...

  • python快速入门

    面对过程: 面对对象: 数据结构 python最基本的数据结构是 序列 python包括6种内建数据序列:列表、元...

  • Pandas常用方法

    一、Pandas数据结构 二、读取数据 三、数据预处理 四、数据选择 五、数值操作 六、数据运算 七、时间序列 八...

  • python 基础知识第7讲:序列-列表

    1.序列 序列:是Python中最基本的一种数据结构。 数据结构指的就是计算机中数据的存储方式。 2.序列的分类 ...

  • Python3 序列

    序列序列是 Python中最基本的数据结构数据结构指计算机中数据存储的方式序列用于保存一组有序的数据,所有的数据在...

  • 序列化和反序列化学习笔记1

    序列化 将数据结构或者对象转换为二进制串的过程。 反序列化 将序列化后的二进制串转换成数据结构或者对象。 数据序列...

  • 10_序列(sequence)

    时间:2018-11-02 作者:魏文应 一、序列 序列是 python 中最基本的一种 数据结构: 数据结构指计...

网友评论

      本文标题:数据结构(七) -- 序列

      本文链接:https://www.haomeiwen.com/subject/pkayyttx.html