`
lueye
  • 浏览: 13713 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线性表的顺序实现

阅读更多

       数据结构和算法是程序的灵魂,基本的数据结构分为:线性结构、树、图。线性结构又分为顺序实现的线性结构和链式实现的线性结构。顺序实现的线性结构是一种随机存取结构,适合遍历,寻找元素;而不适合插入和删除操作。其get()、set()的时间复杂度为O(1),而插入和删除的时间复杂度为O(N)。使用java语言实现顺序存储的线性结构代码如下:

线性表的抽象数据类型

package dataStructtion.linear;
/**
 * 线性表的抽象数据类型
 * @author xiucai
 * @param <T>
 */
public interface LList<T> {
	/**
	 * 判断是否为空
	 * @return
	 */
	public boolean isEmpty();
	/**
	 * 返回线性表长度
	 * @return
	 */
	public int length();
	/**
	 * 返回下标为i的元素(i>=0)
	 * @param i
	 * @return
	 */
	public T get(int i);
	/**
	 * 设置下标为i的元素值为t
	 * @param i
	 * @param t
	 */
	public void set(int i,T t);
	/**
	 * 在下标为i的位置插入元素t
	 * @param i
	 * @param t
	 */
	public void insert(int i,T t);
	/**
	 * 在线性表末尾追加元素t
	 * @param t
	 */
	public void append(T t);
	/**
	 * 移除下标为i的元素
	 * @param i
	 * @return
	 */
	public T remove(int i);
	/**
	 * 移除线性表所有元素
	 */
	public void removeAll();
	/**
	 * 查找,返回首次出现的关键字为key的元素
	 * @param t
	 * @return
	 */
	public T search(T t);
	/**
	 * 判断线性表是否包含元素t
	 * @param t
	 * @return
	 */
	public boolean contain(T t);
}




顺序存储的线性表的实现:

package dataStructtion.linear;
/**
 * 线性表的顺序表示和实现
 * @author xiucai
 * @param <T>
 */
public class SeqList<T> implements LList<T>{
	private Object[] element;//对象数组
	private int len;//顺序表长度,记录元素个数
	/**
	 * 构造方法,初始化为size长度
	 * @param size
	 */
	public SeqList(int size){
		this.element=new Object[size];
		this.len=0;
	}
	/**
	 * 默认构造长度为64的数组
	 */
	public SeqList(){
		this(64);
	}
	/**
	 * 重写toString方法,用于输出
	 */
	@Override
	public String toString(){
		String string="";
		if(this.len==0)
			return string;
		for(int i=0;i<this.len;i++)
			string+=element[i].toString()+" ";
		return string;
		
	}
	/**
	 * 重写equals方法,用于比较
	 */
	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		boolean flag=true;
		if(this==obj)
			return flag;
		if(obj instanceof SeqList){
			SeqList<T> t=(SeqList<T>)obj;
			if(this.len==t.len){
				for(int i=0;i<this.len;i++){
					if(this.element[i]!=t.element[i]){
						flag=false;
					}
				}
			}else
				return false;
		}else 
			return false;
		return flag;
		
	}
	/**
	 * 判断线性表是否为空
	 */
	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		return this.len==0;
	}
	/**
	 * 线性表的长度
	 */
	@Override
	public int length() {
		// TODO Auto-generated method stub
		return this.len;
	}
	/**
	 * 获取下标为i的元素
	 */
	@Override
	public T get(int i) {
		// TODO Auto-generated method stub
		if(i>=0&&i<this.len)
			return (T)element[i];
		else throw new IndexOutOfBoundsException(i+",下标越界");
	}
	/**
	 * 设置小标为i的元素为t
	 */
	@Override
	public void set(int i, T t) {
		// TODO Auto-generated method stub
		if(t==null) return;
		if(i>=0&&i<this.len)
			this.element[i]=t;
		else throw new IndexOutOfBoundsException(i+",下标越界");
	}
	/**
	 * 在下标为i的位置设置元素t,其他元素依次后移
	 */
	@Override
	public void insert(int i, T t) {
		// TODO Auto-generated method stub
		if(t==null) return ;
		if(this.len==element.length){
			Object[] temp=this.element;
			this.element=new Object[temp.length*2];
			for(int j=0;j<temp.length;j++){
				element[i]=temp[i];
			}
		}
		i=i<0?0:i>this.len?len:i;
		for(int j=this.len-1;j>=i;j--)
			this.element[j+1]=this.element[j];
		this.element[i]=t;
		this.len++;
	}
	/**
	 * 线性表末尾追加元素t
	 */
	@Override
	public void append(T t) {
		// TODO Auto-generated method stub
		insert(this.len, t);
	}
	/**
	 * 移除下表为i的元素,剩下元素依次前移
	 */
	@Override
	public T remove(int i) {
		// TODO Auto-generated method stub
		if(i<0||i>this.len-1)
			return null;
		T t=(T)this.element[i];
		for(int j=i;j<this.len;j++)
			this.element[j]=this.element[j+1];
		this.element[this.len-1]=null;
		this.len--;
		return t;
	}
	/**
	 * 清空线性表
	 */
	@Override
	public void removeAll() {
		// TODO Auto-generated method stub
		for(int i=0;i<this.len;i++)
			this.element[i]=null;
		this.len=0;
	}
	/**
	 * 搜索key为t的元素
	 */
	@Override
	public T search(T t) {
		// TODO Auto-generated method stub
		if(t==null)
			return null;
		for(int i=0;i<this.len;i++){
			if(element[i].equals(t))
				return (T)element[i];
		}
		return null;
	}
	/**
	 * 判断线性表是否包含元素t
	 */
	@Override
	public boolean contain(T t) {
		// TODO Auto-generated method stub
		return this.search(t)!=null;
	}

}





测试类:

package dataStructtion.linear;
/**
 * 此类进行测试
 * @author xiucai
 *
 */
public class SeqTest {
	public static void main(String[] args) {
		SeqList<String> seqList=new SeqList<String>();
		System.out.println(seqList.isEmpty());
		System.out.println(seqList.length());
		seqList.insert(0, "aaa");
		System.out.println(seqList);
		seqList.insert(1,"bbb");
		System.out.println(seqList);
		seqList.insert(0,"ccc");
		System.out.println(seqList);
		System.out.println(seqList.length());
//		System.out.println(seqList.get(4));
		seqList.set(0, "ddd");
		System.out.println(seqList);
		seqList.remove(0);
		System.out.println(seqList);
		seqList.append("ccc");
		System.out.println(seqList);
		System.out.println(seqList.contain("aaa"));
		System.out.println(seqList.search("bbb"));
		seqList.removeAll();
		System.out.println(seqList);
	}
}



 

 

0
2
分享到:
评论

相关推荐

    线性表顺序实现动态显示插入删除

    线性表是计算机科学中一种基础的数据结构,它是由n(n≥0)个...以上就是关于线性表顺序实现动态显示插入删除的基本概念和实现方法。在实际应用中,还需要考虑错误处理、多线程安全等问题,以确保代码的健壮性和性能。

    线性表顺序实现

    下面我们将详细讨论线性表顺序实现的相关知识点。 ### 1. 线性表的基本操作 线性表的顺序实现通常包括以下基本操作: - **初始化**:创建一个空的线性表。 - **插入元素**:在线性表的指定位置插入一个新元素。...

    线性表顺序实现与操作详解-C语言实战应用

    内容概要:本文档详细介绍了线性表(顺序表)的基本概念、定义以及一系列基本操作的实现,包括线性表的初始化、插入、查询、遍历等功能,并提供了完整的源代码实例来帮助读者理解和掌握。 适合人群:适合对数据结构...

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

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

    线性表-顺序实现(2)

    "线性表--顺序结构"这个文件很可能包含了关于线性表顺序实现的详细讲解,包括但不限于基本概念、操作算法、性能分析以及相关的编程实现示例。通过深入学习和实践,可以掌握线性表顺序实现的关键技术和应用场景,这...

    线性表顺序存储实现

    线性表顺序存储实现,学习数据结构的链表中较为基础的顺序链表存储,实现对应的。h文件的函数实现

    线性表顺序存储的实现

    本文将深入探讨线性表顺序存储的实现,以及与其相关的算法和数据结构知识。 首先,顺序存储结构通常采用数组来实现。数组是一种在内存中连续存储的数据结构,每个元素可以通过下标访问。线性表的元素在数组中依次...

    线性表顺序存储demo

    线性表顺序存储demo,实现了线性表顺序存储的基本操作

    实验一 线性表的顺序存储实验

    ### 实验一 线性表的顺序存储实验 #### 实验目的 1. **掌握在Visual C++ 6.0环境下调试顺序表的基本方法**:通过本实验,学生能够熟悉Visual C++ 6.0集成开发环境,并学会如何在这个环境中进行程序的编写、编译与...

    线性表的顺序存储与实现

    线性表是计算机科学中一种基础的数据结构,它是由n(n≥0)个相同...提供的文件"02-线性表的顺序存储与实现"很可能是关于如何在具体编程语言中实现这些操作的示例代码,可以作为学习和理解线性表顺序存储的参考资料。

    线性表-顺序实现

    在计算机科学中,线性表的顺序实现是指在线性表中的元素按其逻辑顺序存储在一块连续的内存区域中,这种实现方式通常称为顺序表。下面将详细介绍线性表的顺序实现及其相关操作。 首先,线性表的顺序实现涉及到数组...

    线性表的顺序存储实现

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

    数据结构之线性表的顺序表示和实现

    以上就是关于“数据结构之线性表的顺序表示和实现”的主要知识点,以及可能的代码实现结构。通过这三个文件,我们可以学习如何在C++中实现一个基本的顺序表,并对其进行操作。这不仅有助于理解数据结构的基础,也为...

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

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

    线性表顺序表示及实现源码

    以上就是线性表顺序表示的理论基础以及C语言实现的源码概述。通过这些基本操作,我们可以实现对线性表的各种操作,如排序、搜索、合并等。线性表是许多复杂数据结构的基础,理解并掌握其原理和实现方法对于学习数据...

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

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

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

    通过此次实验,学生不仅掌握了线性表顺序存储结构的基本概念与实现方法,还学会了如何运用VC++进行程序调试以及设计简单的用户交互界面。这些技能对于以后的学习和工作都将是宝贵的财富。此外,通过亲手实现线性表的...

Global site tag (gtag.js) - Google Analytics