数据结构(Java版)ch2 线性表的顺序存储(顺序表)
线性表的抽象数据Java接口描述如下:
package ch2;
/**
* 线性表的抽象数据接口,用Java语言描述线性表的这些功能!
* @author 房廷飞
*
*/
public interface IList {
public void clear(); //将线型表置成空表
public boolean isEmpty(); //判断是不是空表
public int length(); //返回线性表的长度
public Object get(int i) throws Exception; //返回线性表中第i个数据元素
public void insert(int i,Object x) throws Exception; //插入x作为第i个元素
public void remove (int i) throws Exception; //s删除第i个元素
public int indexOf(Object x); //查找并返回元素x首次出现的位序号
public void display(); //输出线性表中各个数据元素的值
}
顺序表类的Java语言描述,顺序表类的基本操作实现:
package ch2;
/**
* 用Java语言描述线性表的接口指定功能
* @author 房廷飞
*
*/
public class SqList implements IList{ //执行IList接口
//构造一个存储空间为maxsize的顺序表
private Object[] listItem; //顺序表的存储空间
private int curLen; //顺序表当前的长度
private int maxSize;
//构造一个存储空间为maxsize的顺序表
public SqList (int maxsize) {
curLen=0;
maxSize=maxsize;
listItem=new Object[maxSize];
}
@Override
public void clear() {
// TODO Auto-generated method stub
curLen=0;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return curLen==0;
}
@Override
public int length() {
// TODO Auto-generated method stub
return curLen;
}
@Override
public Object get(int i) throws Exception {
// TODO Auto-generated method stub
if(i<0||i>curLen-1)
throw new Exception("第"+i+"个元素不存在!");
return listItem[i];
}
@Override
public void insert(int i, Object x) throws Exception {
// TODO Auto-generated method stub
if (curLen==maxSize)
throw new Exception("顺序表已满,不能插入!");
if (i<0||i>curLen)
throw new Exception("插入位置不合法!");
for(int j=curLen;j>i;j--) { //插入是从最后递减重排序 //标识,可尝试改
listItem[j]=listItem[j-1];
}
listItem[i]=x;
curLen++;
}
@Override
public void remove(int i) throws Exception{
// TODO Auto-generated method stub
if(i<0||i>curLen-1)
throw new Exception("移除位置不合法!");
for(int j=i;j
listItem[j]=listItem[j+1];
}
curLen--;
}
@Override
public int indexOf(Object x) {
// TODO Auto-generated method stub
for(int i=0;i<=curLen;i++) {
if(listItem[i].equals(x)) {
return i;
}
}
return -1;
}
@Override
public void display() {
// TODO Auto-generated method stub
for(int i=0;i
System.out.println(listItem[i]);
}
}
}
通过两个小例子应用顺序表:
demo1:
package ch2;
import java.util.Scanner;
/**
* 例一:建立一个由a-z的26个英文字母组成的字母顺序表,求每个字母的直接前驱和直接后继,编程实现!
* @author 房廷飞
*
*/
public class Practice01 extends SqList{
public Practice01(int maxsize) {
super(maxsize);
// TODO Auto-generated constructor stub
}
public static void main(String[] args) throws Exception {
Practice01 p1=new Practice01(26);
for(int i=0;i<26;i++) {
p1.insert(i,(char)(97+i));
}
System.out.println("请输入要查询的字母位序号(0~25):");
int i = new Scanner(System.in).nextInt();
if(i>0&&i<25) {
System.out.println("第"+i+"个字母的直接前驱为:"+p1.get(i-1));
System.out.println("第"+i+"个字母的直接后驱为:"+p1.get(i+1));
}
else if(i==0) {
System.out.println("第"+i+"个字母的直接前驱不存在,直接后驱为:"+p1.get(i+1));
}
else {
System.out.println("第"+i+"个字母的直接后驱不存在,直接前驱为:"+p1.get(i-1));
}
}
}
demo2:
package ch2;
/**
* 例二:建立一个顺序表,表中数据为5个学生的成绩(89,93,92,90,100),然后查找成绩为90的数据元素,并输出其在数据表中的位置。
* @author 房廷飞
*
*/
public class Practice02 extends SqList{
public Practice02(int maxsize) {
super(maxsize);
// TODO Auto-generated constructor stub
}
public static void main(String[] args) throws Exception {
Practice02 p2=new Practice02(5);
p2.insert(0, 89);
p2.insert(1, 93);
p2.insert(2, 92);
p2.insert(3, 90);
p2.insert(4, 100);
int a=p2.indexOf(90);
if(a==-1) {
System.out.println("顺序表中不存在成绩为90的学生!");
}
else {
System.out.println("顺序表中成绩为90的数据元素的位置为:"+a); //3
}
}
}
数据结构(Java版)ch2 线性表的顺序存储(顺序表)
2019-04-06 17:51:34 房廷飞 加油!
来源:https://www.cnblogs.com/fangtingfei/p/10662397.html