顺序表: 线性表的顺序表是,指的是用一组地址连续的存储单元一次存储线性表的数据元素。以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。只要确定了存储线性表的起始位置,线性表中任何一数据元素都可以随机存取,所以线性表的存储结构是一种随机存取的存储结构。
由于高级程序设计语言中的数组类型也具有随机存取的特性,因此,通常都用数组来描述数据结构中的顺序存储结构。
优点——随机存储,读取数据的速度快
缺点——顺序存储,当需要增加、删除数据慢
顺序表的实现以及各种操作
class test{//
int usedsize;//顺序表中有多少个有效元素
int []elem;//用来保存此线性表数据的数组
public test(){//设置默认数组长度为10
this(10);
}
public test(int i) {//有参数的构造函数,i代表的是数组长度。
elem = new int [i];
// TODO Auto-generated constructor stub
}
//判断顺序表是否是满的
public boolean isFull()
{
if(this.usedsize == elem.length)//如果顺序表中有效元素的个数与数组长度相同,则说明顺序表是满的
return true;
else{
return false;}
}
//顺序表中插入一个元素
public boolean insert(int pos,int val)
{
if(pos>this.usedsize||pos<-1)//判断pos是否合法
{ return false;}
if(isFull()==true) //如果数组满了就进行扩容
{int []a=new int [2*elem.length];//创建一个新的数组时原来数组长度的二倍
System.arraycopy(elem, 0, a, 0, elem.length);//把原来的数组复制到新的数组里面
elem=a;//把新数组赋值给elem
}
for (int i = this.usedsize-1; i >=pos; i--) {
elem[i+1] = elem[i];
}
elem[pos] = val;
this.usedsize++;
return true;
}
//打印顺序表
public void show(int []elem){
for (int i = 0; i < this.usedsize; i++) {
System.out.println(elem[i]+" ");
}
}
//在顺序表中查找元素,并返回该元素的下标
public int select(int val)
{
for(int i=0;i<this.usedsize;i++){
if (elem[i]==val){
return i;
}
}return -1;
}
//判断顺序表是否是空的
public boolean isempty(){//如果顺序表中有效元素的个数为0,则说明顺序表是空的
if(this.usedsize==0){
return true;
}return false;
}
//顺序表删除一个元素
public void delete(int val){
int pos= select(val);//先查找下标
for (int i = pos; i < this.usedsize-1; i++) {
elem[i] = elem[i+1];//让pos以及pos之后的元素都往前挪动,
}
this.usedsize--;
}
}
public class test6 {
public static void main(String[] args) {
test t1 =new test();
for(int i=0;i<10;i++){
t1.insert(i,i);
}
System.out.println("====原数组====");
t1.show(t1.elem);
System.out.println("====在0号位置插入999====");
t1.insert(0, 999);
t1.show(t1.elem);
System.out.println("====删除0之后====");
t1.delete(0);
t1.show(t1.elem);
System.out.println("2的下表为"+t1.select(2));
}}
输出结果:
====原数组====
0
1
2
3
4
5
6
7
8
9
====在0号位置插入999====
999
0
1
2
3
4
5
6
7
8
9
====删除0之后====
999
1
2
3
4
5
6
7
8
9
2的下表为2