1.线性结构:线性表、栈、队列和串
2.线性表主要的物理存储结构有两种:顺序存储结构和链式存储结构。用顺序存储结构存放的线性表称为顺序表,用链式存储结构存放的线性表为线性链表。
3.顺序表:在内存中开辟一片连续的存储空间,用一组连续的存储单元依次存放这些数据。
特点:在逻辑上相邻的数据元素,它们的物理位置也是相邻的。
优点:(1)随机存取元素容易实现;(2)简单直观
缺点:(1)插入和删除节点困难;(2)扩展不灵活;(3)容易造成浪费
4.算法实现
/**
* 顺序表抽象接口
*
* @author dongkai
*
*/
public interface ListIntf {
public int size();
public void clear();
public boolean isEmpty();
public Object get(int i);
public int indexOf(Object object);
public Object getPre(Object object);
public Object getNext(Object object);
public void insertElementAt(Object object, int i);
public Object remove(int i);
}
import java.util.Arrays;
/**
* 顺序表的实现
*
* @author dongkai
*
*/
public class SqList implements ListIntf {
final int maxLen = 1000;
String v[] = new String[maxLen];
int len = 0;
/**
* @return the maxLen
*/
public int getMaxLen() {
return maxLen;
}
@Override
public int size() {
return len;
}
@Override
public void clear() {
Arrays.fill(v, null);// 将数组elementData中的每个元素都赋值null
len = 0;
}
@Override
public boolean isEmpty() {
return len == 0;
}
@Override
public Object get(int i) {
if (i < 1 || i > len) {
System.out.println("位置不正确");
return null;
} else {
return v[i - 1];
}
}
@Override
public int indexOf(Object object) {
int i;
for (i = 0; i < len; i++) {
if (object.equals(v[i])) {
break;
}
}
if (i < len) {
return i + 1;
} else {
return 0;
}
}
@Override
public Object getPre(Object object) {
int i;
for (i = 0; i < len; i++) {
if (v[i].equals(object)) {
break;
}
}
if (i < len) {
return v[i - 1];
}
return null;
}
@Override
public Object getNext(Object object) {
int i;
for (i = 0; i < len; i++) {
if (v[i].equals(object)) {
break;
}
}
if (i < len) {
return v[i + 1];
}
return null;
}
@Override
public void insertElementAt(Object object, int i) {
int j;
if (len == maxLen) {
System.out.println("溢出");
return;
} else {
if (i < 1 || i > len + 1) {
System.out.println("插入位置不正确");
return;
} else {
for (j = len - 1; j >= i - 1; j--) {
v[j + 1] = v[j];
}
v[i - 1] = (String) object;
len++;
return;
}
}
}
@Override
public Object remove(int i) {
Object object = null;
int j;
if (i < 1 || i > len) {
System.out.println("删除位置不正确");
return null;
} else {
object = v[i - 1];
for (j = i; j < len; j++) {
v[j - 1] = v[j];
}
len--;
return object;
}
}
}