数据结构--Chapter2(线性表)

本文详细介绍了线性表的抽象数据类型、顺序存储(顺序表)及其Java实现,包括顺序表的插入和删除操作。接着探讨了链式存储,如单链表、循环链表和双向链表的表示和实现,以及它们的操作。最后,对比了顺序表和链表的优缺点,并提供了几个线性表操作的练习题。
摘要由CSDN通过智能技术生成

2 线性表

    线性表是由n(n>=0)个具有相同数据类型的数据元素所构成的有限序列。当n=0时,此线性表是空表。

    线型表是一种线性结构,线性结构的特征:

    1)第一个数据元素没有前驱,这个数据元素也称为开始节点。

    2)最后一个数据元素没有后继,这个数据元素也称为终端节点。

    3)出第一个和最后一个数据元素之外,其他的数据元素有且仅有一个前驱和后继。

2.1 线性表的抽象数据类型描述

    线性表的抽象数据Java接口描述如下:

package adt;

/**
 * 线性表的抽象数据类型描述
 * 
 * @author Oner.wv
 *
 */
public interface IList {
	/**
	 * 将一个已经存在的表置为空表。
	 */
	public void clear();

	/**
	 * 判断线性表是否为空。
	 */
	public boolean isEmpty();

	/**
	 * 返回线性表中的数据元素个数。
	 */
	public int length();

	/**
	 * 读取并返回线性表中的第i个数据元素的值。0≤ i ≤length()-1。
	 * 
	 * @throws Exception
	 */
	public Object get(int i) throws Exception;

	/**
	 * 返回线性表中首次出现指定数据元素的为序号,若线性表中不包含此数据元素,则返回-1
	 */
	public int indexOf(Object x);

	/**
	 * 在线性表中第i个数据元素之前插入一个值为x的数据元素。0≤ i ≤length()。
	 * i=0时,在表头插入x;i=length()时,在表尾插入x。
	 * 
	 * @throws Exception
	 */

	public void insert(int i, Object x) throws Exception;

	/**
	 * 删除线性表中第i个数据元素。0≤ i ≤length()-1。
	 * 
	 * @throws Exception
	 */
	public void remove(int i) throws Exception;

	/**
	 * 输出线性表中各个数据元素。
	 */
	public void display();
}


2.2 线性表的顺序存储及其实现

2.2.1 线性表的顺序存储

    顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。线性表的顺序存储示意图:


    采用顺序存储结构的线性表简称为“ 顺序表”。顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:

    Loc(ai)=Loc(a0)+i*c   0<=i<=n-1。

    Loc(a0)代表a0的存储地址,c代表每个数据元素所占的存储单元。

2.2.2 顺序表类的实现

package sequenceList;

import adt.IList;

/**
 * 顺序表类的描述
 * 
 * @author Oner.wv
 *
 */
public class SqList implements IList {

	private Object[] listElem;
	private int curLen;

	public SqList(int maxSize) {
		curLen = 0;// 设置顺序表的当前长度为0
		listElem = new Object[maxSize];// 为顺序表分配maxSize个存储单元
	}

	@Override
	public void clear() {
		curLen = 0;
	}

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

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

	@Override
	public Object get(int i) throws Exception {
		if (i < 0 || i > curLen - 1) {// 判断i是否合法
			throw new Exception("第" + i + "个元素不存在");
		}
		return listElem[i];// 返回顺序表中第i个数据元素
	}

	@Override
	public int indexOf(Object x) {
		int j = 0;// j指示顺序表中待比较的数据元素,其初始值指示顺序表中第0个数据元素
		while (j < curLen && !listElem[j].equals(x)) {// 依次比较
			j++;
		}
		if (j < curLen) {// 判断j的位置是否位于顺序表中的位置
			return j;
		} else {
			return -1;// 值为x的数据元素在顺序表中不存在
		}

	}

	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值