0
点赞
收藏
分享

微信扫一扫

【数据结构与算法】之线性表——顺序表java代码简单实现

infgrad 2022-01-07 阅读 93

前言

        本文相当于是本人之前学习数据结构的一个笔记整理,欢迎各位评论指出不足,后续会陆续更新。


目录

一、线性表的定义

二、线性表的逻辑特征

三、线性表的存储结构之一——顺序存储结构

        3.1、顺序表相关概念

        3.2、顺序表的代码实现(java)

        3.3、顺序表的总结


一、线性表的定义

学习线性表,首先你得知到什么叫线性表

定义:

注意:

 二、线性表的逻辑特征

三、线性表的存储结构之一——顺序存储结构

        3.1、顺序表相关概念

         顺序存储的定义:

         特点:

        3.2、顺序表的代码实现(java)

package com.studySelf.Linearlist02.Sqlist;

import java.util.Iterator;

/**
 * @author wang
 * @packageName com.studySelf.Linearlist02.Sqlist
 * @className List
 * @date 2021/11/29 19:45
 */
public class Seqlist<T> extends Object implements Iterable<T>{
    /**存储元素的数组*/
    private Object[] element;
    /**记录当前顺序表中元素个数*/
    private int n;
    
    //构造方法
    public Seqlist(int capacity) {
        //初始化数组
       this.element = new Object[capacity];
       //初始化长度
       this.n = 0;
    }

    /**将一个线性表置为空表*/
    public void clear() {
        this.n = 0;
    }

    /**判断当前线性表是否为空表*/
    public boolean isEmpty() {
        return n==0;
    }
    /**获取线性表的长度*/
    public int length() {

        return n;
    }
    /**获取指定位置的元素*/
    public T get(int i) {
        return (T) element[i];
    }
    /**获取所有的元素*/
    public void getAll() {
        for(int i = 0;i<n;i++) {
            System.out.println(element[i]);
        }
    }

    /**向线性表中添加元素*/
    public void insert(T t) {
        //如果数组已经到达上限,即扩容
        if(n==element.length) {
            //扩容为原数组的两倍
            resize(2*element.length);
        }
        element[n++] = t;
    }

    /**在指定i索引处插入元素*/
    public void insert(int i,T t) {
        //如果数组已经到达上限,即扩容
        if(n==element.length) {
            //扩容为原数组的两倍
            resize(2*element.length);
        }
        //把索引i处的元素及其后面的元素依次向后移动一位
        for(int index = n;index>i;index--) {
            element[index] = element[index-1];
        }
        element[i] = t;
        //元素加一
        n++;
    }

    /**删除指定的位置i处的元素,并返回该元素*/
    public T remove(int i) {
        //记录索引i处的值
        T current = (T) element[i];

        //索引i后面元素依次向后移动一位即可
        for(int index = i;index < n-1 ;index++) {
            element[index] = element[index+1];
        }
        //元素个数-1
        n--;
        if(n>0 && n<element.length/4) {
            resize(element.length/2);
        }
        return current;
    }

    /**改变容量的方法*/
    public void resize(int newSize) {
        //记录原数组
        T[] temp = (T[]) element;
        //创建新数组
        element = new Object[newSize];
        //将旧数组的内容传到新数组
        for(int i = 0;i<n;i++) {
            element[i] = temp[i];
        }
    }

    /**查找t元素第一次出现的位置*/
    public int indexOf(T t) {
        for(int i =0;i<n;i++) {
            if(element[i].equals(t)) {
                return i;
            }
        }
        return -1;
    }

    @Override
    public Iterator<T> iterator() {
        return new LIterator<T>();
    }
    private class LIterator<T> implements Iterator<T> {

        private int cur ;
        public LIterator() {
            //从0开始遍历
            this.cur = 0;
        }
        @Override
        //该方法表示是否含有下一个元素
        public boolean hasNext() {
            //当当前元素索引小于元素个数即索引等于或大于n时,证明顺序表中没有元素,返回false
            return cur<n;
        }

        @Override
        //下一个元素就是数组中下一个元素
        public T next() {
            return (T)element[cur++];
        }
    }
}

  测试:

        

public class SeqListTest {
    public static void main(String[] args) {
        Seqlist<String> sl = new Seqlist<>(2);

        sl.insert("刘翔");
        sl.insert("苏炳添");
        sl.insert("张三丰");

        sl.insert(1,"法拉利");
        sl.insert(1,"兰博基尼");
//        sl.getAll();
        System.out.println("第三位:" +sl.get(2));

        for(String s : sl) {
            System.out.println(s);
        }
    }
}
/*
输出结果
 第三位:法拉利
刘翔
兰博基尼
法拉利
苏炳添
张三丰
 */

        3.3、顺序表的总结

                特点:

             顺序表的优缺点:   

举报

相关推荐

0 条评论