首页 / 知识
Java实现顺序表、链表结构
2023-04-11 16:33:00

顺序表
定义:
用一段物理地址连续的存储单元依次存储数据元素的线性结构(逻辑上连续,物理上也连续)
(1)静态顺序表:使用定长数组存储。
(2)动态顺序表:使用动态开辟的数组存储
【注意】静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用,所以相比之下,动态数组更为灵活,可根据需要动态分配空间大小
实现方法:
增、删、改、查
增加操作:从头部插入、从尾部插入、在任意索引位置处插入
删除操作:根据索引删除元素、根据元素值删除第一个出现的该元素、根据元素值删除所有该值元素
查找操作:根据元素值查找是否存在某元素、根据索引下标返回该处元素值、根据元素值返回索引下标
修改操作:根据索引下标修改该处元素
代码实现:
public class MyArray {
private int[]data;
private int size;
// 无参构造
public MyArray(){
this.data=new int[5];
}
// 有参构造
public MyArray(int n){
this.data=new int[n];
}
// grow方法用于扩充内存
private void grow() {
int[] newdata= Arrays.copyOf(data,size*2);
this.data=newdata;
}
// toString方法输出顺序表内容
public String toString(){
String str="[";
for (int i = 0; i <size ; i++) {
str+=data[i];
if(i!=size-1){
str+=",";
}
}
str+="]";
return str;
}
// 尾插法:
public void addLast(int value){
if(size== data.length){
grow();
}
data[size]=value;
size++;
}
// 头插法:
public void addFirst(int value){
if(size==data.length){
grow();
}
for (int i = size-1; i >=0; i--) {
data[i+1]=data[i];
}
data[0]=value;
size++;
}
// 中间任意位置插入:
public void addIndex(int index,int value){
if(size==data.length)
grow();
if(index<0||index>size){
System.err.println("插入位置不合理!");
return;
}
else {
for (int i = size - 1; i >= index; i--) {
data[i + 1] = data[i];
}
data[index] = value;
size++;
}
}
// 查看当前数组中是否存在该元素
public boolean contains(int value){
for (int i = 0; i < size; i++) {
if(data[i]==value)
return true;
}
return false;
}
// 查找当前数组元素对应的下标
public int getIndex(int value){
for (int i = 0; i < size; i++) {
if(data[i]==value){
return i;
}
}
return -1;
}
// 查找数组下标为index的元素
public int getValue(int index) {
if (index < 0 || index > size - 1) {
System.out.println("输入下标不合理");
return -1;
}
return data[index];
}
// 根据索引删除元素,注意将最后一个元素置为0
public void removeIndex(int index){
if(index<0||index>=size){
System.err.println("输入不合法!");
}
for (int i = index; i <size-1; i++) {
data[i]=data[i+1];
}
size--;
data[size]=0;
}
// 删除第一个元素值为value的元素
public void removeValueOnce(int value){
int a=getIndex(value);
removeIndex(a);
}
// 删除所有元素值为value的元素
public void removeValueAll(int value){
for (int i = 0; i < size; i++) {
while(i!=size||data[i]==value)
removeIndex(i);
}
}
// 根据索引修改元素
public void recompose(int index,int newValue){
if(index<0||index>=size){
System.err.println("输入不合法!");
}
data[index]=newValue;
}
}
|
最新内容
相关内容
Python元类之通过元类实现数据库OR
Python元类之通过元类实现数据库ORM框架,数据,名称,信息,代码,主体,当中,字段,分析,一致,投入,ORM框架是什么如果是没有做过后端的小伙伴上来Python算法定义
Python算法定义,有限,时间,数据,算法,情况,培训,系统,策略,复杂度,步骤,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的python如何读取列表中元素的位置?
python如何读取列表中元素的位置?,位置,数据,异常,培训,字符串,元素,索引,方法,示例,结果,python读取列表中元素位置的方法:1、使用index()方python实现报表用什么?
python实现报表用什么?,工具,工作,培训,报表,内容,参数,语言,终端,矩阵,语句,python中可以使用xlwt与xlrd库读写Excel报表。xlwtPython语言中python里小数如何表述?
python里小数如何表述?,银行,培训,小数,位数,问题,精度,表示,以上,存在,更多,1、Python中的小数存在精度问题:>>>0.1+0.1+0.1-0.35.5511151231python中函数怎么表示?
python中函数怎么表示?,名称,标准,培训,代码,函数,圆括号,字符串,表达式,选择性,自变量,python中函数定义规则:·函数代码块以def关键词开头,后机器学习用java还是python?
机器学习用java还是python?,分析,环境,数据,培训,发展,机器,结果,控制台,生态环境,有用,机器学习用python更合适。机器学习不需要面向对象,不Python怎么取出列表中的相邻元素?
Python怎么取出列表中的相邻元素?,代码,异常,培训,元素,指针,序列,对象,表示,语句,函数,1、python的迭代器。iter()能把一个序列生成为一个和python如何获取列表里的数据类型?
python如何获取列表里的数据类型?,代码,信息,培训,类型,数据类型,表里,元素,语句,函数,对象,1、Python可以通过tpye()方法来判断list里的元知python如何实现换行?
python如何实现换行?,培训,结果,字符,以上,方法,更多,内容,python实现换行的方法:1、使用换行符“\n”实现换行#-*-coding:utf-8-*-A="来python怎么返回列表元素索引?
python怎么返回列表元素索引?,检测,异常,培训,索引,元素,列表,方法,字符串,结果,范围内,python中可以使用index()方法返回列表中指定元素的索python怎么筛选列表中大于0的数据?
python怎么筛选列表中大于0的数据?,数据,培训,函数,结果,以上,方法,更多,内容,列表,python筛选列表中大于0的数据的方法:1、使用匿名函数lamb