您的位置:首页 > 理论基础 > 数据结构算法

JAVA数据结构---顺序表

2016-03-12 21:31 411 查看
定义接口

package LinerTable;
public interface ListIntf {
public abstract int size();
public abstract void clear();
public abstract boolean isEmpty();
public abstract Object get(int i);
public abstract int indexOf(Object obj);
public abstract Object getPre(Object obj);
public abstract Object getNext(Object obj);
public abstract void insertElementAt(Object obj, int i);
public abstract Object remove(int i);
public abstract Object remove(Object obj);
}


定义线性表

package LinerTable;
public class Sqlist implements ListIntf {
// 线性表的长度
public static final int MAXSIZE = 100;
// 定义数组
Object[] elem = new Object[MAXSIZE];
private int len = 0;
public int getMAXSIZE() {
return MAXSIZE;
}

/**
* 接口的实现
*/
// 线性表的大小
public int size() {
return len;
}
// 清空线性表
public void clear() {
len = 0;
}
// 判断线性表是否为空
public boolean isEmpty() {
if (len == 0)
return true;
return false;
}
// 得到线性表的元素
public Object get(int i) {
if (len == 0)
return null;
if (i < 1 || i > len)
return null;
return elem[i - 1];// 查找不用循环,相当于数组引用
}
// 根据数据返回线性表中的下标
public int indexOf(Object obj) {
for (int i = 0; i < len; i++) {
if (elem[i].equals(obj))
return i
c981
+ 1;
}
return -1;
}
// 根据内容查找前驱元素
public Object getPre(Object obj) {
int i = indexOf(obj);
if (i == -1)
return null;
else if (i == 1)
return null;
return elem[i - 2];
}
// 如果obj是线性表中的元素,则返回下一个元素
public Object getNext(Object obj) {
int i = indexOf(obj);
if (i == -1)
return null;
else if (i == len)
return null;
return elem[i];
}
// 在指定的位置插入元素
public void insertElementAt(Object obj, int i) {
if (len == MAXSIZE) {
System.out.println("线性表已经满了,溢出.");
return;
} else if (i < 1 || i > len + 1) {
System.out.println("插入位置非法.");
return;
}
for (int j = len - 1; j > i - 1; j--)
elem[j + 1] = elem[j];
elem[i - 1] = obj;
len++;
return;
}
// 删除元素,并且返回删除的值
public Object remove(int i) {
Object obj;
if (i < 1 || i > len) {
System.out.println("删除位置非法.");
return null;
}
obj = elem[i - 1];
for (int j = i - 1; j < len - 1; j++) {
elem[j] = elem[j + 1];
}
len--;
return obj;
}
// 根据内容删除元素,返回其值,长度减1
public Object remove(Object obj) {
int i = indexOf(obj);
if (i == -1) {
System.out.println("要删除的元素不存在.");
return null;
}
return remove(i);
}

/**
* 新增的方法
*/
public void printList() {
if (len == 0) {
System.out.println("线性表为空.");
return;
}
System.out.println("线性表中的元素是:");
for (int i = 0; i < len; i++)
System.out.print(elem[i].toString() + " ");
System.out.println();
}

}


测试主类:

package LinerTable;

import java.util.Scanner;

public class MainTest {

public static void main(String[] args) {

System.out.println("开始=========================");

System.out.println("构造=========================");
Object obj;
int n;
Scanner input = new Scanner(System.in);
Sqlist sl = new Sqlist();
System.out.println("表长:" + sl.size());

// 构造5个元素的线性表
System.out.println("插入5个元素===================");
for (int i = 0; i < 5; i++) {
System.out.println("插入元素:");
obj = input.next();
sl.insertElementAt(obj, sl.size() + 1);
}
System.out.println("表长:" + sl.size());
sl.printList();

// 增加元素
System.out.println("增加=========================");
System.out.println("增加元素:");
System.out.println("元素:");
obj = input.next();
System.err.println("位置:");
n = Integer.parseInt(input.next());
sl.insertElementAt(obj, n);
System.out.println("表长:" + sl.size());
sl.printList();

// 查找元素
System.out.println("查找=========================");
System.out.println("元素查找:");
obj = input.next();
n = sl.indexOf(obj);
if (n != -1)
System.out.println("元素" + obj + "位于第" + n + "位");
System.out.println("位置:");
n = Integer.parseInt(input.next());
obj = sl.get(n);
if (obj != null)
System.out.println("元素" + obj + "位于第" + n + "位");

// 删除元素
System.out.println("位置删除=========================");
System.out.println("删除元素");
System.out.println("位置:");
n = Integer.parseInt(input.next());
obj = sl.remove(n);
if (obj != null)
System.out.println("删除的元素是:" + obj);
System.out.println("表长:" + sl.size());
sl.printList();
System.out.println("元素删除=========================");
System.out.println("元素:");
obj = input.next();
Object obj1 = sl.remove(obj);
if (obj != null)
System.out.println("删除的元素是:" + obj1);
System.out.println("表长:" + sl.size());
sl.printList();
input.close();
System.out.println("结束=========================");

}

}


运行结果:

开始=========================

构造=========================

表长:0

插入5个元素===================

插入元素:

12

插入元素:

32

插入元素:

543

插入元素:

564

插入元素:

65

表长:5

线性表中的元素是:

12 32 543 564 65

增加=========================

增加元素:

元素:

32

位置:

3

表长:6

线性表中的元素是:

12 32 32 564 564 65

查找=========================

查找元素:

32

元素32位于第2位

位置:

3

元素32位于第3位

位置删除=========================

删除元素

位置:

3

删除的元素是:32

表长:5

线性表中的元素是:

12 32 564 564 65

元素删除=========================

元素:

564

删除的元素是:564

表长:4

线性表中的元素是:

12 32 564 65

结束=========================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: