数据结构:线性表(Java实现)

本文探讨了线性表这一基础数据结构,通过Java代码详细讲解了如何使用顺序存储和链式存储结构来实现。首先定义了线性表操作的接口,然后分别实现了顺序存储和链式存储的版本,链式存储中还涉及到了节点类的设计。最后,文章还简要提及了双向链表的扩展。
摘要由CSDN通过智能技术生成

线性表是最基本的数据结构,可用顺序存储和链式存储结构来表示。
首先创建一个接口,包含线性表的操作。

public interface Ilist
{
   
	// 线性表置空操作
     public void clear();

     // 判断线性表是否为空操作
     public boolean isEmpty();
 
     // 获取线性表中元素的长度操作
     public int length();
 
     // 获取指定位置上面的元素操作
     public Object get(int i);
 
     // 在指定位置上面插入元素的操作
     public void insert(int i, Object x);
 
     // 删除指定位置上面的元素的操作
     public void remove(int i);
 
     // 查找指定元素的位置首次出现的位置操作
     public int indexOf(Object x);
 
     // 显示线性表中的内容操作
     public void display();
};

首先介绍其顺序实现
代码如下

package Linear_table;

public class Sqlist implements Ilist           //线性表顺序存储
{
   
	private Object[] listElem;                 //存储线性表元素
	private int curlen;                        //记录表的长度
	public Sqlist(int maxsize)
	{
   
		listElem = new Object[maxsize];
		curlen = 0;
	}

	@Override
	public void clear() {
   
		// 清零就是直接将表的长度置为0
		curlen = 0;
	}

	@Override
	public boolean isEmpty() {
   
		return curlen==0;
	}

	@Override
	public int length() {
   
		// 直接返回表的长度
		return curlen;
	}

	@Override
	public Object get(int i) {
   
		// 首先要判断索引是否合法
		if(i<0 || i>=curlen)             //线性表的的元素为 listElem[0] 到 listElem[curlen-1]
		{
   
			System.out.println("超出索引");
			return null;
		}
		else return listElem[i];
	}

	@Override
	public void insert(int i, Object x) {
   
		// 先判断是否有地方插入(表是否有空位)
		if(curlen == listElem.length)
		{
   
			System.out.println("表已满");
			return;
		}
		//再判断插入位置是否合理,i==curlen 时代表插入表尾,是合法的
		if(i<0||i>curlen)
		{
   
			System.out.println("插入位置不合法");
			return;
		}
		//将元素依次后移,为插入的元素留出位置
		for(int j = curlen;j>i;j--)
		{
   
			listElem[j] = listElem[j-1];
		}
		//插入元素
		listElem[i] = x;
		//插入元素后,线性表长度加1
		curlen++;
	}
		

	@Override
	public void remove(int i) {
   
		//线性表的元素为listElem[0] 到listElem[curlen-1]
		if(i<0 || i>curlen-1)
			System.out.println("删除位置不合法");
		//将元素依次向前覆盖
		for(int j = i;j<curlen-1;j++)
		{
   
			listElem[j] = listElem[j+1];
		}
		//删除后长度减1
		curlen--;
	}

	@Override
	public int indexOf(Object x) {
   
		// 用j来记录元素所在位置,从0开始找
		int j=0;       
		//比较用equals(),不能用==
		while(j<curlen && !listElem
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值