网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
前言
线性表(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 查找某个元素对应的位置
//查找某个元素的对应位置,找不到返回-1
public 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位置元素更新value
public 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 删除你想要删除的元素
//删除第一次出现的关键字key
public 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];
}
//打印顺序表
![img](https://img-blog.csdnimg.cn/img_convert/0ba702284eb4c442e6461a380f593821.png)
![img](https://img-blog.csdnimg.cn/img_convert/dda415a9e648a7424acef4821e991c81.png)
![img](https://img-blog.csdnimg.cn/img_convert/4e271a508940aa94051c3cb67d54aaae.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
hma4GJV6-1715597231330)]
[外链图片转存中...(img-xU1QywBx-1715597231330)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**