用c语言写一个静态链表遍历函数
时间: 2024-05-09 12:20:12 浏览: 116
下面是一个简单的静态链表遍历函数的示例代码:
```
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data;
int next;
} Node;
void traverseList(Node list[], int head) {
int p = head;
while (p != -1) {
printf("%d ", list[p].data);
p = list[p].next;
}
}
int main() {
Node list[MAX_SIZE] = {
{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, -1}
};
traverseList(list, 0);
return 0;
}
```
在这个示例中,我们定义了一个 `Node` 结构体,其中包含了数据和下一个元素的索引。在 `traverseList` 函数中,我们从链表的头节点开始,遍历整个链表,并输出每个节点的数据。在主函数中,我们定义了一个静态链表,然后调用 `traverseList` 函数来遍历它。
相关问题
如何使用C语言设计一个静态链表来实现航班信息的查询和检索?请结合关键字搜索功能进行说明。
在《C语言实现航班信息查询与检索示例》这篇文章中,作者详细讨论了如何使用静态链表来处理航班信息查询和检索。静态链表是一种基于数组的链表结构,特别适合于固定大小的数据集合,这使得它在处理航班信息这类有限且频繁查询的数据时非常高效。
参考资源链接:[C语言实现航班信息查询与检索示例](https://wenku.csdn.net/doc/6401acc3cce7214c316ed0a3?spm=1055.2569.3001.10343)
首先,你需要定义航班信息的数据结构`InfoType`,其中包含所有必要的信息字段,如出发地点、到达地点、航班日期、起飞时间、到达时间、机型和票价。然后,定义静态链表的节点类型`SLNode`,这个节点将包含关键字(如航班号或出发时间)、`InfoType`类型的航班记录以及指向下一个节点的指针。
静态链表的结构`SLList`会包含一个节点数组,关键字的字符个数以及链表的当前长度。在此基础上,你需要实现`Distribute`函数,用于将航班信息根据关键字(如航班号)的ASCII值分配到静态链表的不同子表中。这个分配过程有助于快速定位和检索特定的航班信息。
`Collec`函数是数据收集函数,它在静态链表的初始化或更新后使用,目的是根据关键字的字符顺序重新整理节点,以保持链表的有序性。这样,当用户通过关键字进行搜索时,比如按照出发时间或航班号,你可以通过遍历有序的静态链表快速找到所需信息。
`Display`函数可能被用于显示查询结果,虽然文章中没有提供具体实现,但是可以假设它将遍历静态链表,并按照某种格式展示节点中的航班信息。
通过上述步骤,你可以利用静态链表实现一个基本的航班信息查询系统。这不仅涵盖了数据结构的基础知识,还涉及到了字符串处理和控制结构的应用,是对C语言编程能力的一种全面锻炼。为了深入学习如何构建这样的系统,我建议你阅读《C语言实现航班信息查询与检索示例》,它不仅会教你如何实现这些功能,还会提供实际的代码示例,帮助你更好地理解整个过程。
参考资源链接:[C语言实现航班信息查询与检索示例](https://wenku.csdn.net/doc/6401acc3cce7214c316ed0a3?spm=1055.2569.3001.10343)
c语言动态数组实现静态链表代码示例
在C语言中,动态数组(数组长度可以运行时确定)通常用于实现动态数据结构,如链表。然而,标准库并未直接提供动态数组功能,我们通常会通过malloc()函数动态分配内存来创建链表节点。这里是一个简单的动态数组实现动态链表的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 动态数组的实现(作为链表节点)
Node** createDynamicArray(size_t capacity) {
// 分配初始容量的内存
Node** array = malloc(capacity * sizeof(Node*));
if (array == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
for (size_t i = 0; i < capacity; i++) {
array[i] = NULL;
}
return array;
}
// 插入节点到链表
void insert(Node** array, size_t index, int value) {
if (index >= array[0]->next == NULL && index > array[0]) {
printf("Index out of range.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = array[index];
array[index] = newNode;
}
// 遍历并打印链表
void traverse(Node** array) {
for (Node* node = array[0]; node != NULL; node = node->next) {
printf("%d ", node->data);
}
printf("\n");
}
int main() {
const size_t capacity = 5;
Node** dynamicList = createDynamicArray(capacity);
insert(dynamicList, 0, 1); // 插入第一个元素
insert(dynamicList, 2, 3); // 插入第三个元素
traverse(dynamicList); // 输出链表内容
// 释放内存
for (size_t i = 0; i < capacity; i++) {
if (dynamicList[i] != NULL) {
free(dynamicList[i]);
}
}
free(dynamicList);
return 0;
}
```
在这个例子中,`createDynamicArray`函数用于创建链表,并为其分配初始内存。`insert`函数插入新的节点,`traverse`函数则遍历整个链表。注意,这个实现仅适用于单向链表,且数组的大小需要预先设定。
阅读全文