`
hjj20040849
  • 浏览: 115043 次
  • 来自: 广州
社区版块
存档分类
最新评论

线性表的顺序存储结构(java版)

阅读更多

在说线性表的顺序存储结构之前,首先要讲一下必要的定义。

线性表的定义 :零个或多个数据元素的有限序列

线性表的顺序存储结构 :用一段地址连续的存储单元依次存储线性表的数据元素。

 

在了解这两个必要的定义之后,我们就来看一下他的代码实现吧,在本文中,由于我个人比较熟悉Java,所以就用Java来进行代码实现了,当然,如果条件允许的话,还是比较建议读者通过C或者C++来进行代码实现。

 

第一步:我们先定义一个接口,代码如下

package com.stucture.sqlList;

/**
 * 线性表顺序存储结构的接口
 * 指的是用一段地址连续的存储单元一次存储线性表的数据元素
 * @ClassName: ISeqList 
 * @author 小学徒
 * @date 2013-2-27
 */
public interface ISeqList<T> {
	
	/**
	 * 获得元素
	 * @param i 需要获得的第i个元素
	 * @return 
	 */
	public T getElem(int i);
	

	/**
	 * 插入元素
	 * @param i 元素的插入位置
	 * @param t 需要插入的元素
	 * @return  是否成功插入
	 */
	public boolean insertElem(int i, T t);
	
	/**
	 * 删除元素
	 * @param i 需要删除元素的位置
	 * @return
	 */
	public T deleteElem(int i);
}

 

第二步,实现该接口中必要的方法,代码如下:

package com.stucture.sqlList;

/**
 * 线性表顺序存储结构
 * 指的是用一段地址连续的存储单元一次存储线性表的数据元素
 * @ClassName: SeqList 
 * @author 小学徒
 * @date 2013-2-27
 */
public class SeqList<T> implements ISeqList<T> {
	public static final int MAXSIZE = 20;	//存储空间的初始化配量
	
	private T[] data;	//数组存储数据元素
	private int length;	//线性表当前长度		
	
	public SeqList() {
		data = (T[]) new Object[MAXSIZE];
	}
	
	// 获得元素
	public T getElem(int i) {
		if(i < 0 || i >MAXSIZE) {
			return null;
		}
		T t = data[i - 1];
		return t;
	}

	// 插入元素
	public boolean insertElem(int i, T t) {
		if(length == MAXSIZE) {	//线性表已经满了
			System.out.println("该线性表已经满了");
			return false;
		}
		
		if(i < 1 || i > MAXSIZE) {	//插入位置不在范围内
			System.out.println("该位置不合法");
			return false;
		}
		
		if(i < length) {	//插入位置不在表尾
			
			for(int j = length; j >= i; j--) {	//将要插入位置后数据元素向后移动一位
				data[j] = data[j - 1];
			}
		}
		data[i - 1] = t;	//插入新元素
		length++;	//线性表长度增加
		return true;
	}
	
	//删除元素
	public T deleteElem(int i) {
		
		if(length == 0) {	//"线性表为空"
			System.out.println("线性表为空");
			return null; 
		}

		if(i < 1 || i > length) {	//删除位置不在范围内
			System.out.println("该位置不合法");
			return null;
		}
		T t = data[i -1];
		for(int j = (i - 1); j <= (length - 1); j++) {
			data[j] = data[j+1];
		}
		length--;//线性表长度减少
		return t;
		
	}
	
	public T[] getData() {
		return data;
	}

	public void setData(T[] data) {
		this.data = data;
	}

	public int getLength() {
		return length;
	}

	public void setLength(int length) {
		if(length < 0 || length > MAXSIZE) {	//删除位置不在范围内
			System.out.println("长度不合法");
		}
		this.length = length;
	}
	
}

 

第三步,既然我们已经通过Java代码实现了线性表的顺序存储结构,我们下面就写一个比较完善的代码测试,在下面的代码中,我是通过随机数来生成一些必要的数据来测试的,只要多运行几遍,还是能够测试比较完善的,不过封装的可能有点不太好,如果读者看了以后有什么更好的建议,还希望能够指出,谢谢,好啦,废话不多说,继续上代码:

package com.stucture.sqlList;

import java.util.Random;

public class SeqListTest {
	final int MAX = 25;
	Random r = new Random();
	SeqList<Integer> seqList;
	
	public SeqListTest() {
		initSeqList();
	}
	
	//创建一个线性表顺序存储结构
	public void initSeqList() {

		seqList = new SeqList<Integer>();
//		int length = (int) Math.random();	//只能产生0.0 - 1.0之间的double随机数
		int length = Math.abs(r.nextInt(MAX));	//使用Random随机产生一个25左右的值,使用Math.abs()函数来取绝对值	
		System.out.println("产生的数组长度为 :" + length);
		
		if(length > SeqList.MAXSIZE) {
			System.out.println("该长度不合法");
		}
		
		for (int i = 1; i <= length; i++) {	//为生成的数组赋值,同时也测试了插入值的方法
			int j =r.nextInt(MAX);
			System.out.print(j + " ");
			
			if(!seqList.insertElem(i, j)) {
				System.exit(0);	
			}
		}
		System.out.println("\n原始数组是 :");
		display(seqList);
	}
	
	//测试删除方法
	public void deleteElem() {
		int i = r.nextInt(MAX);
		System.out.println("\n\n删除的位置是:" + i);
		Integer deleteNumber = seqList.deleteElem(i);
		
		if( deleteNumber == null) {
			System.exit(0);
		} else {
			System.out.println("删除的元素是 : " + deleteNumber);
			System.out.println("删除元素后数组是 :");
			display(seqList);
		}
	}
	
	//测试随机插入方法
	public void insertByRandom() {
		int i = r.nextInt(MAX);
		System.out.println("\n\n随机插入位置是 :" + i);
		int elem = r.nextInt(MAX);
		System.out.println("随机插入数据是 :" + elem);
		seqList.insertElem(i, elem);
		System.out.println("随机插入数据后数组是 :");
		display(seqList);
	}
	
	//数据展示
	public  void display(SeqList seqList) {
		for (int i = 1; i < seqList.getData().length; i++) {
			
			if(seqList.getElem(i) != null) {
				System.out.print(seqList.getElem(i) + " ");
			}
			
		}
		System.out.println("数组的长度为 :" + seqList.getLength());
	}
	
	//获取元素
	public void getElem() {
		int i = r.nextInt(MAX);
		System.out.println("\n获取位置为 :" + i);
		System.out.println("获取到的元素为 : " + seqList.getElem(i));
		
		
	}
	
	public static void main(String[] args) {
		SeqListTest s = new SeqListTest();
		s.insertByRandom();
		s.deleteElem();
		s.getElem();
	}
}

 下面个钟情况的运行结果我就不完全列出啦,我只列出其中一个测试结果,剩下的大家自己实践啦,毕竟实践是认知的源泉嘛。

产生的数组长度为 :15
9 8 22 23 18 0 6 0 19 1 7 24 11 10 18 
原始数组是 :
9 8 22 23 18 0 6 0 19 1 7 24 11 10 18 数组的长度为 :15


随机插入位置是 :21
随机插入数据是 :5
该位置不合法
随机插入数据后数组是 :
9 8 22 23 18 0 6 0 19 1 7 24 11 10 18 数组的长度为 :15


删除的位置是:1
删除的元素是 : 9
删除元素后数组是 :
8 22 23 18 0 6 0 19 1 7 24 11 10 18 数组的长度为 :14

获取位置为 :7
获取到的元素为 : 0

 

分享到:
评论
1 楼 听听米 2016-07-12  
在删除的时候最后一个元素并没有移除掉

相关推荐

    数据结构实验指导书,线性表顺序存储结构的操作

    数据结构实验指导书,线性表顺序存储结构的操作 本资源提供了一个关于线性表顺序存储结构的操作实验指导书,涵盖了线性表的基本运算、顺序存储结构的实现、主程序设计等内容。实验的目的是掌握用 VC++ 调试程序的...

    数据结构——线性表顺序存储结构(C++代码)

    线性表是数据结构中最基础且重要的概念之一,它是由n(n≥0)个相同类型元素构成的有限序列。顺序存储结构则是线性表的一种常见实现方式,它将...通过实际操作,可以加深对线性表顺序存储结构的理解,并提升编程技能。

    数据结构实验报告-线性表顺序存储结构的操作及其应用

    本次实验的核心在于深入理解并实践**线性表顺序存储结构**。线性表是数据结构中最基础的数据组织形式之一,它由一系列相同类型的数据元素组成,这些元素按照逻辑关系形成线性的序列。顺序存储结构则是通过连续的内存...

    线性表顺序存储结构的运算

    在顺序存储结构中,线性表的元素被存储在一个连续的内存区域,这样的方式使得访问和操作元素变得相对简单且高效。 顺序存储结构的优势在于其连续的内存分配方式,使得我们可以直接通过元素的索引来访问它们,时间...

    线性表顺序存储结构实现通讯录

    C++数据结构 线性表顺序存储结构实现通讯录

    数据结构线性表的顺序存储结构

    实验 二 基于链式存储结构 实现线性表的基本的 常见的运算 提示: ⑴ 提供一个实现功能的演示系统 ⑵ 具体物理结构和数据元素类型自行选定 ⑶ 线性表数据可以使用磁盘文件永久保存

    关于线性表的顺序存储和链式存储结构的实验报告

    在这个实验报告中,顺序存储结构通过定义一个结构体来表示线性表,包括三个字段:elem表示线性表首元素的地址,length表示线性表的长度,listsize表示线性表的最大容量。顺序存储结构的优点是随机访问速度快,因为...

    数据结构实验报告1线性表的顺序存储结构.doc

    实验报告的主题是“数据结构实验报告1:线性表的顺序存储结构”,旨在通过实践让学生掌握线性表在顺序存储结构中的基本操作,包括创建、插入和删除等。实验使用了Visual C++作为开发环境,并涉及到了C++编程语言。 ...

    线性表顺序存储的实现

    首先,顺序存储结构通常采用数组来实现。数组是一种在内存中连续存储的数据结构,每个元素可以通过下标访问。线性表的元素在数组中依次存放,数组的第一个元素对应线性表的第一个元素,以此类推。这种结构使得随机...

    线性表顺序存储运算的算法实现

    本话题将深入探讨线性表的顺序存储结构及其在C语言中的算法实现,包括线性表的输入输出、插入、删除以及长度和置空操作。 1. **线性表的顺序存储结构** 在顺序存储结构中,线性表的元素在内存中以数组的形式存储,...

    线性表的顺序存储结构

    在本实验中,线性表采用顺序存储结构进行实现,这是线性表的一种常见存储方式。 顺序存储结构是指在计算机内存中,线性表的各个元素按照它们在逻辑上的顺序依次存储在一块连续的内存区域中。这种存储方式使得线性表...

    线性表的顺序存储结构、链式存储结构上的基本操作

    在本主题中,我们将深入探讨线性表的两种主要存储结构:顺序存储结构和链式存储结构,以及在这两种结构上实现的基本操作。同时,我们还会涉及栈这种特殊类型的线性表及其顺序和链式存储结构。 一、线性表的顺序存储...

    数据结构--线性表的顺序存储结构(c语言实现)

    c语言实现的线性表顺序存储结构,包括初始化,设置线性表的值,增,删,改,查。

    C语言线性表顺序存储结构实例详解

    C语言线性表顺序存储结构实例详解 本资源主要介绍了C语言线性表顺序存储结构实例的相关知识点,涵盖了顺序存储结构的定义、线性表的顺序存储结构的实现、顺序表的初始化操作、获取元素操作、插入操作和删除元素操作...

    4.线性表顺序存储结构.pdf

    线性表有多种存储结构,其中顺序存储结构是一种重要的存储方式,它使用一段地址连续的存储单元依次存储线性表的数据元素。在顺序存储结构中,由于存储的是相同的数据类型,因此可以使用一维数组来实现。下面将详细...

    线性表的顺序存储实现

    线性表的顺序存储的c语言实现,带有注释,简洁明了,一看即懂

    线性表在顺序存储结构上的插入删除运算

    线性表在顺序存储结构上的插入删除运算; 编写主函数(使用字符菜单形式)

    员工按照顺序存储结构建立一个线性表

    某软件公司大约有30名员工,每名员工有姓名、工号、职务等属性,每年都有员工离职和...把所有员工按照顺序存储结构建立一个线性表,建立离职和入职函数,当有员工离职或入职时,修改线性表,并且打印最新的员工名单。

Global site tag (gtag.js) - Google Analytics