【一起学数据结构与算法】顺序表的实现

编程入门 行业动态 更新时间:2024-10-20 21:10:48

【一起学<a href=https://www.elefans.com/category/jswz/34/1769880.html style=数据结构与算法】顺序表的实现"/>

【一起学数据结构与算法】顺序表的实现

❤️❤️个人主页:摸鱼王胖嘟嘟
🌟🌟作品专栏:一起学数据结构与算法系列
📑给大家推荐一款非常火的面试、刷题、学习神器
👉牛客网
👉点击注册一起刷题、学习、讨论收获大厂offer吧!

目录

  • 前言
  • 一、顺序表
    • 1.1 什么是顺序表?
  • 二、简单实现顺序表
    • 2.1 创建顺序表
    • 2.2 打印顺序表
    • 2.3 获取顺序表长度
    • 2.4 在 pos 位置新增元素
    • 2.5 判定是否包含某个元素
    • 2.6 查找某个元素对应的位置
    • 2.7 获取 pos 位置的元素
    • 2.8 给 pos 位置的元素设为 value
    • 2.9 删除你想要删除的元素
    • 2.10 清空顺序表
  • 三、MyArrayList.java
  • 四、Test.java

前言

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见 的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储 时,通常以数组和链式结构的形式存储。

一、顺序表

1.1 什么是顺序表?

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改 。

其实就是一个数组。那为什么还要写一个顺序表,直接用数组不就好了?不一样的,写到类里面就可以面向对象。

顺序表一般可以分为:

  • 静态顺序表:使用定长数组存储
  • 动态顺序表:使用动态开辟的数组存储

静态顺序表适用于确定知道需要存多少数据的场景.

静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用.

相比之下动态顺序表更灵活, 根据需要动态的分配空间大小.

二、简单实现顺序表

2.1 创建顺序表

public class MyArrayList {public int[] elem;//数组public int usedSize;//数据的有效个数public MyArrayList(){this.elem = new int[10];}
}

2.2 打印顺序表

//打印顺序表
public void display(){for (int i = 0; i < this.usedSize; i++) {System.out.print(this.elem[i] + " ");}System.out.println();}

2.3 获取顺序表长度

//获取顺序表长度public int size(){return this.usedSize;}

2.4 在 pos 位置新增元素

在顺序表里面插入元素的时候所插入的位置的前面一定是存放了元素的

//在 pos 位置新填元素public void add(int pos,int data){if(pos < 0 || pos >usedSize){System.out.println("pos 位置不合法!");return;}if(isfull()) {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;this.usedSize++;}//判断是否满public boolean isfull(){return this.usedSize == this.elem.length;}

2.5 判定是否包含某个元素

//判断是否包含某个元素
public boolean contains(int toFind){for (int i = 0; i < this.usedSize; i++) {if(this.elem[i] == toFind){return true;}}return false;}

2.6 查找某个元素对应的位置

//查找某个元素的对应位置,找不到返回-1public int search(int toFind){for (int i = 0; i < this.usedSize; i++) {if(this.elem[i] == toFind){return i;}}return -1;}

2.7 获取 pos 位置的元素

//获取pos位置的值public int getPos(int pos){if(pos < 0 || pos >= this.usedSize){System.out.println("pos 位置不合法");return -1;//这里说明一下,业务上的处理,不考虑}if(isEmpty()){System.out.println("顺序表为空!");return -1;}return this.elem[pos];}public boolean isEmpty(){return this.usedSize == 0;}

2.8 给 pos 位置的元素设为 value

 //给pos位置元素更新valuepublic void setPos(int pos,int value){if (pos < 0 || pos >= this.usedSize){System.out.println("pos 位置不合法");return;}if(isEmpty()){System.out.println("顺序表为空!");return;}this.elem[pos] = value;}

2.9 删除你想要删除的元素

//删除第一次出现的关键字keypublic void remove(int toRmove){if (isEmpty()){System.out.println("顺序表为空!");return;}int index = search(toRmove);if(index == -1){System.out.println("没有你要删除的数字!");return;}for (int i = index; i < this.usedSize - 1; i++) {this.elem[i] = this.elem[i+1];}this.usedSize--;//this.elem[useSize] = null;如果数组当中是引用数据类型}

2.10 清空顺序表

//清空顺序表public void clear(){this.usedSize = 0;}

三、MyArrayList.java

import java.util.Arrays;public class MyArrayList {public int[] elem;public int usedSize;public MyArrayList(){this.elem = new int[10];}//打印顺序表public void display(){for (int i = 0; i < this.usedSize; i++) {System.out.print(this.elem[i] + " ");}System.out.println();}//获取顺序表长度public int size(){return this.usedSize;}//在 pos 位置新填元素public void add(int pos,int data){if(pos < 0 || pos >usedSize){System.out.println("pos 位置不合法!");return;}if(isfull()) {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;this.usedSize++;}//判断是否满public boolean isfull(){return this.usedSize == this.elem.length;}//判断是否包含某个元素public boolean contains(int toFind){for (int i = 0; i < this.usedSize; i++) {if(this.elem[i] == toFind){return true;}}return false;}//查找某个元素的对应位置,找不到返回-1public int search(int toFind){for (int i = 0; i < this.usedSize; i++) {if(this.elem[i] == toFind){return i;}}return -1;}//获取pos位置的值public int getPos(int pos){if(pos < 0 || pos >= this.usedSize){System.out.println("pos 位置不合法");return -1;//这里说明一下,业务上的处理,不考虑}if(isEmpty()){System.out.println("顺序表为空!");return -1;}return this.elem[pos];}public boolean isEmpty(){return this.usedSize == 0;}//给pos位置元素更新valuepublic void setPos(int pos,int value){if (pos < 0 || pos >= this.usedSize){System.out.println("pos 位置不合法");return;}if(isEmpty()){System.out.println("顺序表为空!");return;}this.elem[pos] = value;}//删除第一次出现的关键字keypublic void remove(int toRmove){if (isEmpty()){System.out.println("顺序表为空!");return;}int index = search(toRmove);if(index == -1){System.out.println("没有你要删除的数字!");return;}for (int i = index; i < this.usedSize - 1; i++) {this.elem[i] = this.elem[i+1];}this.usedSize--;//this.elem[useSize] = null;如果数组当中是引用数据类型}//清空顺序表public void clear(){this.usedSize = 0;}
}

四、Test.java

public class Test {public static void main(String[] args) {MyArrayList myArrayList = new MyArrayList();myArrayList.add(0,1);myArrayList.add(1,2);myArrayList.add(2,3);myArrayList.add(3,4);myArrayList.add(4,5);myArrayList.display();System.out.println(myArrayList.contains(3));System.out.println(myArrayList.getPos(3));myArrayList.setPos(0,99);myArrayList.display();}
}

更多推荐

【一起学数据结构与算法】顺序表的实现

本文发布于:2024-02-06 11:47:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749187.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据结构   算法   顺序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!