Java数据结构之线性表

Java数据结构之线性表完整攻略

什么是线性表

线性表是n个数据元素的有限序列,其中数据元素的类型相同。线性表中含有首元素和末元素。若表中只有一个数据元素,则该数据元素既是首元素又是末元素,这个数据元素成为线性表的唯一元素。

线性表的基本操作

  • 初始化操作 initList(List L):建立一个空的线性表L
  • 插入操作 insert(List L, int i, Object o):将元素o插入到线性表L的第i个位置
  • 删除操作 delete(List L, int i):删除线性表L的第i个元素
  • 查找操作 getElement(List L, int i):返回线性表L中第i个元素的值
  • 求线性表长度 getListLength(List L):返回线性表L的长度
  • 清空操作 clearList(List L):清空线性表L中的所有元素

线性表的顺序存储结构

线性表的顺序存储结构可以使用数组来实现。定义一个数组L来存放线性表的数据元素,同时定义一个变量length来记录线性表的长度。

例如,下面的示例代码演示了使用Java数组来实现一个线性表:

public class ArrayList {

   private int[] list;
   private int length;

   public ArrayList(int capacity) {
      this.list = new int[capacity];
      this.length = 0;
   }

   public void insert(int index, int value) {
      if (index < 0 || index > length) {
         throw new IndexOutOfBoundsException("Index out of range!");
      }
      if (length == list.length) {
         int[] newList = new int[list.length * 2];
         for (int i = 0; i < length; i++) {
            newList[i] = list[i];
         }
         list = newList;
      }
      for (int i = length; i > index; i--) {
         list[i] = list[i - 1];
      }
      list[index] = value;
      length++;
   }

   public void delete(int index) {
      if (index < 0 || index >= length) {
         throw new IndexOutOfBoundsException("Index out of range!");
      }
      for (int i = index; i < length - 1; i++) {
         list[i] = list[i + 1];
      }
      length--;
   }

   public int getElement(int index) {
      if (index < 0 || index >= length) {
         throw new IndexOutOfBoundsException("Index out of range!");
      }
      return list[index];
   }

   public int getListLength() {
      return length;
   }

   public boolean isEmpty() {
      return length == 0;
   }

   public void clear() {
      length = 0;
   }

   public static void main(String[] args) {
      ArrayList list = new ArrayList(5);
      list.insert(0, 1);
      list.insert(1, 2);
      list.insert(2, 3);
      list.insert(1, 4);
      list.delete(2);
      System.out.println("List length: " + list.getListLength());
      for (int i = 0; i < list.getListLength(); i++) {
         System.out.println("Index " + i + ": " + list.getElement(i));
      }
   }
}

线性表的链式存储结构

线性表的链式存储结构使用链表来实现。每个节点存储数据元素,同时还需要一个指向下一个节点的指针。

例如,下面的示例代码演示了使用Java链表来实现一个线性表:

public class LinkedList {

   private Node head;
   private int length;

   private class Node {
      int data;
      Node next;

      Node(int data) {
         this.data = data;
      }
   }

   public LinkedList() {
      this.head = null;
      this.length = 0;
   }

   public void insert(int index, int value) {
      if (index < 0 || index > length) {
         throw new IndexOutOfBoundsException("Index out of range!");
      }
      Node node = new Node(value);
      if (index == 0) {
         node.next = head;
         head = node;
      } else {
         Node prev = findNode(index - 1);
         node.next = prev.next;
         prev.next = node;
      }
      length++;
   }

   public void delete(int index) {
      if (index < 0 || index >= length) {
         throw new IndexOutOfBoundsException("Index out of range!");
      }
      if (index == 0) {
         head = head.next;
      } else {
         Node prev = findNode(index - 1);
         prev.next = prev.next.next;
      }
      length--;
   }

   public int getElement(int index) {
      if (index < 0 || index >= length) {
         throw new IndexOutOfBoundsException("Index out of range!");
      }
      Node node = findNode(index);
      return node.data;
   }

   public int getListLength() {
      return length;
   }

   public boolean isEmpty() {
      return length == 0;
   }

   public void clear() {
      head = null;
      length = 0;
   }

   private Node findNode(int index) {
      Node node = head;
      for (int i = 0; i < index; i++) {
         node = node.next;
      }
      return node;
   }

   public static void main(String[] args) {
      LinkedList list = new LinkedList();
      list.insert(0, 1);
      list.insert(1, 2);
      list.insert(2, 3);
      list.insert(1, 4);
      list.delete(2);
      System.out.println("List length: " + list.getListLength());
      for (int i = 0; i < list.getListLength(); i++) {
         System.out.println("Index " + i + ": " + list.getElement(i));
      }
   }
}

