Sequential And Linked Lists - 顺序表 和 链表 - 顺序表部分 - java

前言

1. 顺序表和链表,都属于数据结构的一部分。
2. 数据结构:C的数据结构 和 JAVA 的数据结构,有什么不一样?
     数据结构 只是一个单独的学科。和语言没有关系。
     语言的不同,只是决定了实现同一种逻辑的方法不同而已。
3. 数据结构:逻辑非常严谨的一门学科,要向学号数据结构
     必须做到两点 :1.多画图 , 2.多写代码  (别抄)

顺序表和链表 是 数组 与 类和对象 的一种整合。顺序表和链表 是 数据结构的基础。非常重要。


线性表

 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,
 常见的线性表:顺序表、链表、栈、队列、字符串...

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储

在这里插入图片描述


顺序表(一个面向对象的数组)

概念及结构

    顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
可以这么去理解 顺序表 是一个面向对象的数组。但是一个数组是不能自己面向对象,我们需要提供一些方法,来对数组进行增删查改。
那么把数组这些方法(只用写一次) 和 数组 作为属性 放到一个类里面,将来我用这个类去new对象的时候,
通过这个对象我们可以去调用这些方法,去操作数组,这不就是面向对象嘛。

 简单来说 顺序表 就是 对一个数组进行增删查改。
 一个普通数组,我们也可以创建一些方法区操作它,但它始终面向不了对象。而且我们每次都需要为数组写操作方法。

顺序表一般可以分为:

    静态顺序表:使用定长数组存储。
    动态顺序表:使用动态开辟的数组存储       
  
    静态顺序表适用于确定知道需要存多少数据的场景.
    静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用  
 相比之下动态顺序表更灵活, 根据需要分配动态的空间大小

 

顺序表讲解图

1(准备工作)

在这里插入图片描述


2(new对象)

在这里插入图片描述


3(顺序要实现的功能)

在这里插入图片描述


4(打印顺序表)

在这里插入图片描述


5 (获取顺序表的有效长度)

在这里插入图片描述


6(在pos位置增添元素)

在这里插入图片描述


代码实现(在pos位置增添元素)
 public void add(int pos, int data) {
      // 1.
      if(pos<0||pos>this.usedSize){
          System.out.println("pos的位置不合法!");
          return;
      }
      // 2.
      dilatation();
      // 3.
      for (int i = this.usedSize-1; i >= pos; i--) {
          this.array[i+1]=this.array[i];
      }
      // 4.
      this.array[pos] = data;
      this.usedSize++;
  }
  // 扩容
  public void dilatation(){
     if(this.array.length == this.usedSize){
        this.array = Arrays.copyOf(this.array,this.array.length*2);
     }
  }

此时我们已经写好了 打印顺序表、获取顺序表的有效长度、在 pos 位置新增元素 的顺序表功能,我们来测试一下。
public class SequentialAndLinkedLists {
    public static void main(String[] args) {

        MySequentialList mySequentialList = new MySequentialList();
       // 通过 在 pos 位置新增元素 的功能 来给 数组赋值
        mySequentialList.add(0,1);
        mySequentialList.add(1,2);
        mySequentialList.add(2,3);
        mySequentialList.add(3,4);
        mySequentialList.add(4,5);
        mySequentialList.display();// 打印显示
        System.out.println(mySequentialList.size());// 打印有效元素个数

    }
}
效果附图

在这里插入图片描述


7 ( 判断是否包含某个元素 )

在这里插入图片描述


8 (查找某个元素对应的位置)

在这里插入图片描述


7 和 8 效果图

在这里插入图片描述


在这里插入图片描述


9(获取下标为pos的元素)

在这里插入图片描述

9 附图

在这里插入图片描述


在这里插入图片描述


10(给 pos 位置的元素设为 value)

在这里插入图片描述

10 附图

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


11 (删除第一次出现的关键字key)

在这里插入图片描述

至于为什么是 usedSize-1,是为了防止越界。(如果顺序表示满的情况,当 你循环走到 最后一个元素时,此时的 array[i+1],会访问不属于顺序表的空间,从而导致越界访问)


11 附图

在这里插入图片描述


11 效果图

在这里插入图片描述


11.2(特殊情况)

在这里插入图片描述


12 清空顺序表

在这里插入图片描述

附图

在这里插入图片描述


附上程序总图

调用方

在这里插入图片描述


实现者(顺序表)

在这里插入图片描述

本文结束

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dark And Grey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值