Java语言描述顺序表类,顺序表类的基本操作实现
数据结构(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<curLen-1;j++) { //移除是从i处递增重排序 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<curLen;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 房廷飞 加油!