返回

用数组实现链表的实现方法

Android

前言

在上一篇文章中,我们探讨了链表的链式存储结构。本篇,我们将介绍另一种链表的存储方式——数组存储。

数组存储链表

数组存储链表,即使用数组来表示链表。在数组中,每个元素都由两个域组成:数据域和指针域。数据域用于存储数据元素,指针域用于指向下一个元素。

使用数组存储链表有以下优点:

  • 数组的存储空间是连续的,因此不需要像链表那样在内存中分配和释放结点。
  • 数组的访问速度快,因为可以直接通过下标访问元素。
  • 数组的插入和删除操作都很简单,只需要修改指针域即可。

但是,数组存储链表也有以下缺点:

  • 数组的大小是固定的,如果链表的长度超过数组的大小,则需要重新分配数组。
  • 数组的删除操作可能会导致数组中出现空洞,从而浪费空间。
  • 数组存储链表时,无法实现环形链表。

数组存储链表的实现

以下是如何使用数组来实现链表的代码:

#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;
}

结语

数组存储链表是一种简单而有效的链表存储方式。它具有访问速度快、插入和删除操作简单等优点。但是,它也存在数组大小固定、删除操作可能导致数组中出现空洞等缺点。