数据结构与算法之第二章线性表

一、线性表及其基本操作
1、 线性表的特点:
1)除第一个元素外,其他每一个元素有一个且仅有一个直接前驱
2)除最后一个元素外,其他每一个元素有一个且仅有一个直接后继
3)原则上讲,线性表中表元素的数据类型可以不相同。但采用的存储表示可能会对其有限制

2、 线性表的抽象数据类型

package 线性表;

public interface IList {
   
	
	//清空线性表
	public void clear();
	
	//判断线性表是否为空
	public boolean isEmpty();
	
	//返回线性表的长度
	public int length();
	
	//返回第i个元素
	public Object getObject(int index) throws Exception;
	
	//插入x作为第i个元素
	public void insert(int index, Object o) throws Exception;
	
	//删除第i个元素并返回被删除对象
	public Object delete(int index) throws Exception;
	
	//返回x对应的元素位置
	public int getIndex(Object o);
	
	//输出线性表
	public void print();
}

二、 线性表的顺序存储及其实现
1、 基本知识点

  • 定义:将线性表中的元素相继存放在一个连续的存储空间中。可利用一维数组作为其存储结构。
    限制:所有的数据类型都应该相同
  • 特点:
    1)在线性表上逻辑上相邻的数据元素,在物理存储位置上也是相邻的
    2)便于随机存取
    3)不便于在顺序表上插入和删除,因为插入和删除回事大量数据元素产生位置的移动(两个特点都是因为索引带来的方便之处和不便之处)
    4)存储密度高,存储密度=(数据元素本身需要的存储空间)/(该数据元素实际所占用的空间)

2、顺序表类的描述

  • 基本方法
package 线性表;
//顺序表类的描述
public class SqList implements IList{
   
	private Object[] ListElem;  //线性表的存储空间
	private int length;   //线性表的长度
	
	//构造函数
	public SqList(int maxsize) {
     //maxsize在这里指的是线性表的最大容量
		length = 0;  //初始化线性表的长度为0
		ListElem = new Object[maxsize];   //为线性表分配存储单元
	}

	@Override
	public void clear() {
   
		//清除就是把当前顺序表的长度定义为0
		length = 0;
	}

	@Override
	public boolean isEmpty() {
   
		//通过判断顺序表的长度是否为0
		return length == 0;
	}

	@Override
	public int length() {
   
		return length;
	}

        @Override
	public void print() {
   
	    for(int i = 0 ; i <length ; i++) {
   
		System.out.print(ListElem[i]+" ");
	    }
	}}
  • 插入操作
@Override
/*
 * 先判断线性表是否已满
 * 后判断插入的位置是否合理
 * 再将插入位置后面的元素往后移动
 * 插入位置
 * 让线性表当前的长度自增
 */
public void insert(int index, Object o) throws Exception {
   
	if (length == ListElem.length) {
   
		throw new Exception("顺序表已满");
	}
	if(index < 0 || index > length) {
   
		throw new Exception("index无效");
	}
	for(int i = length; i > index ; i--) {
   
		ListElem[i] = ListElem[i-1];
	}
	ListElem[index] = o;
	length++;
}
  • 删除操作
@Override
/*
 * 首先判断删除的位置是否合理
 * 然后将删除的元素位置后的元素往前挪
 * 最后将list当前的长度减去1
 */
public Object delete(int index) throws Exception {
   
	if(index < 0 || index >= length) {
   
		throw new Exception("index无效");
	}
	Object s = ListElem[index];
	for(int i = index; i < length
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值