以上代码演示了如何在Java中使用数组和链表来实现线性表的基本操作,具体实现可以根据实际需求进行调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java数据结构之线性表 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • ecnuoj 5042 龟速飞行棋

    5042. 龟速飞行棋 题目链接:5042. 龟速飞行棋 赛中没过,赛后补题时由于题解有些抽象,自己写个题解。 可以发现每次转移的结果只跟后面两个点的胜负状态有关。 不妨设 \(f_{u,a,b}\) 表示,\(u+1\) 号点的胜负态为 \(a\),\(u+2\) 号点的胜负态为 \(b\),此时从 \(1\) 号点出发的胜负态是什么。那么可以发现,利用 …

    算法与数据结构 2023年4月17日
    00
  • 用C语言实现单链表的各种操作(一)

    “用C语言实现单链表的各种操作(一)”详细介绍了如何通过C语言来实现单链表的常见操作。下面,我会结合该文章的内容,对其进行完整攻略的介绍。 文章的主要内容包括:单链表的定义、单链表的初始化、判断单链表是否为空、获取单链表中元素个数、在链表开头插入元素、在链表末尾插入元素、在链表中间插入元素、删除链表中指定元素、在链表中查找指定元素、链表的反转以及链表的销毁。…

    数据结构 2023年5月17日
    00
  • C语言数据结构之栈和队列的实现及应用

    C语言数据结构之栈和队列的实现及应用 什么是栈和队列? 栈是一种具有后进先出(LIFO)特性的线性数据结构,可以理解为一个只能在一端进行插入和删除操作的数据结构。通常称插入元素的一端为栈顶,删除元素的一端为栈底。 队列是一种具有先进先出(FIFO)特性的线性数据结构,可以理解为一个只能在两端进行插入和删除操作的数据结构。一端进行插入操作,称之为队尾,一端进行…

    数据结构 2023年5月17日
    00
  • Mysql Innodb存储引擎之索引与算法

    Mysql Innodb存储引擎之索引与算法 MySQL是一款非常受欢迎的关系型数据库,有许多的存储引擎可供选择,其中InnoDB是目前最受欢迎的存储引擎之一。索引是InnoDB存储引擎的一个重要特性,它可以大大提高数据库查询的效率。本文将详细讲解InnoDB存储引擎的索引与算法。 索引 索引是一种数据结构,它将表中的列与对应的行位置组成键值对,以便快速查找…

    数据结构 2023年5月17日
    00
  • 四边形不等式学习笔记

    简要题意 四边形不等式是一种 dp 优化策略。多用于 2D DP。 内容 对于区间 \([l,r]\) 带来的贡献 \(w(l,r)\),如果其满足: 对于 \(L\leq l\leq r \leq R\),\(w(L,r)+w(l,R)\leq w(L,R)+w(l,r)\) 则称 \(w\) 满足四边形不等式。特别地,如果上式符号取等,则称其满足四边形恒…

    算法与数据结构 2023年4月17日
    00
  • java实现队列queue数据结构详解

    Java实现队列(Queue)数据结构详解 什么是队列(Queue) 队列(Queue),是一种先进先出(First In First Out, FIFO)的数据结构,即最先进入队列的元素也会最先出队列。 队列具备两个基本操作:入队(enqueue)和出队(dequeue)。入队操作将元素加入到队列的尾部,出队操作将元素从队列头部取出并删除。 Java中的Q…

    数据结构 2023年5月17日
    00
  • java数据结构基础:稀疏数组

    Java数据结构基础:稀疏数组 在开发过程中,我们需要处理一些稀疏矩阵(大部分元素为0)的数据。这时候,使用稀疏数组是比较高效的方法。 什么是稀疏数组 稀疏数组是由很多元素值相同的元素组成,这些元素的值通常为0。而这些值不同时都存储在一个数组中会浪费很多内存空间。因此,我们使用稀疏数组来存储这些元素。 稀疏数组的定义: 稀疏数组的行数可以理解为矩阵的行数,而…

    数据结构 2023年5月17日
    00
  • C++二叉树结构的建立与基本操作

    C++二叉树是一种非常常见的数据结构,同时也是算法中经常使用的一种数据结构。本文将详细讲解C++二叉树的建立和基本操作,包括二叉树的定义、创建、遍历和删除等。 1. 二叉树的定义 二叉树是一种树形结构,每个节点最多只有两个子节点:左子节点和右子节点。树的深度取决于有多少个节点,根节点是最顶端的节点,不再有父节点。节点之间存在一些有天然排序关系且有先后性的关系…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部