jAVA底层实现线性表之顺序表(1)

众所周知,线性表中有两个分类:一是顺序表,二是链表。今天我们就来看看如何使用JAVA实现顺序表,众所周知,顺序表其实就是一个加强版的数组

 

 

里面的元素数据都是连续的,并且要保证元素的数目要少于数组的容量

以下就是对于顺序表的基本操作图解

以下就是代码

import java.util.Scanner;

public class List {
int [] elementdata;
int length;
int size = 0;
List(){
elementdata = new int[10];
length = 10;
}
List(int index){
elementdata = new int[index];
length = index;
}
Boolean rangecheck(int index){///查询删除等等作为检测
if (index > length||index < 0){
System.out.println("超出范围");
return false;
}
else return true;
}
void add(int data){
if (size < length){
elementdata[size] = data;
size++;
}
else {
int oldCapacity = elementdata.length;
int newCapacity = (oldCapacity )+ oldCapacity / 2;///当空间容量不够时候进行扩容,参考了ArrayList的源码,不同之处在于ArrayList是右移两位的操作
int []newelementdata = new int [newCapacity];
for (size = 0;size < oldCapacity;size++){
newelementdata[size] = elementdata[size];
}
elementdata = newelementdata;
length = newCapacity;
elementdata[size++] = data;
}
}
void show(){
for (int i = 0;i < size;i++){
System.out.print(elementdata[i]+" ");
}
}
void remove(int position){
if (rangecheck(position)){
for (size = position;size < length - 1;size++){
elementdata[size] = elementdata[size + 1];
}
length--;
size--;
}
}

void search(int position){
if (rangecheck(position)){
System.out.println(elementdata[position]);
}
}
void Insert(int position, int data){
int y;
if (rangecheck(position)){
if (size + 1 < length){
for (y = size;y > position - 1;y--){
elementdata[y + 1] = elementdata[y];
}
elementdata[position] = data;
size++;
}
else{
int []newelementdata = new int[elementdata.length + elementdata.length/2];///单独进行插入时候,考虑到连续插入时候,会有空间不够的情况出现,作为一个判断,当空间不够时候,再次申请内存,拷贝后进行插入
for (int u = 0;u < position;u++){
newelementdata[u] = elementdata[u];
}
for(int z = position ;z < elementdata.length;z++){
newelementdata[z + 1] = elementdata[z];
}
newelementdata[position] = data;
elementdata = newelementdata;
size++;
}
}
}
}

 以下是编写的测试程序

public static void main (String[] args) {
Scanner input = new Scanner(System.in);
int k;
List list = new List(2);
list.add(4);
list.add(7);
list.add(8);
list.add(5);
list.add(89);
list.add(134);
list.add(66);
list.add(45);
list.add(85);
list.add(66);
list.add(99);
list.add(100);
list.show();
System.out.println();
System.out.print("输入查询的位置()都是从0位置开始:");
k = input.nextInt();
list.search(k);
System.out.println("输入删除的位置:");
k = input.nextInt();
list.remove(k);
list.show();
System.out.println();
System.out.print("输入插入的位置,插入的数字");
k = input.nextInt();
int data = input.nextInt();
list.Insert(k, data);
System.out.print("输入插入的位置,插入的数字");
k = input.nextInt();
data = input.nextInt();
list.Insert(k, data);
list.show();
}

 
 

 

转载于:https://www.cnblogs.com/SGRS/p/11546017.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值