线性表是数据结构中最最基本的结构类型。顺序表则是把线性表的节点按逻辑顺序一次存放在一组地址连续的存储单元里。
下面使用Java实现的动态顺序表,主要实现以下几个功能:
数组初始化-->打印数组元素-->打印数组元素个数和容量大小-->判断是否需要扩容-->实现尾插-->实现尾删-->在指定位置插入指定元素-->判断位置是否异常-->删除下标为pos的元素-->清空数据表中的元素大小;
下面使用java代码实现的代码:
class SeqListD{
private int[] arr=null;//存储数据的数组
private int size; //当前有效元素个数
private int capacity; //容量
//初始化
public void seqListDInit(int n){
if(n>=0){
this.arr=new int[n];
this.capacity=n;
this.size=0;
}else{
System.out.println("初始化数据不能小于0"+n);
}
}
//打印数组元素
public void printfSeqList(){
int i=0;
System.out.print("数组当前元素分别是:");
for(i=0;i<size;i++){
System.out.print(arr[i]+",");
}
System.out.println();
}
//打印数组元素个数和容量大小
public void printSize(){
System.out.println("当前元素个数是:-->"+size);
System.out.println("当数组容量是:-->"+capacity);
}
//判断是否需要扩容
private void seqListDempty(){
int i=0;
if(size==capacity){
capacity*=2;
int[] newArr=new int[capacity];
for(i=0;i<size;i++){
newArr[i]=arr[i];
}
arr=newArr;
}
}
//尾插
public boolean seqListDPushBack(int data){
seqListDempty();
arr[size]=data;
size++;
return true;
}
//尾删
public boolean seqListDPopBack(){
if(size!=0){
size--;
return true;
}
return false;
}
//判断位置是否异常
private void posIsNormal(int pos){
if(pos<0 || pos>size){
System.out.println("无效的下标:"+pos);
}
}
//在指定位置插入指定元素
public void seqListDInsert(int pos,int data){
posIsNormal(pos);
seqListDempty();
for(int i=size;i>pos;i--){
arr[i]=arr[i-1];
}
arr[pos]=data;
size++;
}
//删除下标为pos的元素
public void deleteSeqListD(int pos){
posIsNormal(pos);
for(int i=pos;i<size-1;i++){
arr[i]=arr[i+1];
}
size--;
}
//清空数据表中的元素大小
public void clearSeqListD(){
size=0;
}
}
public class Test{
public static void main(String[] args){
SeqListD sq=new SeqListD();
//初始化测试
System.out.println("-------初始化测试结果-------->");
sq.seqListDInit(3);
sq.printfSeqList();
sq.printSize();
//尾插测试
System.out.println("-------尾插测试结果-------->");
sq.seqListDPushBack(1);
sq.seqListDPushBack(2);
sq.seqListDPushBack(3);
sq.seqListDPushBack(4);
sq.seqListDPushBack(5);
sq.printfSeqList();
sq.printSize();
//尾删测试
System.out.println("-------尾删测试结果-------->");
sq.seqListDPopBack();
sq.seqListDPopBack();
sq.printfSeqList();
sq.printSize();
//在指定位置插入指定元素测试
System.out.println("-------指定位置插入指定元素测试结果-------->");
sq.seqListDInsert(3,0);
sq.seqListDInsert(4,9);
sq.printfSeqList();
sq.printSize();
//删除下标为pos的元素
System.out.println("-------删除下标为pos的元素结果-------->");
sq.deleteSeqListD(2);
sq.printfSeqList();
sq.printSize();
//清空数据表中的元素大小
System.out.println("-------清空数据表中的元素大小结果-------->");
sq.clearSeqListD();
sq.printfSeqList();
sq.printSize();
}
}