数据结构和算法分析之线性表(代码片段)

author author     2022-11-10     115

关键词:

1.结构目录


如图:

技术分享图片


自定义数组越界异常:

/** 
* @ClassName: OutOfBoundaryException 
* @Description: TODO  自定义的数组越界的异常
* @author 萨摩耶
* @date 2018年4月29日 下午3:37:11 
*  
*/
@SuppressWarnings("serial")
public class OutOfBoundaryException extends Exception
    public OutOfBoundaryException(String message)
    
        super(message);
    



List接口:


/** 
* @ClassName: List 
* @Description: TODO 线性表的接口
* @author 萨摩耶
* @date 2018年4月29日 下午3:31:41 
*  
*/
public interface List 
    //返回线性表的大小,即数据元素的个数
    public int getSize();
    //如果线性表为空返回true否则返回false
    public boolean isEmpty();
    //判断线性表中是否包含数据元素e
    public boolean contains(Object e);
    //返回数据元素e在线性表中的位置
    public int indexOf(Object e);
    //将数据元素e插入到线性表中i号位置
    public void insert(int i,Object e)throws OutOfBoundaryException;
    //将数据元素e插入数据元素obj之前
    public boolean insertBefore(Object obj,Object e);
    //经数据元素e插入数据元素obj之后
    public boolean insertAfter(Object obj,Object e);
    //移除位置i的元素
    public Object remove(int i)throws OutOfBoundaryException;
    //删除线性表中第一个与e相同的元素
    public boolean remove(Object e);
    //替换线性表中序号为i的数据元素为e返回原数据元素
    public Object replace(int i,Object e)throws OutOfBoundaryException;
    //返回线性表中序号为i的数据元素
    public Object get(int i) throws OutOfBoundaryException;


strategy配置:(利用Object类型,就会产生一个问题:int类型和String类型的比较)

public interface Strategy 
    //判断两个数据元素是否相等
    public boolean equal(Object obj1,Object obj2);
    //比较两个数据元素的大小
    public int compare(Object obj1,Object obj2);


List接口的实现(ListArray.java):

public class ListArray implements List

    private final int LEN=8;// 数组的默认大小
    private Strategy strategy;//数据元素的比较策略
    private int size;//线性表中数据元素的个数
    private Object[] elements;//数据元素数组
    public ListArray(Strategy strategy)
    
        this.strategy=strategy;
        this.size=0;
        elements=new Object[LEN];
    
    @Override
    public int getSize() 
        // TODO Auto-generated method stub
        return size;
    

    @Override
    public boolean isEmpty() 
        // TODO Auto-generated method stub
        return size==0;
    

    @Override
    public boolean contains(Object e) 
        // TODO Auto-generated method stub
        for(int i=0;i<size;i++)
        
            if(strategy.equal(e,elements[i]))
                return true;
        
        return false;
    

    @Override
    public int indexOf(Object e) 
        // TODO Auto-generated method stub
        for(int i=0;i<size;i++)
        
            if(strategy.equal(e,elements[i]))
                return i;
        
        return -1;
    

    @Override
    public void insert(int i, Object e) throws OutOfBoundaryException 
        // TODO Auto-generated method stub

        if(i<0||i>size)
            throw new OutOfBoundaryException("越界" );
        if(size>=elements.length)
            expandSapce();
        for(int j=size;j>i;j--)
            elements[j]=elements[j-1];
            elements[i]=e;
            size++;
            return;

    
    public void expandSapce()
    
        Object[] a=new Object[elements.length*2];
        for(int i=0;i<elements.length;i++)
        
            a[i]=elements[i];
        
        elements=a;
    
    @Override
    public boolean insertBefore(Object obj, Object e) 
        // TODO Auto-generated method stub
        int i=indexOf(obj);
        if(i<0) return false;
        try 
            insert(i,e);
         catch (OutOfBoundaryException e1) 
            // TODO Auto-generated catch block
            e1.printStackTrace();
        
        return true;
    

    @Override
    public boolean insertAfter(Object obj, Object e) 
        // TODO Auto-generated method stub
        int i=indexOf(obj);
        if(i<0) return false;
        try 
            insert(i+1,e);
         catch (OutOfBoundaryException e1) 
            // TODO Auto-generated catch block
            e1.printStackTrace();
        
        return true;
    

    @Override
    public Object remove(int i) throws OutOfBoundaryException 
        // TODO Auto-generated method stub

        if(i<0||i>size)
            throw new OutOfBoundaryException("越界" );
        Object obj=elements[i];
        for(int j=i;j<size;j++)
        
            elements[j]=elements[j+1];
        
        elements[--size]=null;
        return obj;

    

    @Override
    public boolean remove(Object e) 
        // TODO Auto-generated method stub
        int i=indexOf(e);
        if(i<0) return false;
        try 
            remove(i);
         catch (OutOfBoundaryException e1) 
            // TODO Auto-generated catch block
            e1.printStackTrace();
        
        return true;
    

    @Override
    public Object replace(int i, Object e) throws OutOfBoundaryException 
        // TODO Auto-generated method stub
        if(i<0||i>size)
            throw new OutOfBoundaryException("越界" );
        Object obj=elements[i];
        elements[i]=e;
        return obj;
    

    @Override
    public Object get(int i) throws OutOfBoundaryException 
        // TODO Auto-generated method stub
        if(i<0||i>size)
            throw new OutOfBoundaryException("越界" );
        return elements[i];
    


