20-咸鱼学Java-Java中的顺序表
原创
©著作权归作者所有:来自51CTO博客作者MC43700000046E4的原创作品,请联系作者获取转载授权,否则将追究法律责任
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。——–百度百科
/**
* 顺序表
* @author 焦焱
*
*/
class List2{
int usedSize;//已经使用的空间
int[] elem; //数据存储域
/**
* 无参构造默认size = 10
*/
public List2() {
this(10);
}
/**
* 有参构造函数
* @param size 长度
*/
public List2(int size) {
elem = new int[size];
}
/**
* 判断顺序表是否满
* @return 是否满
*/
public boolean isFull()
{
if(this.usedSize == elem.length)
return true;
return false;
}
/**
* 插入一个元素
* @param pos 插入位置
* @param val 值
* @return 是否插入成功
*/
public boolean insert(int pos,int val)
{ //判断是否合法
if(pos>this.usedSize||pos<-1)
return false;
//如果满了要进行扩容
if(isFull())
elem = Arrays.copyOf(elem, 2*elem.length); //如果满了进行扩容
//挪动数据
for (int i = this.usedSize-1; i >=pos; i--) {
elem[i+1] = elem[i];
}
elem[pos] = val; //赋值
this.usedSize++; //已使用空间加一
return true;
}
/**
* 打印顺序表
*/
public void show()
{
for (int i = 0; i < this.usedSize; i++) {
System.out.print(elem[i]+" ");
}
System.out.println();
}
/**
* 判断顺序表是否为空
* @return
*/
public boolean isEmpty()
{
return this.usedSize==0?true:false;
}
/**
* 查找顺序表中一个元素第一次出现的下标位置
* @param key 元素
* @return 查找到的下标,未找到返回-1
*/
public int serch(int key)
{
if(isEmpty())
return -1;
for (int i = 0; i < this.usedSize; i++) {
if(key == elem[i])
return i;
}
return -1;
}
/**
* 删除一个元素
* @param val 元素
* @return 删除成功返回true
*/
public boolean delete(int val)
{
int pos = serch(val);//先查找下标
if(pos==-1) //如果未找到
return false;
//把后面元素一直前移 覆盖掉pos位置的元素
for (int i = pos; i < this.usedSize-1; i++) {
elem[i] = elem[i+1];
}
this.usedSize--;
return true;
}
}
测试
public class SqList2 {
public static void main(String[] args) {
List2 a = new List2();
for (int i = 0; i < 20; i++) {
a.insert(i,i);
}
System.out.println("初始化插入0-19");
a.show();
a.insert(0, 100);
System.out.println("在0号位置插入100之后");
a.show();
System.out.println("2号元素所在下标为"+a.serch(2));
System.out.println("删除下标2的结果:"+ a.delete(2));
a.show();
}
}
结果
初始化插入0-19
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
在0号位置插入100之后
100 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2号元素所在下标为3
删除下标2的结果:true
100 0 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19