算法之 线性表顺序结构

package math;

import java.util.ArrayList;
import java.util.List;

//线性表顺序结构
public class LinearTable {
    public int len = 0; //线性表表长度
    public List list;
    public int currentLen = 0;
    //构造方法,申请一个对应长度得 线性表
    public LinearTable(int i){
        this.list = new ArrayList(i);
        this.len = i;
    }

    //是否微空
    public boolean listEmpty(){
        if(this.getElem(0) == null){
            return true;
        }else{
            return false;
        }
    }
    //清空数组
    public void clearList(){
        for (int i = 0; i < len; i++) {
            if(list.get(i) != null){
                list.remove(i);
            }else{
                break;
            }
        }

    }
    //增删改查
    //在某个位置 增加一个
    public void listInsert(int i,Object obj){
        if(this.check(i) && obj != null){
            //当线性表长度 等于数据长度时候
            if(currentLen == len){
                throw new RuntimeException("线性表已满");
            }
            //从最后一项开始 让前一项等于后一项   一直到J = i-1 也就是 j>i
            if(i >= currentLen+1){
                //判断是否插入 插入最后一项
                list.add(obj);
                System.out.println("插入在当前线性表最后面");
            }else{
                System.out.println("--");
                Object temp = new Object();
                for (int j = currentLen+1; j >=i-1; j--) {
                    temp = list.get(j-1);
                    list.set(j,temp);
                    // 后一项 等于前一项
                    if(j == i-1){
                        list.set(j, obj);
                    }
                }
            }
            currentLen = currentLen+1;//长度加一
        }else{
            throw new RuntimeException("listInsert 第二个参数不能为空");
        }
    }
    public void listDelete(int i){
        this.check(i);
        //验证是否微空表
        if(!this.listEmpty()){
            throw new RuntimeException("当前线性表为空,不允许删除操作");
        }
        if(i > currentLen ){
            //判断是否为没有的下标
            throw new RuntimeException("下标不存在");
        }else{
            Object temp = new Object();
            for (int j = i-1; j < currentLen; j++) {
                temp = list.get(j+1);
                // 当前项 等于后一项
                list.set(j,temp);
            }
            //每次删除最后一项
            list.remove(currentLen-1);
            currentLen = currentLen-1;//长度减一
        }

    }
    public void listUpdate(int i,Object obj){
        this.check(i);
        //判断与当前长度得关系
        if(i>currentLen){
            throw new RuntimeException("无效得数组下标");
        }else{
            list.set(i-1, obj);
        }
    }
    public Object getElem(int i){

        this.check(i);
        //判断与当前长度得关系
        if(i>currentLen){
            throw new RuntimeException("无效的组下标");
        }else{
            return list.get(i);
        }
    }
    public int listLength(){
        return currentLen;
    }

    public boolean check(int i){
        // 大于0项
        if(i <= len && i >= 0 ){
            return true;
        }else{
            throw new RuntimeException("无效的下标值");
        }
    }
}
时间: 2024-12-28 15:49:47

算法之 线性表顺序结构的相关文章

数据结构与算法 1 :基本概念,线性表顺序结构,线性表链式结构,单向循环链表

[本文谢绝转载] <大纲> 数据结构: 起源: 基本概念 数据结构指数据对象中数据元素之间的关系  逻辑结构 物理结构 数据的运算 算法概念: 概念 算法和数据结构区别 算法特性 算法效率的度量 大O表示法 时间复杂度案例 空间复杂度 时间换空间案例 1)线性表: 线性表初步认识: 线性表顺序结构案例 线性表顺序结构案例,单文件版 线性表的优缺点 企业级线性表链式存储案例:C语言实现 企业级线性表链式存储案例:C语言实现 单文件版 企业级线性表链式存储案例,我的练习  线性表链式存储优点缺点

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

数据结构线性表顺序结构的实现

package com.he.list; import java.util.Arrays; import org.w3c.dom.ls.LSException; class ArrayList { private int length;// the list's length private int[] store;// store the data // initialize an empty list public ArrayList initList(String name) { retu

数据结构与算法-总结线性表顺序存储结构的优缺点

这一章节主要总结线性表顺序存储结构的优缺点. 在总结之前,我们来讨论一下线性表顺序存储结构的执行方法的时间复杂度: 存储.读取:O(1) 插入.删除:O(n) 优点: 1.无需为表中的逻辑关系增加额外的存储空间 2.可以快速存取表中对象 缺点: 1.插入和删除需要移动大量的对象 2.存储设备的碎片化 3.当线性表过大的时候,很难确定长度 版权声明:本文为博主原创文章,未经博主允许不得转载.

线性表-顺序结构存储

线性表反映数据之间的关系是一对多一的关系,每个节点都有唯一的前驱,唯一的后继.它可以采用顺序存储,也可以采用链式存储.本章写的是顺序存储的实现. class sqList { public $list = null; // 顺序表 /** * 初始化线性表 * @param array $list * @return void */ public function __construct(&$list) { if (!is_array($list)) return false; $this->

数据结构----线性表顺序和链式结构的使用(c)

PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写好了,java还有三个特性,封装.继承.多态.当然这里不是讲Java,这里主要是说内部结构,大家都知道数据结构有些东西是分为逻辑结构和物理结构的,物理结构有分为顺序结构和链式结构,有不懂得可以百度百科,这里主要是分享线性表的顺序结构.那么什么是线性表呢,线性表是最基本.最简单.也是最常用的一种数据结

数据结构与算法-线性表顺序存储结构删除操作的实现

这一章节我们来看一下线性表顺序存储结构删除操作的简单实现 package com.ray.testobject; public class Test { private Object[] list; public Object[] getList() { return list; } /** * 初始化list * * @param num * 元素个数 */ private void iniList(int num) { list = new Object[num]; for (int i =

数据结构与算法之线性表

前言 上一篇<数据结构和算法之时间复杂度和空间复杂度>中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行了一一说明.这一篇主要介绍线性表. 线性表属于数据结构中逻辑结构中的线性结构.回忆一下,数据结构分为物理结构和逻辑结构,逻辑结构分为线性结构.几何结构.树形结构和图形结构四大结构.其中,线性表就属于线性结构.剩余的三大逻辑结构今后会一一介绍. 线性表 基本概念 线性表(List):由零个或多个数据元素组成的有限序列. 注意: 1.线性表是一个序列. 2.0个元素构成的线性表是空表.