C/C++ 中的链表数组
C/C++ 或任何编程语言中的数组是存储在连续内存位置的类似数据项的集合,并且可以使用数组的索引随机访问元素。它们可用于存储原始数据类型的集合,例如任何特定类型的 int、float、double、char 等。此外,C/C++ 中的数组可以存储派生数据类型,例如结构、指针等。下面给出的是数组的图片表示。
链表是由节点组成的线性数据结构,其中每个节点都包含对下一个节点的引用。要创建链接列表,我们需要一个指向列表第一个节点的指针。
方法:要创建一个链表数组,主要要求如下:
- 一个指针数组。
- 为了跟踪上面创建的指针数组,需要另一个指针指向数组的第一个指针。这个指针称为指针指针。
下面是链表数组的图示:
下面是实现链表数组的C++程序:
C++
// C++ program to illustrate the array
// of Linked Lists
#include
using namespace std;
// Structure of Linked Lists
struct info {
int data;
info* next;
};
// Driver Code
int main()
{
int size = 10;
// Pointer To Pointer Array
info** head;
// Array of pointers to info struct
// of size
head = new info*[size];
// Initialize pointer array to NULL
for (int i = 0; i < size; ++i) {
*(head + i) = NULL;
}
// Traverse the pointer array
for (int i = 0; i < size; ++i) {
// To track last node of the list
info* prev = NULL;
// Randomly taking 4 nodes in each
// linked list
int s = 4;
while (s--) {
// Create a new node
info* n = new info;
// Input the random data
n->data = i * s;
n->next = NULL;
// If the node is first
if (*(head + i) == NULL) {
*(head + i) = n;
}
else {
prev->next = n;
}
prev = n;
}
}
// Print the array of linked list
for (int i = 0; i < size; ++i) {
info* temp = *(head + i);
// Linked list number
cout << i << "-->\t";
// Print the Linked List
while (temp != NULL) {
cout << temp->data << " ";
temp = temp->next;
}
cout << '\n';
}
return 0;
}
输出:
0--> 0 0 0 0
1--> 3 2 1 0
2--> 6 4 2 0
3--> 9 6 3 0
4--> 12 8 4 0
5--> 15 10 5 0
6--> 18 12 6 0
7--> 21 14 7 0
8--> 24 16 8 0
9--> 27 18 9 0