线性表与数组的根本区别_数据结构于算法—线性表

本文探讨线性表、顺序表和链表之间的逻辑和物理结构区别。线性表是一种逻辑结构,关注数据之间的关系,而顺序表和链表是其物理实现,分别使用数组和指针。顺序表的插入和删除操作效率较低,链表则相对灵活。文章通过Java编程示例介绍了顺序表和链表的实现,并强调了接口设计的重要性。
摘要由CSDN通过智能技术生成

—更多精彩持续输出,欢迎关注

前言

  • 通过前面数据结构与算法前导我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容。当然,我用自己的理解解分享给大家。
  • 其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系!
  • 线性表:逻辑结构, 就是对外暴露数据之间的关系,不关心底层如何实现。
  • 顺序表、链表:物理结构,他是实现一个结构实际物理地址上的结构。比如顺序表就是用数组实现。而链表用指针完成主要工作。不同的结构在不同的场景有不同的区别。
  • 对于java来说,大家都知道List接口类型,这就是逻辑结构,因为他就是封装了一个线性关系的一系列方法和数据。而具体的实现其实就是跟物理结构相关的内容。比如顺序表的内容存储使用数组的,然后一个get,set,add方法都要基于数组来完成,而链表是基于指针的。当我们考虑对象中的数据关系就要考虑指针的属性。指针的指向和value。

下面用一个图来浅析线性表的关系。可能有些不太确切,但是其中可以参考,并且后面也会根据这个图举例。

597dae1e8e90eb6196fb2d983abdd57a.png

线性表基本架构

  • 对于一个线性表来说。不管它的具体实现方法如何,我们应该有的函数名称和实现效果应该一致。你也可以感觉的到在一些结构的设计。比如List的Arraylist和LinkedList。Map的HashMap和currentHashMap他们的接口api都是相同的,但是底层设计实现肯定是有区别的。
  • 所以,基于面向对象的编程思维,我们可以将线性表写成一个接口,而具体实现的顺序表和链表可以继承这个接口的方法,提高程序的可读性。
  • 还有一点比较重要的,记得初学数据结构与算法时候实现的线性表都是固定类型(int),随着知识的进步,我们应当采用泛型来实现更合理。至于接口的具体设计如下:
package LinerList;public interface ListInterface {void Init(int initsize);//初始化表int length();boolean isEmpty();//是否为空int ElemIndex(T t);//找到编号T getElem(int index) throws Exception;//根据index获取数据void add(int index,T t) throws Exception;//根据index插入数据void delete(int index) throws Exception;void add(T t) throws Exception;//尾部插入void set(int index,T t) throws Exception;String toString();//转成String输出}

顺序表

  • 顺序表是基于数组实现的,所以一些方法要基于数组的特性。对于顺序表应该有的基础属性为一个数组data和一个length.
  • 还有需要注意的是初始化数组的大小,你可以固定大小,但是笔者为了可用性如果内存不够将扩大二倍。当然这样很可能因为空间使用问题造成很大的浪费。
  • 一些基本的额方法就不说了,下面着重讲解一些初学者容易混淆的概念和方法实现。这里把顺序表比作一队坐在板凳上的人。

插入

add(int index,T t)

  • 其中index为插入的编号位置,t为插入的数据
765c122f2717f19810e312c2f24fbbe7.png
9372e3dea0c64ec6f351119a6d28a3e6.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值