策略的实现:

/** 
* @ClassName: IntergerStretegy 
* @Description: TODO  整数的比较策略
* @author 萨摩耶
* @date 2018年4月30日 上午9:24:42 
*  
*/
public class IntergerStretegy implements Strategy

    @Override
    public boolean equal(Object obj1, Object obj2) 
        // TODO Auto-generated method stub
        if(obj1 instanceof Integer&&obj2 instanceof Integer)
        
            if(obj1==obj2)
                return true;
        
        return false;
    

    @Override
    public int compare(Object obj1, Object obj2) 
        // TODO Auto-generated method stub
        return 0;
    


测试类:


public class Test 
    public static void main(String[] args) throws OutOfBoundaryException
    
        ListArray la=new ListArray(new IntergerStretegy());
        for(int i=0;i<7;i++)
        la.insert(i, i+1);
        System.out.println(la.get(6));
        System.out.println(la.indexOf(5));
    

408数据结构与算法—线性表的定义和分析(代码片段)

【408数据结构与算法】—线性表的定义和分析(二)一、🎆线性表的定义线性表的定义:线性表示具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时,线性表是一个... 查看详情

数据结构与算法-线性表之双向链表(代码片段)

参考博客:http://www.cnblogs.com/skywang12345/p/3561803.htmlhttps://blog.csdn.net/howlaa/article/details/385132351、概述线性表是一种线性结构,由数组、单项链表和双向链表组成,这里讲讨论双向链表的理论知识和实现代码。双向链表和单项链表类... 查看详情

数据结构与算法-线性表之静态链表(代码片段)

...针,那么在没有引用或指针的语言中,该怎么实现这个的数据结构呢?一、简介  定义:用数组代替指针或引用来描述单链表,即用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法;  上面的静态链表图有两个... 查看详情

王卓数据结构与算法之查找算法(代码片段)

✍、目录脑图这里写目录标题✍、目录脑图1、查找1.1、查找的分类1.2、查找算法的评价指标1.3、线性表的查找1.3.1、顺序查找(线性查找)1.3.1.1、顺序查找性能分析1.3.1.2、顺序查找的特点1.3.2、折半查找(二分查找)1.3.2.1、折半查找... 查看详情

算法习题---线性表之单链表逆序打印(代码片段)

...链表数据使用头插法,逆序排列,然后正序打印即可三:算法实现(这里使用方法一:递归实现简单易懂)#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib 查看详情

数据结构之自定义线性表干就完了(代码片段)

