四种基本的数据逻辑结构:
1.集合:数据元素之间只有“同属于一个集合”的关系;
2.线性结构:数据元素之间存在一个对一个的关系;
3.树形结构:数据元素之间存在一个对多个的关系;
4.图状结构:数据元素之间存在多个对多个的关系;
两种物理存储结构:
·顺序存储结构
·链式存储结构
线性表的基本操作:
初始化:通常时一个构造器,用于创建一个空的线性表;
返回线性表的长度:返回线性表中数据元素的个数;
获取指定索引处的元素:根据索引返回线性表中的数据元素;
按值查找数据元素的位置:
直接插入数据元素:
向指定位置插入元素:
直接删除数据元素:
删除线性表中指定位置的数据元素:
判断线性表是否为空:
清空线性表:
顺序存储结构:
package MyJava2;
import java.util.Arrays;
public class SequenceList {
private int DEFAULT_SIZE=16;//定义默认的长度
private int capacity;//数组的大小
private String[] element;//数组存储顺序存储结构中的元素
private int size=0;//顺序线性表的元素个数
public SequenceList(){//默认数组长度构建线性表
capacity=DEFAULT_SIZE;
element=new String[capacity];
}
public SequenceList(String data){//以一个初始元素构建线性表
this();
element[0]=data;
size++;
}
//以一个初始元素和指定数组长度构建线性表
public SequenceList(String data,int initilize){
capacity=1;
while(capacity<initilize){
capacity<<=1;
}
element=new String[capacity];
element[0]=data;
size++;
}
public int length(){
return size;
}
public String getEleByIndex(int index){//返回指定位置的元素
if(index<0||index>size-1){
throw new RuntimeException("OutOfIndex");
}
return element[index];
}
public int getIndexByEle(String ele){//返回指定元素的索引
for(int i=0;i<size;i++){
if(element[i].equals(ele)){
return i;
}
}return -1;
}
public void addEle(String data){
insert(data,size);
}
public void insert(String data,int index){//在指定位置添加元素
if(index<0||index>size){
throw new RuntimeException("OutOfIndex");
}
extendCapacity(size+1);
System.arraycopy(element,index,element,index+1,size-index);
element[index]=data;
size++;
}
private void extendCapacity(int minCapacity){//扩充数组长度
while(minCapacity>capacity){
capacity<<=1;
}
element= Arrays.copyOf(element,capacity);
}
public String delEle(int index){//删除指定位置的元素
if(index<0||index>size-1){
throw new RuntimeException("OutOfIndex");
}
String old=element[index];
int numMoved=size-index-1;
if(numMoved>0){
System.arraycopy(element,index+1,element,index,numMoved);
}
element[--size]=null;
return old;
}
public String delLast(){//删除最后一个元素
return delEle(size-1);
}
public boolean empty(){
return size==0;
}
public void claerAll(){
Arrays.fill(element,null);
size=0;
}
public String toString(){
StringBuffer sb=new StringBuffer();
for(int i=0;i<size;i++){
sb.append(element[i].toString()+" ");
}
return sb.toString();
}
public static void main(String[] args) {
SequenceList sequenceList=new SequenceList("1");
sequenceList.addEle("a");
sequenceList.addEle("b");
sequenceList.addEle("c");
System.out.println(sequenceList.length());
System.out.println(sequenceList.getEleByIndex(0));
System.out.println(sequenceList.getIndexByEle("b"));
sequenceList.delEle(2);
System.out.println(sequenceList.toString());
}
}