Java数据结构—顺序表

什么叫做顺序表

用一组地址连续的存储单元依次存储线性表的数据元素。

顺序表的特点

  1. 逻辑结构上相邻,物理结构上也相邻。
  2. 存在唯一的一个被称作“第一个”的元素,也存在唯一一个被称作“最后一个”的元素。
  3. 除第一个以外,集合中的每个数据元素均只有一个前驱,除最后一个之外,集合中每个数据元素均只有一个后继。

顺序表的优点和缺点

优点:

  1. 空间利用率高,因为是连续存储,所以不会造成空间浪费;
  2. 存取速度快,因为利用下标。

缺点:

  1. 插入和删除慢,需要移动大量元素;
  2. 空间分配固定,不够灵活。

顺序表的实现

所有方法:

	public boolean add(int elem);
	public boolean insert(int index,int elem);
	public boolean set(int index,int elem);
	public boolean delete(int index);
	public boolean clear();
	public boolean isEmpty();
	public int size();
	public boolean contains(int elem);
	public int get(int index);
	public void printList();

实现方法:

class MyList{
	private int arr[];
	private int length;
	private int in = 0;
	public MyList (int length) {
		this.arr = new int[length];
		this.length = length;
	}
	public boolean add(int elem) {
		if(this.size()<this.length) {
			arr[this.size()]  = elem ;
			in++;
			return true;
		}
		return false;
	}
	public boolean clear() {
		int cur = this.length-1;
		while(cur!=-1) {
			this.delete(cur--);
		}
		return true;
	}
	public boolean contains(int elem) {
		int cur = 0;
		while(cur!=this.length) {
			if(arr[cur]==elem) return true;
			cur++;
		}
		return false;
	}

	public boolean delete(int index) {
		int cur = index;
		if(index>=this.length || index<0) return false;
		while(cur!=this.size()) {
			arr[cur] = arr[cur+1];
			cur++;
		}
		arr[this.size()] = 0;
		return true;
	}

	public int  get(int index) {
		if(index>=this.length || index<0) return -1;
		return arr[index];	
	}

	public boolean insert(int index, int elem) {
		int cur = this.size();
		if(this.size()>=this.length) return false;
		while(cur!= index-1) {
			arr[cur] = arr[cur-1];
			cur--;
		}
		arr[index] = elem;
		return true;
	}
	public boolean isEmpty () {
		if(this.size() == 0) return true;
		return false;
	}

	public boolean set(int index, int elem) {
		arr[index] =elem;
		return true;
	}

	public int size() {
		return this.in;
	}
	public void printList() {
		for(int i = 0;i<this.size();i++) {
			System.out.println(arr[i]);
		}
	}
	
}

测试:

MyList myList = new MyList(5);
		myList.add(4);
		myList.add(3);
		myList.add(7);
		myList.add(9);
		myList.insert(2,8); // 向下标为2的元素的前面插入8 
		myList.set(3,1);
		System.out.println("空表?  " + myList.isEmpty());
		System.out.println("包含3吗?  " + myList.contains(3));
		System.out.println("下标为2的元素的值: " +myList.get(2));
		System.out.println("size:  " +myList.size());
		myList.delete(1);
		myList.printList();
		myList.clear();

输出:

空表?  false
包含3吗?  true
下标为2的元素的值: 8
size:  4
4
8
1
9
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 
   第二个模块——Menu()的功能是:显示提示选单。 
   第三个模块——Quit()的功能是:退出选单。 
   第四个模块——Create()的功能是:创建新的数据记录。 
   第五个模块——Add()的功能是:增加新的数据记录,并返回选单。 
   第六个模块——Find()的功能是:按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。 
   第七个模块——Alter()[的功能是:修改某条记录的信息,如果未找到要修改的记录,则提示系统中无此记录,并返回选单。 
   第八个模块——Delete()的功能是:删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。 
   第九个模块——List()的功能是:显示所有记录。 一、用链表或者顺序表实现以下系统,完成线性表的建立(至少包括10个结点),以及线性表中信息(结点)的插入、查找、删除、修改、输出等操作,具体的模块要求见上方的“总的模块要求”。建议用“文件”存储数据。 1.通讯录管理系统的设计与实现 (1)通讯者信息包括:编号(char num[10])、姓名(char name[10])、性别(char sex[10])、电话(char phone[20]) (2)除了总的模块要求外,还需统计通讯录中男性人数及女性人数,并求出通讯录中的第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 
   第二个模块——Menu()的功能是:显示提示选单。 
   第三个模块——Quit()的功能是:退出选单。 
   第四个模块——Create()的功能是:创建新的数据记录。 
   第五个模块——Add()的功能是:增加新的数据记录,并返回选单。 
   第六个模块——Find()的功能是:按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。 
   第七个模块——Alter()[的功能是:修改某条记录的信息,如果未找到要修改的记录,则提示系统中无此记录,并返回选单。 
   第八个模块——Delete()的功能是:删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。 
   第九个模块——List()的功能是:显示所有记录。 一、用链表或者顺序表实现以下系统,完成线性表的建立(至少包括10个结点),以及线性表中信息(结点)的插入、查找、删除、修改、输出等操作,具体的模块要求见上方的“总的模块要求”。建议用“文件”存储数据。 1.通讯录管理系统的设计与实现 (1)通讯者信息包括:编号(char num[10])、姓名(char name[10])、性别(char sex[10])、电话(char phone[20]) (2)除了总的模块要求外,还需统计通讯录中男性人数及女性人数,并求出通讯录中的男女比例。 男女比例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值