线性表之顺序表的实现-Java

线性表的存储方式有两种: 顺序存储和链式存储.本文主要介绍采用顺序存储的线性表-顺序表的基本实现.

根据空间分配方法的不同,顺序表分为静态分配和动态分配两种.

采用动态存储方法在运算过程中如果发生溢出,可以另外开辟一块更存储空间,用以替换原来的存储空间,从而达到扩充存储空间的目的。

顺序表删除算法平均时间复杂度为 O(m)。

顺序表的优点:操作简单,能够随机存取,只需要 O(1)的时间就可以取出第i个元素。

顺序表的缺点:需要预先分配最大空间,最大空间数估计过大或过小会造成空间浪费或溢出。插入和删除操作需要移动大量元素(以下代码实现未包括删除)。

具体的代码实现:

public class SeqList {

//打印顺序表

public void display(){}

//新增元素

public void add(int pos, int data){}

//判断表中是否包含此元素

public boolean contains(int data){}

//查找元素对应位置

public int search(int data){}

//获取某位置的元素

public int getPos(int pos){}

//设置pos上的元素值

public void setPos(int pos, int data){}

//获取顺序表长度

public int size(){}

}

详细实现:

public class CreatSeqList {

//创建初始变量

public int[] element;

public int length;

public CreatSeqList() {

this.element = new int[];

}

//打印顺序表

public void display() {

for (int i = 0; i < length; i++) {

System.out.print(element[i]);

}

}

//添加元素:首先判断是否需要增容,然后判断下标是否合法,最后插入元素,可以在第一个元素前插入

private boolean isFull() {

if (this.element.length == this.length) {

return true;

}

return false;

}

public void add(int positon, int data) {

if (isFull) {

this.element = Arrays.copyOf(this.element, this element.length * 2);

}

if (position < 0 || position >= this.element.length) {

System.out.println("false position");

}

for (int i = this.length - 1; i >= position; i--) {

this.element[i + 1] = this.element[i];

}

element[position] = data;

this.length++;

}

//判断是否包含元素

public boolean contains(int data){

for(int i = 0; i < element.length; i++){

if(data == element[i]){

return true;

}

}

return false;

}

//同理,查找元素下标

public int search(int data){

for(int i = 0; i < element.length; i++){

if(data == element[i]){

return i;

}

}

return 0;

}

//获取position上元素

public int getPos(int position){

if(position < 0 || position >= element.length){

return 0;

}

return element[position];

}

//更新指定位置元素

public void setPos(int position, int data){

if(position < 0 || position >= element.length){

System.out.println("false");

}

this.element[position] = data;

}

//获取顺序表长度

public int size(){

return this.element.length;

}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值