Java实现顺序表

Java实现顺序表

线性表L的主要操作:

【1】Initiate() 初始化:构造一个空的线性表L
【2】Insert(i,x) 插入:在线性表L中的第i个元素之前插入数据元素x。线性表L的长度增加1
【3】Delete(i) 删除:删除线性表L的第i个元素。线性表的长度减1
【4】Locate(x) 查找定位:对于给定的x,若线性表L存在一个元素a与之相等,则返回其序号i;否则返回null
【5】Length() 求长度:返回线性表L的元素个数
【6】Get(i) 存取:返回线性表L的第i(0<=i<Length(L))个数据元素,否则返回null
【7】Traverse() 遍历:依次输出线性表L中的每一个数据元素

【8】Copy( C ) 复制:将线性表L复制给线性表C
【9】Merge(A , B) 合并:将给定的线性表A和B合并为线性表L

样例

  1. class Student
    属性:身份证号(4位)、姓名、性别(‘M’,‘F’)、年龄([5.30])、籍贯
    方法:setter、getter、toString
  2. class SeqList
    属性:Student[]、当前元素个数、最大元素个数
    方法:构造函数初始化、getter和setter、insert、delete、get、traverse
  3. class Test
    创建链表
    生成信息:10个Student
    顺序插入10个Student到链表中
    遍历查看
    获取第5个Student信息
    删除第5个Student信息
    获取第5个Student信息

结果图

在这里插入图片描述

Java Code

public class Student{
	/*	身份证号(4位)、姓名(中英文姓名)、性别(M、F)、年龄([5,30])、籍贯(城市)	*/
	private String id;
	private String name;
	private char gender;
	private int age;
	private String nativeplace;
	
	public Student(){}
	public Student(String id,String name){
		this.id=id;
		this.name=name;
	}
	
	
	public String getId(){return id;}
	public String getName(){return name;}
	public char getGender(){return gender;}
	public int getAge(){return age;}
	public String getNativeplace(){return nativeplace;}
	
	public void setId(String id){this.id=id;}
	public void setName(String name){this.name=name;}
	public void setGender(char gender){this.gender=gender;}
	public void setAge(int age){this.age=age;}
	public void setNativeplace(String nativeplace){this.nativeplace=nativeplace;}
	
	@Override
	public String toString(){
		StringBuffer sb=new StringBuffer("");
		sb.append(id+"\t");
		sb.append(name+"\t");
		sb.append(gender+"\t");
		sb.append(age+"\t");
		sb.append(nativeplace);
		return sb.toString();
	}
}
public class SeqList{
	private Student[] students;
	private int maxLength;
	private int length;//当前元素个数
	
	public SeqList(int maxLength){
		length=0;
		if(maxLength<=0){
			//赋默认值:100
			this.maxLength=100;
			students=new Student[100];
			return;
		}
		this.maxLength=maxLength;
		students=new Student[maxLength];
	}
	
	public int getMaxLength(){return maxLength;}
	public int getLength(){return length;}
	
	/*插入:Insert(i,x)	
	在线性表L中的第i个元素之前插入数据元素x。线性表L的长度增加1*/
	//  0 1 ... length-1 
	//  0之前(首部)	length-1之前	length之前(尾部)
	//	index:0,1-length-1,length	[0,length]
	public boolean insert(int index,Student stu){
		if(index<0 || index>length){
			System.out.println("插入位置出错");
			return false;
		}
		if(length==maxLength){
			System.out.println("线性表已满");
			return false;
		}
		
		++length;
		for(int i=length-1;i>index;--i){
			students[i]=students[i-1];
		}
		students[index]=stu;
		return true;
	}
	
	//Delete(i)		删除:删除线性表L的第i个元素。线性表的长度减1
	public boolean delete(int index){
		if(index<0 || index>=length){
			System.out.println("删除位置出错");
			return false;
		}
		
		--length;
		for(int i=index;i<length;++i){
			students[i]=students[i+1];
		}
		return true;
	}
	
	//Get(int i)
	public Student get(int index){
		if(index<0 || index>=length){
			System.out.println("访问位置出错");
			return null;
		}
		return students[index];
	}
	
	public void traverse(){
		System.out.println("身份证号 姓名\t性别\t年龄\t籍贯");
		for(int i=0;i<length;++i){
			System.out.println(students[i]);
		}
	}
}
public class Test{
	public static void main(String[] args){
		SeqList stus=new SeqList(20);
		//身份证号,姓名,性别,年龄,籍贯
		String[] ids={"0001","0002","0003","0004","0005","0006","0007","0008","0009","0010"};
		String[] names={"李一蛋","李二蛋","李三蛋","李四","张五","王六","王七","王八","王九","王十"};
		char[] genders={'M','M','M','F','F','M','M','M','F','F'};
		int[] ages={19,20,21,22,22,21,20,19,15,15};
		String[] places={"武汉","北京","上海","武汉","北京","上海","武汉","北京","上海","广州"};
		
		for(int i=0;i<10;++i){
			Student s=new Student(ids[i],names[i]);
			s.setGender(genders[i]);
			s.setAge(ages[i]);
			s.setNativeplace(places[i]);
			stus.insert(i,s);
		}
		
		stus.traverse();
		System.out.print("\n\n");
		
		Student s=stus.get(4);
		System.out.println(s);
		
		stus.delete(4);
		
		s=stus.get(4);
		System.out.println(s);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值