java数据结构和算法(线性表)
来源:互联网 发布:家谱制作软件 编辑:程序博客网 时间:2024/05/17 22:10
线性表的定义:
零个或多个数据元素的有限序列。
元素之间是有顺序的,如元素多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素有且只有一个前驱和后继。
线性表的抽象数据类型
线性表的顺序存储结构
是指用一段地址连续的存储单元依次存储线性表中的元素。使用一维数组来实现。
顺序存储结构的优缺点
线性表的链式存储结构
单链表的实现
单链表的第一个节点前附设一个节点,称为头节点。头节点的数据域不存储任何信息。
package cn.xyc.dataStructure.link;/** * * 描述:链表接口 * * <pre> * HISTORY * **************************************************************************** * ID DATE PERSON REASON * 1 2016年10月3日 80002253 Create * **************************************************************************** * </pre> * * @author 蒙奇·d·许 * @since 1.0 */public interface ILink<T> {/** * 在尾部添加节点 * * @param node * @return */boolean addToTail(T node);/** * 在index处添加一个节点 * * @param index * @param node * @return */boolean insert(int index, T node);/** * 得到index的上一个节点 * * @param index * @return */Node<T> getPreNode(int index);}package cn.xyc.dataStructure.link;/** * * 描述:链表节点 * * <pre> * HISTORY * **************************************************************************** * ID DATE PERSON REASON * 1 2016年10月3日 80002253 Create * **************************************************************************** * </pre> * * @author 蒙奇·d·许 * @since 1.0 */public class Node<T> {private T value = null;// 数据项private Node<T> next = null;// 下一节点指针public Node() {}public Node(T value, Node<T> next) {this.value = value;this.next = next;}public T getValue() {return value;}public void setValue(T value) {this.value = value;}public Node<T> getNext() {return next;}public void setNext(Node<T> next) {this.next = next;}}package cn.xyc.dataStructure.link;/** * * 描述:单链表 * * <pre> * HISTORY * **************************************************************************** * ID DATE PERSON REASON * 1 2016年10月3日 80002253 Create * **************************************************************************** * </pre> * * @author 蒙奇·d·许 * @since 1.0 */public class LinkedList<T> implements ILink<T> {private Node<T> headNode = null;// 每个链表都存在一个空值头节点private Node<T> tailNode = null;// 尾节点private int size = 0;// 链表的长度// 初始化链表public LinkedList() {// 建立头部节点headNode = new Node<T>();}@Overridepublic boolean addToTail(T e) {Node<T> node = new Node<T>();node.setValue(e);if (size == 0) {headNode.setNext(node);}tailNode.setNext(node);tailNode = node;// 将新加的节点设置为尾节点size++;return true;}@Overridepublic boolean insert(int index, T node) {Node<T> n = this.getPreNode(index);// 得到上一个节点// 将下一个节点设为上一个节点的下一个节点Node<T> addNode = new Node<>(node, n.getNext());// 将上一个节点的下一个节点设为本节点n.setNext(addNode);// 节点的数量加1// 节点的数量return false;}@Overridepublic Node<T> getPreNode(int index) {// 判断角标是否越界validateIndex(index);if (index == 0) {// 若插入位置为第一,那么就返回头return headNode;}// 得到头Node<T> node = headNode;for (int i = 0; i <= index - 1; i++) {node = headNode.getNext();}return node;}/** * 验证下标值是否合法,非法时抛出异常。 * * @param index * 待验证的下标值 */private void validateIndex(int index) {if (index < 0 || index > size) {throw new RuntimeException("无效的下标:" + index);}}}
单链表和顺序存储结构的优缺点:
静态链表
让数组的元素都是由两个数据域组成,data和cur。也就是说,数组的每个下标都对应一个data和cur,data用来存放数据元素,游标cur相当于单链表的next指针,存放该元素的后继在数组中的下标。这种用数组描述链表就是静态链表。也叫做游标实现法。循环链表
将单链表中终端节点指针端由空指针改为指向头节点,就是整个单链表形成一个环,这种头尾相接的单链表称为单循环链表。
双向链表
是在单链表的每个结点中,再设置一个指向其前驱结点的指针域,所以在双向链表中都有两个指针域,一个指向前驱,一个指向后继。
0 0
- java数据结构和算法(线性表)
- Java数据结构和算法:线性表
- 数据结构和算法03-线性表02
- Java版常见数据结构与算法1 -- 数据结构 --线性表
- 【算法和数据结构】1.1--数据结构之线性表
- JAVA数据结构和算法(二)—线性查找
- 数据结构和算法 C/C++ Java 和 C# 版 - (1)线性表 精准表述
- 数据结构和算法 C/C++ Java 和 C# 版 - (2)线性表 精准表述 实现
- 【Java数据结构】线性表
- Java数据结构--线性表
- 数据结构与算法 线性表
- 数据结构与算法--线性表
- 数据结构与算法---线性表
- 数据结构与算法--线性表
- 数据结构和算法系列1 线性表之顺序表
- 数据结构和算法系列2 线性表之链表
- 一步一步复习数据结构和算法基础-线性表
- C++数据结构和算法每天一练(线性表)
- 【SSM 4】Mybatis逆向生成工具
- 如何将java文件夹转换为jar文件
- 初识神经网络(2)
- JS 输入框只能输入数字
- 第六周 项目5-排队看病模拟
- java数据结构和算法(线性表)
- __func__预定义标识符
- 仿网易选项卡制作
- web.xml中配置的那些事
- Android的线程
- jvm 内存
- 打印1到最大的n位数
- 1047. Student List for Course (25)
- c++中list、vector、set、map的区别