package ADT;
public interface ILinarList<E> {
boolean add(E item);//添加
boolean add(int i,E item);//插入
E remove(int i);//删除
int indexOf(E item);//定位
E get(int i);//取表
int size();//长度
void clear();//清空
boolean isEmpty();//是否为空
}
package ADT;
import java.lang.reflect.Array;
import java.util.Scanner;
public class SeqList<E> implements ILinarList<E> {
private int maxsize;
private E[] data;
private int size;
@SuppressWarnings("unchecked")
public SeqList(Class<E> type ,int maxsize) {
// TODO Auto-generated constructor stub
this.maxsize=maxsize;
data = (E[])Array.newInstance(type, maxsize);
size = 0;
}
//添加
@Override
public boolean add(E item) {
// TODO Auto-generated method stub
if(!isFull()){
data[size++] = item;
return true;
}else
return false;
}
//是否为满
private boolean isFull() {
// TODO Auto-generated method stub
if(size == maxsize){
return true;
}else {
return false;
}
}
//插入
@Override
public boolean add(int i, E item) {
// TODO Auto-generated method stub
if(i<0 || i>size){
throw new IndexOutOfBoundsException("Index:" +i + ",Size:" + size);
}
if(!isFull()){
for(int j = size-1;j>=i;j--){
data[j+i] = data[j];
}
data[i] = item;
size++;
return true;
}else {
return false;
}
}
//删除
@Override
public E remove(int i) {
// TODO Auto-generated method stub
rangeCheck(i);
if(!isEmpty()){
E oldValue = data[i];
for(int j = i; j<size-1;j++){
data[j] = data[j+1];
}
data[--size] = null;
return oldValue;
}else{
return null;
}
}
//定位
@Override
public int indexOf(E item) {
// TODO Auto-generated method stub
if(item == null){
for(int i = 0;i<size;i++)
if(data[i] == null)
return i;
}else {
for(int i = 0;i<size;i++)
if(item.equals(data[i]))
return i;
}
return -1;
}
//取表
@Override
public E get(int i) {
// TODO Auto-generated method stub
rangeCheck(i);
return data[i];
}
//判断是否出现超界
private void rangeCheck(int i) {
// TODO Auto-generated method stub
if(i<0 || i>=size){
throw new IndexOutOfBoundsException("Index:" +i + ",Size:" + size);
}
}
//长度
@Override
public int size() {
// TODO Auto-generated method stub
return size;
}
//清空
@Override
public void clear() {
// TODO Auto-generated method stub
for(int i = 0;i<size;i++){
data[i] = null;
size =0;
}
}
//是否为空
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return size ==0;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ILinarList<Integer> list = new SeqList<Integer>(Integer.class, 50);
int data[] = {1,2,3,4,5};
Scanner sc = new Scanner(System.in);
System.out.println("--------------------------------------------------------");
System.out.println("操作选项菜单");
System.out.println("1,添加");
System.out.println("2,插入");
System.out.println("3,删除");
System.out.println("4,定位");
System.out.println("5,取表");
System.out.println("6,显示");
System.out.println("0,退出");
System.out.println("--------------------------------------------------------");
char ch;
do{
System.out.println("操作选项");
ch = sc.next().charAt(0);
switch (ch) {
case '1':
for(int i = 0;i<data.length;i++ ){
list.add(data[i]);
}
System.out.println("添加成功");
break;
case '2':
System.out.println("输入添加位置:");
int loc = sc.nextInt();
System.out.println("输入插入值:");
int num = sc.nextInt();
list.add(loc-1, num);
System.out.println("插入成功");
break;
case '3':
System.out.println("输入删除位置:");
loc = sc.nextInt();
list.remove(loc-1);
System.out.println("删除成功");
break;
case '4':
System.out.println("输入查找Item:");
num = sc.nextInt();
System.out.println(num + "位置为:" + (list.indexOf(num) + 1));
break;
case '5':
System.out.println("输入元素位置:");
loc = sc.nextInt();
System.out.println(loc + "元素为:" + list.get(loc-1));
break;
case '6':
System.out.println("输出线性表的元素:");
for(int i =0 ; i<list.size();i++){
System.out.print(list.get(i) +" ");
}
System.out.println();
break;
}
}while(ch != '0' );
sc.close();
}
}