📅  最后修改于: 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;