数据结构-第一篇:线性表
程序员文章站
2022-03-26 16:37:48
线性表...
/**
- 线性表:
- 1.存在唯一的一个被称作“第一个”的数据元素
- 2.存在唯一的一个被称作“最后一个”的数据元素
- 3.除第一个之外,结构中的每个数据元素均只有一个前驱
- 4.除最后一个之外,结构中的每个数据元素均只有一个后继
- 数据元素的位置与它的值相关时(即有序),称为有序线性表;否则,称为无序线性表
- 线性表的顺序存储表示:
- 用一组地址连续的存储单元依次存储线性表的数据元素,称这种存储结构的线性表为顺序表
- 一般用数组表示
- @author hopefully
*/
public class _04linearList<T> {
//顺序表中一维数组的初始容量
private final int MAX_SIZE=10;
//存储元素的数组对象
private T[] listArray;
//保存顺序表的当前长度
private int length;
//构造一个空的顺序表
public _04linearList(){
//顺序表初始为空
length=0;
listArray=(T[])new Object[MAX_SIZE];
}
public _04linearList(int n) {
if(n<=0) {
System.out.println("error");
System.exit(1);
}
length=0;
listArray=(T[])new Object[n];
}
//判断顺序表是否为空
public boolean isEmpty() {
return length==0;
}
//顺序表的插入
public boolean add(T obj,int pos) {
if(pos<1||pos>length+1) {
System.out.println("pos值不合法");
return false;
}
//判断顺序表是否满,满就扩展为原来的两倍,并将原数组的值赋给新数组
if(length==listArray.length) {
T[] p=(T[])new Object[2*length];
for(int i=0;i<length;i++) {
p[i]=listArray[i];
}
listArray=p;
}
for(int i=length;i>=pos;i--) {
listArray[i]=listArray[i-1];
}
listArray[pos-1]=obj;
length++;
return true;
}
//顺序表的删除
public T delete(int pos) {
if(isEmpty()) {
System.out.println("顺序表为空,无法执行删除操作");
return null;
}
if(pos<1||pos>length) {
System.out.println("pos不合法");
return null;
}
T val=listArray[pos-1];
for(int i=pos;i<length;i++) {
listArray[i-1]=listArray[i];
}
length--;
return val;
}
//顺序表的查找
public int find(T obj) {
if(isEmpty()) {
System.out.println("顺序表为空");
return -1;
}
for(int i=0;i<length;i++) {
if(listArray[i].equals(obj)) {
return i+1;
}
}
return -1;
}
//顺序表的按序号查找
public T value(int pos) {
if(isEmpty()) {
System.out.println("顺序表为空");
return null;
}
if(pos<1||pos>length) {
System.out.println("pos值不合法");
return null;
}
return listArray[pos-1];
}
//顺序表更新元素
public boolean modify(T obj, int pos) {
if(isEmpty()) {
System.out.println("顺序表为空,无法修改");
return false;
}
if(pos<1||pos>length) {
System.out.println("pos值不合法");
return false;
}
listArray[pos-1]=obj;
return true;
}
//顺序表的长度
public int size() {
return length;
}
//遍历顺序表
public void list() {
for(int i=0;i<length;i++) {
System.out.print(listArray[i]+" ");
}
System.out.println();
}
//顺序表清空
public void clear() {
length=0;
}
public static void main(String[] args) {
_04linearList<Integer> list=new _04linearList<Integer>();
for(int i=0;i<20;i++) {
list.add(i+1, i+1);
}
list.list();
list.modify(52, 13);
list.list();
list.delete(13);
list.list();
System.out.println(list.value(13));
}
}
转载请注明出处
本文地址:https://blog.csdn.net/qq_41897167/article/details/109828257
上一篇: 关于Java中泛型、反射和注解的扫盲篇
下一篇: 【算法题目解析】杨氏矩阵数字查找