day11:顺序表一(线性表的顺序表示和实现)

一、线性表的顺序表示

1、定义:线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。(可以理解为数组)

2、元素地址相关计算:假设线性表的每个元素需占用l个存储单元,数据元素所占的第一个单元的存储地址作为存储位置。

①线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间的关系:LOC(ai+1) = LOC(ai) + l 。(ps:可以理解为递推关系)

②线性表的第i个元素ai的存储位置为:LOC(ai) = LOC(a1) + ( i - 1 ) * l。

二、顺序表在数据存储、基本操作上的特点

优点:①元素存储关系与逻辑关系一致:物理相邻对应逻辑相邻;

②随机存储元素,可以按下标直接访问;

缺点:①插入、删除操作需要移动大量元素;

②空间利用率不高,预先分配空间需按最大空间分配;

三、顺序表的编程模型

1. 定义元素类型与顺序表类型

2. 声明顺序表变量与初始化存储空间   // length = 0

3. 操纵表元素:插入、删除、查找、读取、写入

4. 释放存储空间 //JAVA可以自动回收

 1、顺序表初始空间分配

public static final int MAX_LENGTH = 100;                  //顺序表初始空间分配
public static final int LISTINCREMENT =10;                 //顺序表空间分配增量

2、顺序表的初始化

public class SequentialList {
	public static final int MAX_LENGTH = 100;
	int length;
	int[] data;
}

3、构造一个空的顺序表

public SequentialList() {
	length = 0;
	data = new int[MAX_LENGTH];
}

4、初始化一个顺序表

public SequentialList(int[] array) {
	data = new int[MAX_LENGTH];
	length = array.length;

	for (int i = 0; i < array.length; i++) {
		data[i] = array[i];
	} // Of for i
}

 5、重写toString方法,判断顺序表是否为空,不为空则返回顺序表中的元素(遍历数组)

public String toString() {
    String resultString = "";
    
    if (length == 0) {
        return "The list is empty!";
    } // Of if
    else if (length != 0) {
        for (int i = 0; i < length - 1; i++) {
            resultString +=data[i] + ", ";
        } // Of for i
    }

    resultString += data[length - 1];
    return resultString;
}

6、清空顺序表

public void reset() {
	length = 0;
}// Of reset

 综合示范:初始化顺序表,输出顺序表中的元素,再删除元素。

package linear_list;

/**
 * The SeguentialList.
 * 
 * @author 前夜
 *
 */
public class SequentialList{
	
	public static final int MAX_LENGTH = 10;
	int length;
	int[] data;
	
	public SequentialList() {
		length = 0;
		data = new int[MAX_LENGTH];
	}// Of SequentialList
	
	public SequentialList(int[] array) {
		data = new int[MAX_LENGTH];
		length = array.length;
		
		for (int i = 0; i < array.length; i++) {
			data[i] = array[i];
		} // Of for i
	}// Of SequentialList
	
	/**
	 * Judge whether the list is empty.
	 * 
	 * Print the elements in the list.
	 */
	public String toString() {
		String resultString = "";
		
		if (length == 0) {
			return "The list is empty!";
		}// Of if
		else if (length != 0) {
			for (int i = 0; i < length - 1; i++) {
				resultString += data[i] + ", ";
			} // Of for i
		}// Of if
		
		resultString += data[length - 1];
		return resultString;
	}// Of toString
	
	/**
	 * Create an empty list.
	 */
	public void reset() {
		length = 0;
	}// Of reset
	
	/**
	 * The entrance of the program.
	 * 
	 * @param args Not used now.
	 */
	public static void main(String args[]) {
		int[] tempArray = { 2, 4, 6, 8 };
		SequentialList firstList = new SequentialList(tempArray);
		System.out.println("Intitailized, the list is: " + firstList.toString());
		System.out.println("Again, the list is: " + firstList);
		firstList.reset();
		System.out.println("After reset, the list is: " + firstList);
	}// Of main
}// Of class SequentialList

相关注意事项:

①长度不仅是顺序表的成员变量,也是数组的成员变量。事实上,名称可以是不同类的成员变量。

②长度不要超过分配的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值