📜  各种数据结构上的常见操作(1)

📅  最后修改于: 2023-12-03 15:37:09.755000             🧑  作者: Mango

各种数据结构上的常见操作

在程序开发中,使用数据结构是非常常见的操作。以下是各种数据结构上的一些常见操作。

数组
插入元素

可以在数组中插入元素,一般有以下两种方式:

在末尾插入元素

int[] arr = {1, 2, 3, 4};
int[] newArr = Arrays.copyOf(arr, arr.length + 1);
newArr[newArr.length - 1] = 5;
arr = newArr;

在指定位置插入元素

int[] arr = {1, 2, 3, 4};
int index = 2;
int value = 5;

int[] newArr = new int[arr.length + 1];
for (int i = 0, j = 0; i < arr.length; i++, j++) {
    if (i == index) {
        newArr[j++] = value;
    }
    newArr[j] = arr[i];
}
arr = newArr;
删除元素

同样地,可以从数组中删除元素,也有以下两种方式:

删除末尾元素

int[] arr = {1, 2, 3, 4};
int[] newArr = Arrays.copyOfRange(arr, 0, arr.length - 1);
arr = newArr;

删除指定位置元素

int[] arr = {1, 2, 3, 4};
int index = 2;

int[] newArr = new int[arr.length - 1];
for (int i = 0, j = 0; i < arr.length; i++, j++) {
    if (i == index) {
        j--;
        continue;
    }
    newArr[j] = arr[i];
}
arr = newArr;
链表
插入元素

链表中的插入操作比数组灵活,可以在任何位置插入元素,并且不需要扩展数组长度。

在末尾插入元素

Node head = new Node(1, null);  // 初始化头结点
Node curr = head;
while (curr.next != null) {
    curr = curr.next;
}
curr.next = new Node(2, null);  // 在末尾插入元素2

在指定位置插入元素

Node head = new Node(1, null);  // 初始化头结点
int index = 2;
int value = 5;

Node curr = head;
for (int i = 1; i < index; i++) {
    curr = curr.next;
}
Node newNode = new Node(value, curr.next);
curr.next = newNode;
删除元素

同样地,链表中的删除操作也比数组灵活。

删除末尾元素

Node head = new Node(1, null);  // 初始化头结点
Node curr = head;
while (curr.next.next != null) {
    curr = curr.next;
}
curr.next = null;  // 删除末尾元素

删除指定位置元素

Node head = new Node(1, null);  // 初始化头结点
int index = 2;

Node curr = head;
for (int i = 1; i < index; i++) {
    curr = curr.next;
}
curr.next = curr.next.next;  // 删除指定位置元素

栈是一种先进后出的数据结构,常用于表达式求值和函数调用等场景。以下是栈的常见操作。

入栈

栈中的元素只能从栈顶入栈,即插入到链表头部。

Node oldHead = head;
Node newHead = new Node(value, oldHead);
head = newHead;
出栈

从栈顶弹出元素,即从链表头部删除元素。

Node oldHead = head;
head = oldHead.next;
队列

队列是一种先进先出的数据结构,常用于消息通信和线程池等场景。

入队

队列中的元素只能从队尾入队,即插入到链表末尾。

Node oldTail = tail;
Node newTail = new Node(value, null);
oldTail.next = newTail;
tail = newTail;
出队

从队头删除元素。

Node oldHead = head;
head = oldHead.next;