本篇文章主要是用做代码分享。代码,注释都写得很清楚,不清楚的可以问我,如果有些不对的地方也可以提出来,以便我及时改正。
接口类
//顺序表的接口类
public interface ISeqList {
int length(); //计算顺序表的长度
boolean isEmpty(); //判空
boolean isFull(); //判满
void insert(int i, Object x) throws Exception; //插入新元素操作
Object remove(int i) throws Exception; //删除操作
int search(Object x); //按值查找操作
Object getelement(int i) throws Exception; //按序号查找操作
void showList(); //遍历输出操作
void clear(); //清空顺序表
}
顺序表完成类
// 顺序表
// 需要接口类,注意语句
// 不能声明泛型数组,则不用泛型
public class SeqList implements ISeqList {
private Object data[]; // 采用数组存储顺序表数据
private int length; // 记录表中数据个数(长度)
// 通过构造方法设置数组容量
public SeqList(int capacity){
data = new Object[Math.abs(capacity)];
}
//默认给50个容量
public SeqList() {
this(50);
}
@Override
public int length() {
// 求顺序表长度
return length;
}
@Override
public boolean isEmpty() {
// 判空
return length == 0;
}
@Override
public boolean isFull() {
// 判满
return length == data.length;
}
@Override
public void insert(int i, Object x) throws Exception {
// 插入新元素操作,要先判断表是否已满
if(isFull()){
throw new Exception("顺序表已满!");
}
if(i < 0 || i > length){
throw new Exception("插入位置有误?");
}
for(int j = length; j > i; j--){
data[j] = data[j-1];
}
data[i] = x;
length++;
}
@Override
public Object remove(int i) throws Exception {
// 删除操作,按下标删除元素
if(isEmpty()){
throw new Exception("顺序表是空表!");
}
if(i < 0 || i > length-1){
throw new Exception("删除位置有误?");
}
Object temp = data[i];
for(; i < length-1; i++){
data[i] = data[i+1];
}
length--;
return temp;
}
@Override
public int search(Object x) {
// 查找x在顺序表中的位置,没找到返回-1
int i = 0;
while(i < length && !data[i].equals(x)){
i++;
}
if(i == length)
return -1;
return i;
// return (i < length ? i : -1);
}
@Override
public Object getelement(int i) throws Exception {
// 按下标查找元素,返回元素
if(i < 0 || i > length-1){
throw new Exception("第" + i + "个元素不存在!");
}
return data[i];
}
@Override
public void showList() {
// 遍历输出表中数据
for(int i = 0; i < length; i++){
System.out.print(data[i] + " ");
}
System.out.println();
}
@Override
public void clear() {
// 清空表
length = 0;
}
}
顺序表测试类
//测试类
public class TestSeqList01 {
public static void main(String[] args) throws Exception {
SeqList p = new SeqList(10); //设置顺序表容量为10
java.util.Scanner input = new java.util.Scanner(System.in);
System.out.println("输入你想存储的5个数字:");
for(int i = 0; i < 5; i++){
int x = input.nextInt();
p.insert(i, x);
}
p.showList();
System.out.println("数据长度是" + p.length());
System.out.println(p.isEmpty() + "\n" + p.isFull());
System.out.println("输入你想查询的数字:");
int h = input.nextInt();
System.out.println(h + "的下标是" + p.search(h));
System.out.println("输入你想查询第几个数字:");
int y = input.nextInt();
System.out.println("第" + y + "个数字是:" + p.getelement(y-1));
System.out.println("输入你想插入的位置,数字:");
int q = input.nextInt();
int q1 = input.nextInt();
p.insert(q, q1);
p.showList();
System.out.println("输入你想删除第几个数字:");
int f = input.nextInt();
p.remove(f-1);
p.showList();
p.clear();
p.showList();
}
}
范例
//音乐 歌手类
public class SingerOfMusic {
private String singer;
private String music;
public SingerOfMusic(String singer, String music) {
super();
this.singer = singer;
this.music = music;
}
public SingerOfMusic(){}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
public String getMusic() {
return music;
}
public void setMusic(String music) {
this.music = music;
}
@Override
public String toString() {
return "[singer=" + singer + ", music=" + music + "]";
}
// 关键代码,匹配操作
public boolean equals(Object p) {
return this.singer.equals(((SingerOfMusic)p).getSinger());
}
}
范例测试类
//测试类
public class TestSeqList02 {
public static void main(String[] args) throws Exception {
SeqList q = new SeqList(10); //设置顺序表数组容量为10
java.util.Scanner input = new java.util.Scanner(System.in);
System.out.println("你要输入几首歌:");
int num = input.nextInt();
for(int i = 0; i < num; i++){
System.out.println("第" + (i+1) + "个歌手和歌:");
String singer = input.next();
String music = input.next();
q.insert(i, new SingerOfMusic(singer, music));
}
q.showList();
System.out.println("请输入你想查询的歌手:");
String singer = input.next();
int i = q.search(new SingerOfMusic(singer,null));
System.out.println("查找结果:" + (i < 0 ? "无此歌手" : q.getelement(i)));
System.out.println("请输入你想删除的第几个歌手:");
int j = input.nextInt();
q.remove(j-1);
System.out.println("剩下的歌手有:");
q.showList();
System.out.println("请输入你想添加的的歌手和歌曲:");
String singer1 = input.next();
String music1 = input.next();
q.insert(num-1, new SingerOfMusic(singer1, music1));
q.showList();
}
}