1.打印顺序表 display
public class SeqList {
private int[] data = null; //new int[100]
private int size = 0;
public SeqList() {
data = new int[100];
}
public void display() {
//依此打印出每个元素
//形如: [1,2,3,4]
String result = "[";
for(int i = 0; i < size; i++) {
result += data[i];
if (i < size - 1) {
result += ",";
}
}
result += "]";
System.out.println(result);
}
}
简单测试:
public class Test {
public static void main(String[] args) {
SeqList seqList = new SeqList();
seqList.display();
}
}
2.顺序表中新增元素 add
public class SeqList {
private int[] datas = new int[100];
private int size = 0;
public void display() {
//依此打印出每个元素
//形如: [1,2,3,4]
String result = "[";
for(int i = 0; i < size; i++) {
result += datas[i];
if (i < size - 1) {
result += ",";
}
}
result += "]";
System.out.println(result);
}
public void add(int pos, int data) {
// pos 表示新元素要插入的位置(下标)
// data 表示新元素的值
//判定 pos 是否是有效值
//写代码时候要时刻关注参数的有效性
if (pos < 0 || pos > size) {
return;
}
//扩容,顺序表如果容量不够了,能够自动扩容
if (size >= datas.length) {
//需要扩容
int[] newDatas = new int[2 * datas.length];
for (int i = 0; i < datas.length; i++) {
newDatas[i] = datas[i];
}
datas = newDatas;
}
//1.尾插的情况
//把新元素放到下标为 size 位置上
if (pos == size) {
datas[pos] = data;
size++;
return;
}
//2.普通位置插入
for(int i = size - 1;i >= pos; i--) {
datas[i + 1] = datas[i];
}
datas[pos] = data;
size++;
}
}
简单测试:
public class Test {
public static void main(String[] args) {
SeqList seqList = new SeqList();
seqList.add(0,100);
seqList.add(0,200);
seqList.add(0,300);
seqList.add(0,400);
seqList.display();
}
}
3.判断是否包含某个元素 contains
public class SeqList {
private int[] datas = new int[100];
private int size = 0;
public boolean contains(int toFind) {
//循环访问每个元素并进行比较
//如果发现某个元素和 toFind 相等,返回 true
//如果所有的元素都找完了,还没找到相等的,就返回 false
for (int i = 0; i < size; i++) {
if(datas[i] == toFind) {
return true;
}
}
return false;
}
public void add(int pos, int data) {
// pos 表示新元素要插入的位置(下标)
// data 表示新元素的值
//判定 pos 是否是有效值
//写代码时候要时刻关注参数的有效性
if (pos < 0 || pos > size) {
return;
}
//扩容,顺序表如果容量不够了,能够自动扩容
if (size >= datas.length) {
//需要扩容
int[] newDatas = new int[2 * datas.length];
for (int i = 0; i < datas.length; i++) {
newDatas[i] = datas[i];
}
datas = newDatas;
}
//1.尾插的情况
//把新元素放到下标为 size 位置上
if (pos == size) {
datas[pos] = data;
size++;
return;
}
//2.普通位置插入
for(int i = size - 1;i >= pos; i--) {
datas[i + 1] = datas[i];
}
datas[pos] = data;
size++;
}
}
简单测试:
public class Test {
public static void main(String[] args) {
SeqList seqList = new SeqList();
seqList.add(0,1);
seqList.add(0,2);
seqList.add(0,3);
seqList.add(0,4);
System.out.println(seqList.contains(2));
}
}
4.查找某个元素对应的位置 search
public class SeqList {
private int[] datas = new int[100];
private int size = 0;
public int search(int toFind) {
for (int i = 0; i < size; i++) {
if (datas[i] == toFind) {
return i;
}
}
return -1;
}
public void add(int pos, int data) {
// pos 表示新元素要插入的位置(下标)
// data 表示新元素的值
//判定 pos 是否是有效值
//写代码时候要时刻关注参数的有效性
if (pos < 0 || pos > size) {
return;
}
//扩容,顺序表如果容量不够了,能够自动扩容
if (size >= datas.length) {
//需要扩容
int[] newDatas = new int[2 * datas.length];
for (int i = 0; i < datas.length; i++) {
newDatas[i] = datas[i];
}
datas = newDatas;
}
//1.尾插的情况
//把新元素放到下标为 size 位置上
if (pos == size) {
datas[pos] = data;
size++;
return;
}
//2.普通位置插入
for(int i = size - 1;i >= pos; i--) {
datas[i + 1] = datas[i];
}
datas[pos] = data;
size++;
}
public void display() {
//依此打印出每个元素
//形如: [1,2,3,4]
String result = "[";
for(int i = 0; i < size; i++) {
result += datas[i];
if (i < size - 1) {
result += ",";
}
}
result += "]";
System.out.println(result);
}
}
简单测试:
public class Test {
public static void main(String[] args) {
SeqList seqList = new SeqList();
seqList.add(0,1);
seqList.add(0,2);
seqList.add(0,3);
seqList.add(0,4);
seqList.display();
System.out.println(seqList.search(2));
}
}
5.获取某个下标的元素,给某个下标设置另外一个元素 getPos , setPos
public class SeqList {
private int[] datas = new int[100];
private int size = 0;
public int getPos(int pos) {
return datas[pos];
}
public void setPos(int pos, int data) {
datas[pos] = data;
}
public void add(int pos, int data) {
if (pos < 0 || pos > size) {
return;
}
if (size > datas.length) {
int[] newDatas = new int[2 * datas.length];
for (int i = 0; i < datas.length; i++) {
newDatas[i] = datas[i];
}
datas = newDatas;
}
if (pos == size) {
datas[pos] = data;
size++;
return;
}
for (int i = size - 1; i >= pos; i--) {
datas[i + 1] = datas[i];
}
datas[pos] = data;
size++;
}
public void display () {
String result = "[";
for (int i = 0; i < size; i++) {
result += datas[i];
if (i < size - 1) {
result += ",";
}
}
System.out.println(result += "]");
}
}
简单测试:
public class Test {
public static void main(String[] args) {
SeqList seqList = new SeqList();
seqList.add(0,1);
seqList.add(0,2);
seqList.add(0,3);
seqList.add(0,4);
seqList.display();
System.out.println(seqList.getPos(1));
seqList.setPos(1,5);
seqList.display();
}
}
6.删除第一次出现的某个元素 remove
public class SeqList {
private int[] datas = new int[100];
private int size = 0;
public int search(int toFind) {
for (int i = 0; i < size; i++) {
if (datas[i] == toFind) {
return i;
}
}
return -1;
}
public void add(int pos, int data) {
if (pos < 0 || pos > size) {
return;
}
if (size > datas.length) {
int[] newDatas = new int[2 * datas.length];
for (int i = 0; i < datas.length; i++) {
newDatas[i] = datas[i];
}
datas = newDatas;
}
if (pos == size) {
datas[pos] = data;
size++;
return;
}
for (int i = size - 1; i >= pos; i--) {
datas[i + 1] = datas[i];
}
datas[pos] = data;
size++;
}
public void display() {
String result = "[";
for (int i = 0; i < size; i++) {
result += datas[i];
if (i < size - 1) {
result += ",";
}
}
result += "]";
System.out.println(result);
}
public void remove(int toRemove) {
// toRemove 表示要被删除的元素
//1.先找到 toRemove 对应的下标
int pos = search(toRemove);
if (pos == -1) { //没找到
return;
}
//2.如果下标为最后一个元素,直接尾删
if (pos == size - 1) {
size--;
return;
}
//3.如果是中间元素,需要先搬运,再删除
for (int i = pos; i < size - 1; i++) {
datas[i] = datas[i + 1];
}
size--;
return;
}
}
简单测试
public class Test {
public static void main(String[] args) {
SeqList seqList = new SeqList();
seqList.add(0,1);
seqList.add(0,2);
seqList.add(0,3);
seqList.add(0,4);
seqList.add(0,2);
seqList.add(0,3);
seqList.add(0,4);
seqList.display();
seqList.remove(2);
seqList.display();
}
}
7.清空顺序表 clear
public class SeqList {
private int[] datas = new int[100];
private int size = 0;
public void add(int pos, int data) {
if (pos < 0 || pos > size) {
return;
}
if (size > datas.length) {
int[] newDatas = new int[2 * datas.length];
for (int i = 0; i < datas.length; i++) {
newDatas[i] = datas[i];
}
datas = newDatas;
}
if(pos == size) {
datas[pos] = data;
size++;
return;
}
for (int i = size - 1; i >= pos; i--) {
datas[i + 1] = datas[i];
}
datas[pos] = data;
size++;
return;
}
public void display() {
String result = "[";
for (int i = 0; i < size; i++) {
result += datas[i];
if (i < size - 1) {
result += ",";
}
}
result += "]";
System.out.println(result);
}
public void clear() {
size = 0;
}
}
简单测试:
public class Test {
public static void main(String[] args) {
SeqList seqList = new SeqList();
seqList.add(0,1);
seqList.add(0,2);
seqList.add(0,3);
seqList.add(0,4);
seqList.display();
seqList.clear();
seqList.display();
}
}
总结:顺序表的相关操作中,最重要的就是对有效元素的个数 size 的操作.