数据结构与算法之线性表的实现原理及自定义线性表(基于Java基础)聊一聊算法和数据结构首先我们明白一个程序的编写过程并不是一下子就能一步完成的,例如举个例子:学生时代必不可少的学生管理系统相关的课... 查看详情

数据结构与算法分析(线性表实现)(代码片段)

★线性表是一个序列(线性结构),具有一定的顺序★如果有多个元素,第一个元素没有前驱,最后一个元素没有后继★线性表强调是有限的一.线性表基本存储结构㈠.顺序表——把线性表的结点按逻辑顺序依次存放在一组地... 查看详情

数据结构与算法线性表的重要基本操作与代码实现c语言版(代码片段)

目录线性表的重要基本操作1、初始化初始化线性表L(参数用引用)初始化线性表L(参数用指针)销毁、清空线性表L求线性表L的长度、判断线性表L是否为空2、取值获取线性表L中的某个数据元素的内容3、查找在... 查看详情

数据结构之数组(代码片段)

什么是数组数组(Array)是一种线性表数据结构,它用一组连续的内存空间来存储一组具有相同类型的数据。下面是两个值得注意的概念:1.线性表(linearlist)线性表,即数据的逻辑结构是线性的。每个线性表中的数据最多只有... 查看详情

数据结构之线性表(代码片段)

线性表线性表的基本概念对于同一个线性表,其每一个数据元素的值虽然不同,但必须具有相同的数据类型;数据元素之间具有一种线性的或“一对一”的逻辑关系。第一个数据元素没有前驱,这个数据元素被称为开始节点;最... 查看详情

数据结构与算法之----线性表

01线性表 1.线性表的判断方式就是元素有且只有一个直接前驱和直接后继,元素可以为空,此时叫做空表 2.抽象数据类型标准格式   ADT抽象数据类型名    DATA    数据元素之间逻辑关系的定义    Operation... 查看详情

数据结构之线性表(代码片段)

一、线性表的特性  1、线性结构的特性  (1)集合中必存在唯一的“第一元素”和唯一的“最后元素”。  (2)除最后一个元素之外,均有唯一的后继和唯一的前驱。  2、线性表的基本操作过程  (1)用Setnull(L)置... 查看详情

算法习题---线性表之数组实现循环移动(代码片段)

...组R中,试设计一个在时间和空间两方面都尽可能高效的算法,将R中保存的序列循环左移p(0<p<n)个位置,即把R中的数据序列由(x0,x1,…,xn-1)变换为(xp,xp+1,…,xn-1,x0,x1,…,x)。二:思考要实现R中... 查看详情

[nefu数据结构]阶段一复习(代码片段)

文章目录[NEFU数据结构]阶段一复习算法模块第1章绪论1.2基本概念和术语逻辑结构:存储结构:1.3抽象数据类型的表示与实现1.4算法和算法分析第2章线性表2.3~2.4线性表的顺序存储结构2.5线性表的链式表示和实现单链表循... 查看详情

算法习题---线性表之控制变量个数获取数据最小值(代码片段)

...度为N,另给一个int型变量i,要求只用上述变量,写一个算法,找出N个整数中的最小者,并且要求不能破坏数组数据。二:解题思路i作为变量,这个变量的百位用于储存最小值地址,十位用来储存最小值,个位用于当前指向的... 查看详情

线性表之顺序表(代码片段)

...中以数组形式保存,是一组连续的内存空间。顺序表基本算法:构造一个空的线性表://初始化线性表STATUSInitList(Sqlist&L)//置表长为0L.length=0;returnOK;返回指定元素位置://定义 查看详情

数据结构之线性表(严蔚敏《数据结构》要求)(代码片段)

1、每个代码都是博主一个字一个敲出来的(有参考,但是我很认真的去分析了每个函数逻辑结构,并做了一定的修改)2、函数都已经通过测试,没有bug,符合要求3、这里只贴出代码,代码里有些本人的理解和注释,但是没有那... 查看详情

数据结构之顺序表(代码片段)

...容SeqList.c文件内容前言讲完算法效率,就正式开始我们的数据结构 查看详情