顺序表

来源:互联网 发布:铝合金门窗设计软件 编辑:程序博客网 时间:2024/06/08 11:12

(1)SeqList 是类名,List是所实现的接口。该类有三个成员变量,其中listArray表示存储单元数据元素的数组,maxSize表示数组允许的最大数据元素个数,size表示数组中当前存储的数据元素个数。要求必须满足size<=maxSize.

(2)类的成员变量通常设计成private或默认访问权限。private访问权限只允许该类的成员变量函数访问;默认访问权限只允许该类的成员函数或同一包中的类成员函数访问。

(3)要把顺序表类SeqList设计成可重复使用的通用软件模块,就要把顺序表中保存的数据元素的类型设计成适合任何情况的抽象数据类型。Object类是java中所有类的根类,java支持多态性,定义为Object类的虚参,适用于任何派生类对象的实参。

(4)构造函数完成创建对象时初始化赋值和数组内存空间申请。顺序表构造函数完成三件事:确定maxSize的数值,初始化size的数值,为数组申请内存空间并使listArray等于(即指向或表示)所分配的内存空间。


原代码:

package 顺序表;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;


public class SeqList implements List {
final int defaultSize=10;
int maxSize;
int size;
Object[]listArray;
/*构造函数重载了两个:一个没有参数,用类中定义的常量defaultSize来给maxSize赋值;另一个有参数size,用改参数给maxSize赋值。*/
public SeqList(){
initiate(defaultSize);
}
public SeqList(int size){
initiate(size);
}
private void initiate(int sz){
maxSize=sz;
size=0;
listArray=new Object[sz];
}

/*插入*/


public void insert(int i,Object obj) throws Exception{
if(size==maxSize){
throw new Exception("顺序表已满无法插入!");
}
if(i<0||i>size)
{
throw new Exception("参数错误!");
}
for(int j=size;j>i;j--)
{
listArray[j]=listArray[j-1];
}
listArray[i]=obj;
size++;
}

//删除


public Object delete(int i) throws Exception{
if(size==0)
{
throw new Exception("顺序表已空无法删除!");
}
if(i<0||i>size-1)
{
throw new Exception("参数错误1");
}
Object it=listArray[i];
for(int j=i;j<size-1;j++)
{
listArray[j]=listArray[j+1];
}
size--;
return it;
}
public Object getDate(int i)throws Exception{
if(i<0||i>size)
{
throw new Exception("参数错误!");
}
return listArray[i];
}
public int size(){
return size;
}
public boolean isEmpty(){
return size==0;
}
public int MoreDateDelete(SeqList L,Object x)throws Exception{
int i,j;
int tag=0;

for(i=0;i<L.size;i++)
{
if(x.equals(L.getDate(i)))
{
L.delete(i);
i--;
tag=1;
}
}
return tag;
}

@Override
public boolean add(Object e) {
// TODO 自动生成的方法存根
return false;
}
@Override
public void add(int index, Object element) {
// TODO 自动生成的方法存根

}
@Override
public boolean addAll(Collection c) {
// TODO 自动生成的方法存根
return false;
}
@Override
public boolean addAll(int index, Collection c) {
// TODO 自动生成的方法存根
return false;
}
@Override
public void clear() {
// TODO 自动生成的方法存根

}
@Override
public boolean contains(Object o) {
// TODO 自动生成的方法存根
return false;
}
@Override
public boolean containsAll(Collection c) {
// TODO 自动生成的方法存根
return false;
}
@Override
public Object get(int index) {
// TODO 自动生成的方法存根
return null;
}
@Override
public int indexOf(Object o) {
// TODO 自动生成的方法存根
return 0;
}
@Override
public Iterator iterator() {
// TODO 自动生成的方法存根
return null;
}
@Override
public int lastIndexOf(Object o) {
// TODO 自动生成的方法存根
return 0;
}
@Override
public ListIterator listIterator() {
// TODO 自动生成的方法存根
return null;
}
@Override
public ListIterator listIterator(int index) {
// TODO 自动生成的方法存根
return null;
}
@Override
public boolean remove(Object o) {
// TODO 自动生成的方法存根
return false;
}
@Override
public Object remove(int index) {
// TODO 自动生成的方法存根
return null;
}
@Override
public boolean removeAll(Collection c) {
// TODO 自动生成的方法存根
return false;
}
@Override
public boolean retainAll(Collection c) {
// TODO 自动生成的方法存根
return false;
}
@Override
public Object set(int index, Object element) {
// TODO 自动生成的方法存根
return null;
}
@Override
public List subList(int fromIndex, int toIndex) {
// TODO 自动生成的方法存根
return null;
}
@Override
public Object[] toArray() {
// TODO 自动生成的方法存根
return null;
}
@Override
public Object[] toArray(Object[] a) {
// TODO 自动生成的方法存根
return null;
}
}

例子1:

首次依次输入数据元素1,2,3,4,5,6,7,8,9,10,然后删除数据元素5,依次显示当前顺序表的数据元素。

package 顺序表;
public class SeqListTest {
public static void main(String[] args) {
SeqList seqList=new SeqList(100);
int n=10;
try{
for(int i=0;i<n;i++)
{
seqList.insert(i, new Integer(i+1));
}
seqList.delete(4);
seqList.getDate(4);
for(int i=0;i<seqList.size;i++)
{
System.out.println(seqList.getDate(i));
}
}catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}

例子2:

依次输入下列表格元素,并依次输出

学生情况表学号姓名性别年龄200001张三男20200002李四男21200003王五男22学生类

package 顺序表;
public class Student {
private long number;
private String name;
private String sex;
private int age;
Student(long number,String name,String sex,int age){
this.number=number;
this.name=name;
this.sex=sex;
this.age=age;
}
public long getNumber(){
return number;
}
public String getName(){
return name;
}
public String getSex(){
return sex;
}
public int getAge(){
return age;
}
}

SeqListText2类

package 顺序表;
public class SeqListTest2 {
public static void main(String[] args) {
SeqList seqlist=new SeqList(100);
Student[]student;
student=new Student[3];
student[0]=new Student(200001,"张三","男",20);
student[1]=new Student(200002,"李四","男",21);
student[2]=new Student(200003,"王五","男",22);
int n=3;
try{
for(int i=0;i<n;i++)
{
seqlist.insert(i, student[i]);
}
for(int i=0;i<seqlist.size;i++)
{
Student st=(Student)seqlist.getDate(i);
System.out.println(st.getNumber()+"\t"+st.getName()
+"\t"+st.getSex()+"\t"+st.getAge());
}
}catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}

1 0