c++中static结构体链表的使用
时间: 2023-08-14 09:42:45 浏览: 107
在 C++ 中,可以使用 `static` 关键字来定义静态的结构体链表。静态结构体链表和动态结构体链表相比,最大的不同在于它的空间是在编译期分配的,因此其空间大小是固定的,也就是不能动态地增加或缩小。下面是一个使用 `static` 关键字定义静态结构体链表的示例代码:
```c++
#include <iostream>
const int MAXSIZE = 100; // 静态链表最大容量
struct Node {
int data;
int next;
};
static Node node[MAXSIZE]; // 静态链表数组
static int head = -1; // 头节点下标
void addNode(int value) {
for (int i = 0; i < MAXSIZE; i++) {
if (node[i].next == -2) { // 找到一个空闲节点
node[i].data = value;
node[i].next = -1; // 新节点的 next 指向空
if (head == -1) {
head = i; // 如果是第一个节点,则将 head 指向该节点
} else {
int current = head;
while (node[current].next != -1) {
current = node[current].next; // 找到最后一个节点
}
node[current].next = i; // 将新节点插入到链表尾部
}
return;
}
}
std::cout << "Static Linked List is full!" << std::endl;
}
void printList() {
int current = head;
while (current != -1) {
std::cout << node[current].data << " ";
current = node[current].next;
}
std::cout << std::endl;
}
int main() {
for (int i = 0; i < MAXSIZE; i++) {
node[i].next = -2; // 初始化静态链表数组,-2 表示该元素为空闲
}
addNode(1);
addNode(2);
addNode(3);
printList();
return 0;
}
```
在这个示例代码中,我们使用 `static` 关键字修饰了 `node` 和 `head` 变量,使它们的作用域被限定在当前文件中。在 `main` 函数中,我们向静态链表中添加了三个节点,然后调用 `printList` 函数打印链表中的所有节点。
需要注意的是,由于静态链表的空间是在编译期分配的,因此其空间大小是固定的,也就是不能动态地增加或缩小。如果静态链表已满,再添加新的节点就会导致数组越界的错误。因此,在使用静态链表时,需要预先确定链表的最大容量,并在声明数组时将数组的大小设置为该容量。
阅读全文