JAVA数据结构 线性表的链式存储及其实现
2019独角兽企业重金招聘Python工程师标准>>>
2线性表的链式存储及其实现
虽然顺序表具有随机存取的特点是一种有用的存储结构但是也有缺陷:
(1) 若需要给顺序表增加存储空间首先必须开辟一个更大的存储空间然后把数据复制到现在这个表当中
(2) 因为顺序表的数据元素在存储结构上相邻素要删除元素就要移动平均一半的数据元素
所以顺序表适合静态的线性表,表一旦形成就很少进行插入操作,对于要进行平凡的插入或者删除操作的“动态的”线性表通常采用链式存储结构,与此同时链式存储结构也失去了可随机存取的优点,链式结构只能进行顺序存取。
统一接口如下:
/** Kiss_My_Love* 2012/8/26* xaut.media082* */
package www.xaut.com.linkedlist;public interface Ilist {public void clear();public boolean isEmpty();public int length();public Object get(int i);public void insert(int i,Object x);public void remove(int i);public int indexOf(Object x);public void display();
}
2.1单链表的表示
data |
next |
节点有数据和指针构成
2.1.1节点类的描述
/** Kiss_My_Love* xaut* 2012/8/26* */
package www.xaut.com.linkedlist;public class Node {private Object data;private Node next;public Node(){this.data=null;this.next=null;}public Node(Object data){this.data=data;this.next=null;}public Node(Object data,Node next){this.data=data;this.next=next;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}}
2.1.2单链表类的描述:
/** Kiss_My_Love* xaut* 2012/8/26* */
package www.xaut.com.linkedlist;import java.util.Scanner;public class LinkedList implements Ilist {private Node head;public LinkedList(){//初始化头结点head=new Node();}public LinkedList(int n,boolean Order){//初始化头结点this();if(Order)create1(n);else create2(n);}//尾插法建立单链表public void create1(int n){Scanner sc=new Scanner(System.in);for(int j=0;j<n;j++){insert(this.length(),sc.next());}} //头插法建立单链表public void create2(int n){Scanner sc=new Scanner(System.in);for(int j=0;j<n;j++){insert(0,sc.next());}}public void clear() {head.setData(null);head.setNext(null);}@Overridepublic boolean isEmpty() {return head.getNext()==null;}@Overridepublic int length() {int length=0;Node p=head.getNext();while(p!=null){length++;p=p.getNext();}return length;}@Overridepublic Object get(int i) {Node p=head.getNext();//i的合法性if(i<0||p==null){try {throw new Exception("第"+i+"个数据元素不从在");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}for(int j=0;j<i&&p!=null;j++){p=p.getNext();}return p.getData();}@Override//在第i个数据元素之前插入public void insert(int i, Object x) {Node q=new Node (x);int j=-1;//判断I的合法性Node p=head;if(j>i-1||p==null){try {throw new Exception("插入位置不合法");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}for(;j<i-1;j++){p=p.getNext();}q.setNext(p.getNext());p.setNext(q);}//删除掉第i个数据元素 public void remove(int i) {Node p=head;for(int j=-1;j<i-1&&p!=null;j++){p=p.getNext();}p.setNext(p.getNext().getNext());}@Overridepublic int indexOf(Object x) {Node p=head.getNext();int j=0;while(p!=null&&!p.getData().equals(x)){p=p.getNext();++j;}if(p!=null){return j;}elsereturn -1;}@Overridepublic void display() {Node p=head.getNext();while(p!=null){System.out.print(p.getData()+" ");p=p.getNext();}System.out.println();}}
由于单链表 只需要一个头指针就能唯一标识它所以单链表的成员变量只需设置一个头指针即可
测试类
/** Kiss_My_Love* xaut* 2012/8/26* */
package www.xaut.com.linkedlist;public class TestLinkedList {public static void main(String[] args) {int n=10;LinkedList L=new LinkedList();for(int i=0;i<n;i++){L.insert(i, i);}L.display();System.out.println(L.length());System.out.println(L.get(5));L.remove(5);L.display();System.out.println(L.indexOf(9));}}
转载于:https://my.oschina.net/u/267492/blog/74653
JAVA数据结构 线性表的链式存储及其实现相关推荐
- 数据结构-线性表(链式存储结构)
线性表(链式存储结构) 特点: 用一组任意的存储单元存储线性表的数据结构,这组存储单元可以是连续的,也可以是不连续的. 对数据结构ai来说,除了存储其本身的信息之外,还需存储一个指示其后继的信息(即直 ...
- 数据结构-线性表的链式存储(包含代码实现)
线性表的链式表示和实现 链式存储结构 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 线性表的链式存储结构又称为非顺序映像或链式映像. 用一组物理位置任意的存储单元来存放线性表 ...
- 数据结构和算法:(3)3.2线性表的链式存储结构
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...
- 从零开始学数据结构和算法(二)线性表的链式存储结构
链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- Python 数据结构 之 线性表 的链式存储结构
用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明: Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...
- 【数据结构】CH2 线性表的链式存储结构
目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...
- 数据结构(四) -- C语言版 -- 线性表的链式存储 - 循环链表
文章目录 零.读前说明 一.循环链表的概述 二.循环链表的模型 2.1.包含头节点模型 2.2.不包含头节点模型 三.工程结构及简单测试案例 3.1.测试工程的目录结构 3.2.循环链表示例源码 3. ...
最新文章
- RHEL6 下安装tmux
- 聚合函数 -AVG/MAX/MIN/STDDEV/VARIANCE/SUM/COUNT/MEDIAN
- Cocos2d-x 3.2:通过ClippingNode实现一个功能完善的跑马灯公告(1)
- .net 页面框架的层次问题,嵌套问题
- LeetCode 1522. Diameter of N-Ary Tree(递归)
- java上传excel文件代码,求java把上传文件的excel表中数据存入数据库中.实现录入的代码?...
- python如何进行web开发_如何用Python做Web开发
- 2106. [NOIP2015] 斗地主
- 利用shell找出15分钟内修改的文件
- 简单的HTML5 Web Storage留言册
- 加载不同库,同名函数引起的BUG一例
- 宠物诊所java项目_java毕业设计_springboot框架的宠物医院医疗
- 计算机硬件主板各部分内部结构,电脑主板各个模块介绍与原理解读
- Premiere Pro 2022安装教程(附详细图文教程)
- 科学研究的方法-笔记01-如何提出科学研究问题
- 计算机结构体系-CISC与RISC
- [Hadoop性能调优]
- Python爬虫网易云歌词及词频统计--(周杰伦top50)
- html首页我的待办,我的待办.html
- 从 .NET 开发人员的角度理解 Excel 对象模型 (From MSDN)
热门文章
- div固定大小文字溢出自动缩小_CSS样式更改——框模型、定位、浮动、溢出
- springboot2 war页面放在那_成为微服务架构师--SpringBoot2学习笔记
- matlab--常微分方程的数值解(ODE-s)
- 离线人脸属性分析_最新开源 | 人脸识别应用套件:毫秒级离线识别 适用多类场景...
- matlab安装教程补充
- FPGA之道(35)Verilog中的并行与串行语句
- IC/FPGA 设计资源整理推荐
- 【 FPGA 】UltraFast设计方法学笔记(时钟)
- 选择ButterKnife,告别findViewById
- 两年JAVA程序员的面试总结