数据结构—顺序表和链表的总结
线性表(linear list):是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常 见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存 储时,通常以数组和链式结构的形式存储。
顺序表(数组)
定义:是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成 数据的增删查改。
顺序表一般可以分为: 静态顺序表(使用定长数组存储) 动态顺序表(使用动态开辟的数组存储)
动态顺序表更灵活, 根据需要动态的分配空间大小,在创建的时候也不需要知道数组的长度。
常用的操作:
(1)检索。检索就是在数据结构里查找满足一定条件的节点。一般是给定一个某字段的值,找具有该字段值的节点。
(2)插入。往数据结构中增加新的节点。
(3)删除。把指定的结点从数据结构中去掉。
(4)更新。改变指定节点的一个或多个字段的值。
(5)排序。把节点按某种指定的顺序重新排列。例如递增或递减。
代码实现
public class MyArray {
public int[] elem;
public int usedSize;
public MyArray() {
this.elem =new int[10]; //初始化数组10大小
}
//在pos位置新增元素
public void add(int pos,int data){
//0.判断满了没
if(usedSize==elem.length){
System.out.println("数组已满,无法插入");
return;
}
//判断合法性
else if(pos<0||pos>usedSize){
System.out.println("坐标不合法");
return;
}
else if(pos==usedSize){
elem[pos]=data;
usedSize++;
return;
}
//从后往前挪
else{
for(int i=usedSize;i>=pos;i--){
elem[i+1]=elem[i];
}
elem[pos]=data;
usedSize++;
return;
}
}
//打印顺序表
public void display(){
for (int i = 0; i <usedSize ; i++) {
System.out.print(elem[i]+" ");
}
System.out.println();
}
//判断顺序表是否满了
public boolean isFull() {
if(this.usedSize == this.elem.length) {
return true;
}
return false;
}
//判定是否包含某个元素
public boolean contains (int toFind ){
for (int i = 0; i <usedSize ; i++) {
if(elem[i]==toFind)
return true;
}
return false;
}
//查找某个元素对应的位置
public int search(int toFind) {
if(contains(toFind)==true){
int i = 0;
for (; i <usedSize ; i++) {
if (elem[i] == toFind)
return i;
}
}
return -1;
}
//获取pos位置的元素
public int getPos(int pos){
//判断pos是否合法
if(pos<0||pos>=this.usedSize) {
return -1;
}
return this.elem