线性表简述

一、简单实现增,删,改、查

package datatructs;
/**
 * 表接口
 */
public interface LinearList {

    boolean isEmpty();//判断线性表是否为空
    int size();   //返回线性表的大小
    Object get(int index); //获取指定索引的元素
    Object set (int index,Object element);//修改指定索引的元素

    boolean addForIndex(int index,Object element);//在指定索引位置添加的元素

    boolean add(Object element);//在线性表最后添加元素

    Object remove(int index); //移除指定位置的元素

    void clear(); //清空线性表

}

实现类

package datatructs;

public class LinearListImpl implements LinearList {
    //线性表
    private Object [] sList;
    //线性表大小
    private int size;

    public LinearListImpl(int length) {
        if(length<0){
            sList=new Object[10];
        }else{
            sList=new Object[length];
        }
    }

    public LinearListImpl() {
        //设置默认为10个大小
        this(10);
    }

    /*
     * 检查线性表是否为空
     */
    @Override
    public boolean isEmpty() {
        //如果size=0就说明为空 true,不为0就为false
        return size==0;
    }
    /*
     * 返回线必表的大小
     */
    @Override
    public int size() {

        return size;
    }

        /*
         * 返回指定索引位置的元素
         */
    @Override
    public Object get(int index) {

        return sList[index];
    }

    @Override
    public Object set(int index, Object element) {
        //得到原来位置上的元素
        Object old=sList[index];
        //修改
        sList[index]=element;
        //返回原来的值
        return old;
    }
    /*
     * 检查在指定位置添加元素的,索引是否在范围内
     */
    public void checkIndexForAdd(int index){
        if(index<0 || index>size){
            throw new IndexOutOfBoundsException("要插入的索引不在表的范围内");
        }
    }
    /*
     * 检查在指定索引是否在范围 内
     */
    public void checkIndex(int index){
        if(index>size){
            throw new IndexOutOfBoundsException("要操作的索引不在表的范围内");
        }
    }

        /*
         *在指定索引位置添加
         */
    @Override
    public boolean addForIndex(int index, Object element) {
        checkIndexForAdd(index);

        //判断线性表是否还有空间
        if(size()==sList.length){
            //如果为0
            if(sList.length==0){
                //初始化为10
                sList=new Object[10];
            }else{
                //不为空就+1
                //临时表
                Object [] tmp=sList;
                //重新+1
                this.sList=new Object[sList.length+1];
                //将元素复制过来
                for (int i = 0; i < size; i++) {
                    sList[i]=tmp[i];
                }
            }
        }
        //向后移一位
        for(int i=size-1;i>=index;i--){
            sList[i]=sList[i+1];
        }
        //插入元素
        sList[index]=element;
        size++;
        return true;
    }
    /*
     * 在最后添加元素
     */
    @Override
    public boolean add(Object element) {
        //调用 上面的添加方法
         return addForIndex(size,element);

    }
    /*
     * 删除指定索引的元素
     */
    @Override
    public Object remove(int index) {
        checkIndex(index);
        for(int i=index;i<size-1;i++){
            sList[i]=sList[i+1];
        }
        sList[--size]=null;
        //返回要移除的元素
        return sList[index];
    }

    @Override
    public void clear() {
        for (int i = 0; i < size; i++) {
            //将每个值设置为null
            sList[i]=null;
        }
        //将线性表大小设置0
        size=0;

    }

}

测试

package datatructs;

public class Demo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        LinearListImpl ll=new LinearListImpl();
        System.out.println("是否为空:  "+ll.isEmpty());
        System.out.println("大小:"+ll.size());
        ll.add("张三");
        ll.add("李四");
        ll.addForIndex(2, "王五");

        System.out.println(ll.set(2, "赵六"));

        ll.remove(2);
        for (int i = 0; i < ll.size(); i++) {
            System.out.print("\t第"+i+" 元素 :"+ll.get(i));
        }

        ll.clear();
        System.out.println("元素大小:"+ll.size());
        System.out.println("是否为空:  "+ll.isEmpty());
    }

}
时间: 2024-11-02 23:28:56

线性表简述的相关文章

数据结构算法C语言实现(一)---2.3线性表的顺序表示和实现

注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实现,主要操作包括建表,插入元素,删除元素,查找元素,合并表等操作,根据书中伪代码编写了C语言,使用int类型进行了测试,需要注意的是查找元素时使用了函数指针,C语言初学者不易理解,可查阅相关书籍学习. 二.头文件 1 //head.h 2 /** 3 My Code 4 */ 5 #include

数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

一.简述 [暂无] 二.头文件 1 #ifndef _2_3_part1_H_ 2 #define _2_3_part1_H_ 3 //2_3_part1.h 4 /** 5 author:zhaoyu 6 email:[email protected] 7 date:2016-6-4 8 note:realize my textbook <<数据结构(C语言版)>> 9 */ 10 //----线性表的单链表存储结构---- 11 /** 12 My Code 13 to mak

数据结构2(线性表)

第2章  线性表 [例2-1]试编写出将两个顺序存储的有序表A和B合成一个有序表C的算法. 解:假设A.B和C的类型为下述SqList类型: #define  maxlen  1000 typedef  int  elemtype typedef  struct {  elemtype  elem[maxlen]; int  len; }SqList; 设A和B的数据元素均为整数且为升序排列,设A的长度为m,B的长度为n,则合并后C的长度为m+n.合并时进行A.B元素的比较,将较小的链入C中,算

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

数据结构 笔记2 线性表

线性表是最简单,最常用的一种数据结构,它是由n个数据元素(结点)组成的有限序列. 线性表的基本运算 1.置空表 InitList(L) ,构造一个空的线性表L 2.求表长 ListLength(L) ,返回线性表L中元素个数,即表长. 3.取表中第i个元素GetNode(L,i) ,若1 <= i <= ListLength(L) ,则返回第i个元素a[i] 4.按值查找LocateNode(L,x),在表L中查找第一个值为x的元素,并返回该元素在表L中的位置,若表中没有元素的值为x,则返回0

数据结构与算法之线性表

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

数据导论——线性表

线性表是一种线性结构,由n个数据元素组成的又穷序列,数据元素又称为节点,线性表中的每个数据元素的含义,在不同的应用中各不相同,但在同一个线性表中的数据元素具有相同的特性. 下面的图总结了第二章的主要内容,用于总结和回想,巩固学习: 线性表的基本运算包括:初始化.求表长.读表元素.定位.插入.删除等基本运算,不同的存储结构实现细节可能不同. 在线性表的存储方式有顺序存储和链式存储. 顺序存储的存储方式是最简单的,逻辑顺序对应于存储顺序,数组就是顺序表的表现之一.顺序存储的运算包括插入.删除和定位,

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i