返回
用数组实现链表的实现方法
Android
2023-09-11 21:15:33
前言
在上一篇文章中,我们探讨了链表的链式存储结构。本篇,我们将介绍另一种链表的存储方式——数组存储。
数组存储链表
数组存储链表,即使用数组来表示链表。在数组中,每个元素都由两个域组成:数据域和指针域。数据域用于存储数据元素,指针域用于指向下一个元素。
使用数组存储链表有以下优点:
- 数组的存储空间是连续的,因此不需要像链表那样在内存中分配和释放结点。
- 数组的访问速度快,因为可以直接通过下标访问元素。
- 数组的插入和删除操作都很简单,只需要修改指针域即可。
但是,数组存储链表也有以下缺点:
- 数组的大小是固定的,如果链表的长度超过数组的大小,则需要重新分配数组。
- 数组的删除操作可能会导致数组中出现空洞,从而浪费空间。
- 数组存储链表时,无法实现环形链表。
数组存储链表的实现
以下是如何使用数组来实现链表的代码:
#include <iostream>
#include <vector>
using namespace std;
class Node {
public:
int data;
int next;
Node(int data, int next) : data(data), next(next) {}
};
class LinkedList {
public:
vector<Node> nodes;
void insert(int data) {
nodes.push_back(Node(data, nodes.size()));
}
void delete(int data) {
for (int i = 0; i < nodes.size(); i++) {
if (nodes[i].data == data) {
nodes.erase(nodes.begin() + i);
break;
}
}
}
int search(int data) {
for (int i = 0; i < nodes.size(); i++) {
if (nodes[i].data == data) {
return i;
}
}
return -1;
}
void print() {
for (int i = 0; i < nodes.size(); i++) {
cout << nodes[i].data << " ";
}
cout << endl;
}
};
int main() {
LinkedList list;
list.insert(1);
list.insert(2);
list.insert(3);
list.insert(4);
list.insert(5);
list.print(); // 输出:1 2 3 4 5
list.delete(3);
list.print(); // 输出:1 2 4 5
int index = list.search(4);
cout << "Index of 4: " << index << endl; // 输出:2
return 0;
}
结语
数组存储链表是一种简单而有效的链表存储方式。它具有访问速度快、插入和删除操作简单等优点。但是,它也存在数组大小固定、删除操作可能导致数组中出现空洞等缺点。