数据结构--java语言实现线性表的顺序存储

目录

1 顺序表定义

2 顺序表特点

3 顺序表基本操作描述

3.1 add方法图形描述

3.2 search方法图形描述 

3.3 remove方法图形描述 

 3.4 ISequeuece接口中的方法定义

4 代码实现

5 运行结果


1 顺序表定义

线性表的顺序存储结构是把线性表中的所有元素按照其逻辑顺序依次存储到计算机的内存单元中指定存储位置开始的一块连续的存储空间中。简而言之,是将一组元素存放在物理地址连续的内存单元中,一般情况下采用数组存储。

顺序表的物理地址连续可理解为元素ai与其前驱元素a(i-1)与其后继元素a(i+1)的存储位置相邻,如下图所示:

2 顺序表特点

  • 逻辑上相邻的元素在物理存储位置上也同样相邻。
  • 可按照数据元素的位序号进行随机存取。
  • 进行插入、删除操作需要移动大量的元素。
  • 需要进行存储空间的预先分配,可能会造成空间浪费,但存储密度较高。

3 顺序表基本操作描述

3.1 add方法图形描述

数据结构--java语言实现线性表的顺序存储_第1张图片

3.2 search方法图形描述 

 

数据结构--java语言实现线性表的顺序存储_第2张图片

3.3 remove方法图形描述 

数据结构--java语言实现线性表的顺序存储_第3张图片

 3.4 ISequeuece接口中的方法定义

public interface ISequence {
    //在pos位置插入val
    boolean add(int pos,Object data);
    //查找关键字key 找到返回key的下标,没有返回-1;
    int search(Object key);
    //查找是否包含关键字key是否在顺序表当中(这个和search有点冲突)
    boolean contains(Object key);
    //得到pos位置的值
    Object getPos(int pos);
    //删除第一次出现的关键字key
    Object remove(Object key);
    //得到顺序表的长度
    int size();
    //打印顺序表
    void display();
    //清空顺序表以防内存泄漏
    void clear();
}

4 代码实现

import java.util.Arrays;

public class MySequenImpl implements ISequen {
    private Object[] elem;
    private int usedSize;
    private static final int DEFULZ_SIZE = 10;

    public MySequenImpl() {
        this.elem = new Object[DEFULZ_SIZE];
        this.usedSize = 0;
    }
    private boolean isFull(){
        return this.elem.length==this.usedSize;
    }
    @Override
    //在pos位置插入val
    public boolean add(int pos, Object data) {
        //判断pos位置的合法性
        if(pos<0||pos>this.usedSize){
            return false;
        }
        //判断如果线性表为满,表示不能插入元素
        if(isFull()){
            //进行2倍扩容
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }
        //遍历线性表,从后往前推,将元素依次后推
        for(int i = this.usedSize-1;i >= pos;i--){
            this.elem[i-1] = this.elem[i];
        }
        this.elem[pos] = data;
        //添加元素之后将线性表长度+1
        this.usedSize++;
        return true;
    }
    private boolean isEmpty(){
        return this.usedSize==0;
    }
    @Override
    //查找关键字key 找到返回key的下标,没有返回-1;
    public int search(Object key) {
        if(isEmpty()){
            return -1;
        }
        for (int i = 0; i this.usedSize-1){
            return null;
        }
        return this.elem[pos];
    }
    //private boolean exit;
    //删除第一次出现的关键字key
    public Object remove(Object key) {
        int index = search(key);
        if(index == -1){
            return null;
        }
        Object data = this.elem[index];
        for(int i = index;i < this.usedSize-1;i++){
            this.elem[i] = this.elem[i+1];
        }
        this.elem[this.usedSize-1]=null;
        this.usedSize--;
        return data;
    }
    @Override
    //得到顺序表的长度
    public int size() {
        return this.usedSize;
    }
    @Override
    //打印顺序表
    public void display() {
        for(int i = 0;i < this.usedSize;i++){
            System.out.print(this.elem[i]+" ");
        }
    }
    @Override
    //清空顺序表以防内存泄漏
    public void clear() {
        for (int i = 0;i < this.usedSize;i++){
            this.elem[i] = null;
        }
    }
    public static void main(String[] args) {
        MySequenImpl mySequen = new MySequenImpl();
        mySequen.add(0,12);
        mySequen.add(1,23);
        mySequen.add(2,34);
        mySequen.display();
        System.out.println();
        System.out.println(mySequen.contains(34));
        System.out.println( mySequen.remove(12));
        mySequen.display();
        System.out.println();
        System.out.println(mySequen.size());
        System.out.println(mySequen.getPos(1));
        System.out.println();
        mySequen.clear();
        mySequen.display();
    }
}

5 运行结果

数据结构--java语言实现线性表的顺序存储_第4张图片

 

你可能感兴趣的:(数据结构)