2022年数据结构-----JAVA类集学习之-------线性表定义 .pdf
《2022年数据结构-----JAVA类集学习之-------线性表定义 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构-----JAVA类集学习之-------线性表定义 .pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构中的线性表,对应着Collection中的 List接口。在本节中,我们将做以下三件事第一。我们先来看看线性表的特征第二,自己用 JAVA实现 List 第三,对比的线性表、链式表性能,以及自己的 List性能与 JDKList性能对比线性表特征:第一,一个特定的线性表,应该是用来存放特定的某一个类型的元素的(元素的“同一性”)第二,除第一个元素外,其他每一个元素有且仅有一个直接前驱;除最后一个元素外,其他每一个元素有且仅有一个直接后继(元素的“序偶性”)第二,元素在线性表中的“下标”唯一地确定该元素在表中的相对位置(元素的“索引性”)又,一.线性表只是数据的一种逻辑结构,其具体存储结
2、构可以为顺序存储结构和链式储存结构来完成,对应可以得到顺序表和链表,二.对线性表的入表和出表顺序做一定的限定,可以得到特殊的线性表,栈(FILO)和队列(FIFO)自己实现线性表之顺序表思路:1.顺序表因为采用顺序存储形式,所以内部使用数组来存储数据 2.因为存储的具体对象类型不一定,所以采用泛型操作 3.数组操作优点:1.通过指针快速定位到下表,查询快速名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 16 页 -缺点:1.数组声明时即需要确定数组大小。当操作中超过容量时,则需要重新声明数组,并且复制当前所有数据 2.当需要在中间进行插入或者删除时,则需要移动大量元素(size-
3、index个)具体实现代码如下Java 代码1./*2.*自己用数组实现的线性表3.*/4.public class ArrayList 5.Object data=null;/用来保存此队列中内容的数组6.int current;/保存当前为第几个元素的指标7.int capacity;/表示数组大小的指标8.9./*10.*如果初始化时,未声明大小,则默认为10 11.*/12.public ArrayList()13.this(10);14.15.16./*17.*初始化线性表,并且声明保存内容的数组大小18.*param initalSize 19.*/20.public ArrayL
4、ist(int initalSize)21.if(initalSize 0)22.throw new RuntimeException(数组大小错误:+initalSize);23.else 24.this.data=new ObjectinitalSize;25.this.current=0;26.capacity=initalSize;27.28.29.30./*31.*添加元素的方法添加前,先确认是否已经满了32.*param e 33.*return 34.*/名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 16 页 -35.public boolean add(E e)
5、36.ensureCapacity(current);/确认容量37.this.datacurrent=e;38.current+;39.return true;40.41.42./*43.*确认系统当前容量是否满足需要,如果满足,则不执行操作如果不满足,增加容量44.*param cur 当前个数45.*/46.private void ensureCapacity(int cur)47.if(cur=capacity)48./如果达到容量极限,增加10 的容量,复制当前数组49.this.capacity=this.capacity+10;50.Object newdata=new Obj
6、ectcapacity;51.for(int i=0;i cur;i+)52.newdatai=this.datai;53.54.this.data=newdata;55.56.57.58./*59.*得到指定下标的数据60.*param index 61.*return 62.*/63.public E get(int index)64.validateIndex(index);65.return(E)this.dataindex;66.67.68./*69.*返回当前队列大小70.*return 71.*/72.public int size()73.return this.current
7、;74.75.76./*77.*更改指定下标元素的数据为e 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 16 页 -78.*param index 79.*param e 80.*return 81.*/82.public boolean set(int index,E e)83.validateIndex(index);84.this.dataindex=e;85.return true;86.87.88./*89.*验证当前下标是否合法,如果不合法,抛出运行时异常90.*param index 下标91.*/92.private void validateIndex(in
8、t index)93.if(index current)94.throw new RuntimeException(数组 index 错误:+index);95.96.97.98./*99.*在指定下标位置处插入数据e 100.*param index 下标101.*param e 需要插入的数据102.*return 103.*/104.public boolean insert(int index,E e)105.validateIndex(index);106.Object tem=new Objectcapacity;/用一个临时数组作为备份107./开始备份数组108.for(int
9、 i=0;i current;i+)109.if(i index)114.temi=this.datai-1;115.116.117.this.data=tem;118.return true;119.名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 16 页 -120./*删除指定下标出的数据 *param index *return */public boolean delete(int index)validateIndex(index);Object tem=new Objectcapacity;/用一个临时数组作为备份 /开始备份数组 for(int i=0;i curr
10、ent;i+)if(i index)temi=this.datai;else if(i=index)temi=this.datai+1;else if(iindex)temi=this.datai+1;this.data=tem;return true;自己实现线性表之链表思路:1.链表采用链式存储结构,在内部只需要将一个一个结点链接起来。(每个结点中有关于此结点下一个结点的引用)链表操作优点:1.,因为每个结点记录下个结点的引用,则在进行插入和删除操作时,只需要改变对应下标下结点的引用即可缺点:1.要得到某个下标的数据,不能通过下标直接得到,需要遍历整个链表。实现代码如下Java 代码1./
11、*2.*自己用链式存储实现的线性表3.*/4.public class LinkedList 5.6.private Node header=null;/头结点7.int size=0;/表示数组大小的指标8.9.public LinkedList()10.this.header=new Node();11.12.名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 16 页 -13.public boolean add(E e)14.if(size=0)15.header.e=e;16.else 17./根据需要添加的内容,封装为结点18.Node newNode=new Node(
12、e);19./得到当前最后一个结点20.Node last=getNode(size-1);21./在最后一个结点后加上新结点22.last.addNext(newNode);23.24.size+;/当前大小自增加 1 25.return true;26.27.28.public boolean insert(int index,E e)29.Node newNode=new Node(e);30./得到第 N个结点31.Node cNode=getNode(index);32.newNode.next=cNode.next;33.cNode.next=newNode;34.size+;35
13、.return true;36.37.38.39./*40.*遍历当前链表,取得当前索引对应的元素41.*42.*return 43.*/44.private Node getNode(int index)45./先判断索引正确性46.if(index size|index 0)47.throw new RuntimeException(索引值有错:+index);48.49.Node tem=new Node();50.tem=header;51.int count=0;52.while(count!=index)53.tem=tem.next;54.count+;55.名师资料总结-精品资
14、料欢迎下载-名师精心整理-第 6 页,共 16 页 -56.return tem;57.58.59./*60.*根据索引,取得该索引下的数据61.*62.*param index 63.*return 64.*/65.public E get(int index)66./先判断索引正确性67.if(index=size|index 0)68.throw new RuntimeException(索引值有错:+index);69.70.Node tem=new Node();71.tem=header;72.int count=0;73.while(count!=index)74.tem=tem
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构-JAVA类集学习之-线性表定义 2022 数据结构 JAVA 学习 线性 定义
限制150内